conditional ternary operator

Operator ?: jako skrót instrukcji if…else – hot || not?

Kiedyś w pracy dyskutowaliśmy o stosowaniu operatora warunkowego (conditional ternary operator) ?: oraz instrukcji if...else. I właśnie wpadłam w internetach na kod, w którym były one używane wymiennie. To zmusiło mnie trochę do tego, aby poruszyć ten temat na blogu.

Operator warunkowy (Conditional ternary operator)

condition ? exprTrue : exprFalse

Często ten operator jest wykorzystywany do skracania instrukcji if...else. Powyższy kod można „przetłumaczyć” na:

if (condition) {
  exprTrue
} else {
  exprFalse
}

Na pierwszy rzut oka skrót za pomocą operatora wydaje się super sprawą. Czy aby na pewno?

Operator ?: służy do przypisywania lub zwracania wartości, dlatego używamy go z returnami. Nie służy do kontrolowania flow.

Operator ?: możemy stosować wtedy, kiedy zwracamy jakąś wartość lub przypisujemy ją do zmiennej.

Dla całej reszty innych przypadków – nie.

Dlaczego?

  • Bo tak mówi definicja operatora ?:
  • Nie każdy tak dobrze rozumie kod, jak developer, który go pisze. Łatwo jest patrzeć na proste przykłady, jednak w kodzie złożonego projektu zrozumienie „co autor miał na myśli” może być skomplikowanym procesem. A jak sami dobrze wiecie – w realnym świecie dosyć często trzeba rozkminiać obcy kod. Łatając bugi, robiąc code review, zwyczajnie komuś pomagając, i tak dalej…
  • Kontrolując flow aplikacji często trzeba kontrolować wiele warunków. Jeśli decydujesz się na używanie operatora ?: w tym przypadku, musisz zauważyć, że ta praktyka prowadzi do zagnieżdżeń i nieczytelnego kodu.
  • Jeśli chcesz korzystać z operatora ?: w kontroli aplikacji tylko dla prostych warunków, a do złożonych już nie – to z kolei prowadzi do niespójnego kodu.

Więcej na ten temat możesz poczytać tu: KLIK!KLIK!KLIK!

Artykuły, które mogą Ci się spodobać...

Wpisz hasło, którego szukasz i naciśnij ENTER, aby je wyszukać. Naciśnij ESC, aby anulować.

Dawaj na górę