2012-12-14 7 views

Odpowiedz

12

Jest idealnie ważne, aby mieć:

if (0 == var) {} 
and 
if (null == someObj) {} 

To słynne nazywa yoda condition, aby zapobiec przypadkowym użyciem pojedynczego = zamiast ==.

Ja osobiście nigdy z niego nie korzystałem. Ale niektórzy to lubią. To naprawdę kwestia gustu.


Jednak w Jawie nie ma sensu. Ponieważ taka przypadkowa literówka zostaje złapana podczas kompilacji.

Poniżej podano błąd kompilacji w Javie.

if(var = 0) 
{ 
//Some code 
} 

Ponieważ operacja przypisania nie daje wartości Boolean w Javie. Jednak w językach takich jak C/C++ powyższe jest prawidłowe i kompilator nie dałby żadnych błędów, gdyby ostrzeżenia nie były włączone. Powyższy warunek if zawsze będzie oznaczał fałsz (0) w C/C++. Może to pozostać niezauważone i dać nieoczekiwane wyniki w czasie wykonywania.

W GCC, z włączonym wszystkie ostrzeżenia, to dać ostrzeżenie dla powyższego w C lub C++:

warning: suggest parentheses around assignment used as truth value 

Więc może to nie stanowi większego zastosowania w C/C++ też jako jeden oczekuje się skompilować ze wszystkimi ostrzeżeniami i napraw wszystkie ostrzeżenia. Jak już powiedziałem, jest to osobisty wybór i nie ma znaczenia.

Tak if (0 == var){} jest prawidłową składnią i jest taka sama jak if (var == 0) {}, a jeśli wolisz Yoda, możesz to zrobić!

+1

Jest to również dobry sposób na uniknięcie niektórych przypadków zerowego sprawdzania. Dzięki. – assafmo

0

Pierwszy styl jest preferowany przez niektórych, ponieważ mówiąc var = null zamiast var == null przez przypadek byłby błąd, który będzie trudno złapać w językach takich jak C i C++, ale null = var byłoby łatwo złapać, ponieważ nie skompilować . Jak zauważono w komentarzach, nie dotyczy to Javy, ponieważ null = var nie jest wyrażeniem boolowskim.

+1

Nie dotyczy java w przeciwieństwie do C lub C++, ponieważ rzeczy nie mogą być wymuszone na bool's – jozefg

+0

@jozefg Dzięki, zaktualizuję moją odpowiedź. – gsingh2011

+0

Dziękuję wszystkim, to więcej niż wystarczy. Doceniam to. –

4

Ogólnie rzecz biorąc zapisanie 0 == n nazywa się yoda condition. Bo jeśli powiesz to głośno, powiesz if zero equals my var. To jest lepiej napisać n == 0 Ale to jest dokładnie to samo. Ale to jest lepiej czytane.

Niektóre zalety tego warunku nie dotyczą java.

if (value = 42) 

daje błąd kompilacji. value = 42 daje int, która nie jest poprawnym wejściem w if w java. Ale całkowicie legalne w C.

Aby porównać przy użyciu constant po lewej stronie, należy postępować zgodnie ze wspólną najlepszą praktyką. Ale tylko przy użyciu metody Object equals.

if ("CONSTANT".equals(myString)) 

jeśli myString jest zerowy lub porównujesz primitives ponieważ nie ma .equals() dostęp do zmiennych nie ma żadnego w sprawdzanie wartości null.

if ("CONSTANT" == null) 

Chociaż jest to tylko moja opinia, korzyść jest tylko czytelna.

0

Ten typ względem jest znany jako „Yoda wyrażeń”, ponieważ są one „do tyłu” w stosunku do angielskiego języka naturalnego.

Nie sądzę, że opłaca się z zadaniami - dobre narzędzia audytu kodu wychwytują tego typu błędy, a większość powinna już być złapana przez bardziej ścisły kompilator Java (użycie = zamiast == było częstą literówką w C!)

Jednak, gdy używasz metod compareTo, musisz wziąć pod uwagę wartości null.

if ("example".equals(input)) 

nie można uruchomić w NullPointerException, natomiast bardziej "naturalne"

if (input.equals("example")) 

może i potrzebuje dodatkowego sprawdzanie null wartości.

Powiązane problemy