Co czytelniejsze, konwersja nie-wprost czy "?:"?

0

Słyszałem wiele razy że operator "?:" jest mało czytelny, stąd z ciekawości chciałbym się dowiedzieć która z wersji instrukcji z tegorocznej matury jest dla Was czytelniejsza?

7

Mocno zależy od kontekstu, ale z reguły zapis wprost:

if (a == '0')
    ++z;

jest najczytelniejszy. Chcę tylko zaznaczyć, że z reguły != zawsze. :)

2

Postać z if-em jest bardziej poręczna. W wersji dwuliniowej można łatwo ustawić breakpoint by wyłapać warunek (ułatwia debugowanie).
Pierwsze dwa zapisy wymagają chwili zastanowienia (przynajmniej jak dla mnie), a to jest niepotrzebny dodatkowy wysiłek.

0
MarekR22 napisał(a):

Postać z if-em jest bardziej poręczna. W wersji dwuliniowej można łatwo ustawić breakpoint by wyłapać warunek (ułatwia debugowanie).
Pierwsze dwa zapisy wymagają chwili zastanowienia (przynajmniej jak dla mnie), a to jest niepotrzebny dodatkowy wysiłek.

Dla mnie druga postać to taki skrócony if - jeśli są dwie wartości do użycia:

z += (c == '0')?1:3; 

zamiast

if (c == '0')     
  z += 1;
else
  z += 3;

Nie wiem, może to wymaga jakiegoś treningu myślowego żeby to od razu przeczytać.
Ale generalnie popieram zasadę "don't make me think!" i rozumiem (co widać w ankiecie), że dla większości jest to nieczytelne.

W tym przypadku to było trochę bez sensu bo tam było zero, więc w 95% przypadków napisałbym raczej wersję 3 - z nową linią.

1

Imo @_13th_Dragon ma rację. Cała trudność w zrozumieniu działania kodu z użyciem ?: może wynikać tylko z niewiedzy o implicit konwersji: TYP*->bool/bool->TYP*. Dopóki w zapisie nie występuje więcej niż jeden operator ?: to nie widzę problemu z nieczytelnością.

1 użytkowników online, w tym zalogowanych: 0, gości: 1