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?
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. :)
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.
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ą.
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ą.