Очень странная функция

junior_developer
Offline
Зарегистрирован: 27.11.2017
String ipToString(IPAddress ip){
  String s="";
  for (int i=0; i<4; i++)
    s += i  ? "." + String(ip[i]) : String(ip[i]);
  return s;
}

Не понял совсем, что написано в строке

s += i  ? "." + String(ip[i]) : String(ip[i]);

Переменная  s имеет тип String, а к ней прибавляется i, имеющая тип int! Дальше стоит знак вопроса и точка в кавычках. Зачем? Подскажите пожалуйста, кто знает, как можно расшифровать эту строчку!

sadman41
Offline
Зарегистрирован: 19.10.2016

Программист типа вас перекатывал исходник с книжки, ничего в коде не понял и поставил вопросительный знак: как бэ вопрос риторический задал - что я вообще в профессии делаю?

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Тернарный условный оператора

Это равнозначно конструкции

if (s += i)
   "." + String(ip[i]) 
else
   String(ip[i]);

 

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Читай про тернарную операцию.
Условие?ветвление1:ветвление2
В данном случае сначала нужно рассматривать правую часть. И в зависимости от состояния прибавлять значение к левой.
Здесь тупо:
Если первый элемент, то просто добавляем в строку первую цифру IP-адреса, если не первая то добавляем в строку '.' и цифру IP-адреса.
Результатом будет строка типа "a,b,c,d"

Kakmyc
Offline
Зарегистрирован: 15.01.2018

v258 пишет:

Тернарный условный оператора

Это равнозначно конструкции

if (s += i)
   "." + String(ip[i]) 
else
   String(ip[i]);

 

Так лучше не писать.

В ряде случаев не прокатит.

На самом деле лучше так:

for(int i=0;i<4;i++){
if(i==0){s+=String(ip[i]);}
else{s+='.'+String(ip[i]);}
}

 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Kakmyc пишет:

Неправда ваша.

Да, действительно ))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

junior_developer пишет:

Не понял совсем, что написано в строке

s += i  ? "." + String(ip[i]) : String(ip[i]);

Подскажите пожалуйста, кто знает, как можно расшифровать эту строчку!

Подсказать-то можно, только что Вы бкдете делать со следующей строчкой?

давайте я Вам подскажу правильное решение. Прочитайте вот эту книгу и подобные вопросы отпадут сами собой.