Mam takie krótkie pytanie: dlaczego funkcja equals tak zapisana "tekst".equals(typ)
jest lepsza od tak zapisanej typ.equals("tekst")
?
Bo pierwsza nie wymaga null-checka?
Zauważ że druga wymaga żebyś najpierw sprawdził czy typ!=null bo inaczej możesz załapać się na NullPointerException
A poważnie, uważam wywołanie
zm.equals("bleble");
za lepsze. Jeżeli dochodzi do powyższego porównania i zm == null, to zapewne skopana jest wcześniejsza część programu i dobrze jest się o tym dowiedzieć jak nawcześniej.
hehe kiedyś to określali jako "Yoda convention".
"Blue".equals("Sky");
To tak jakby powiedzieć Blue is the sky zamiast po prostu Sky is blue. Tylko z sentymentu do Gwiezdnych Wojen czasami tego używam, ale przychylam się do w/w opinii że lepiej porównywać normalnie bo wystąpienie nulla faktycznie z ogromnej większosći przypadków świadczy o grubym błędzie gdzieś wczesniej.
No niekoniecznie głupoty. Szczególnie gdy null jest dopuszczalną wartością (np. parametry nieobowiązkowe lub dziwne mapowania z formularza). Choć yoda convention jest głupie to jednak wolę to niż dodatkowy null check.
A czy to po części też nie wywodzi się z języków, które zezwalają w if'ie na warunki inne, niż bool?
Wtedy yoda convention pozwala wykryć takie błędy, gdzie się wpisało "=", zamiast "=="
To przejdzie:
if (i = 10) { /* do something */ }
a to już nie:
if (10 = i) { /* do something */ }
Pośrednio tak, ponieważ dzięki temu unikano błędów. Z drugiej strony yc było propagowane jako jedna z dobrych praktyk ponieważ pozwalało eliminować nadmierne nullcheck.