2010-05-12 25 views
5

Pisałem następujące if -statement w Javie:Operator warunkowy w instrukcji if?

if(methodName.equals("set" + this.name) || 
    isBoolean() ? methodName.equals("is" + this.name) : 
        methodName.equals("get" + this.name)) { 
    ... 
} 

Czy jest to dobra praktyka, aby pisać takie wyrażenia w if, aby oddzielić państwo od kondycji? Czy to wyrażenie można uprościć?

+0

Czy znasz istniejące narzędzia mapowania Javabean? Jest ** dużo ** :) – BalusC

+0

Nie mam nic szczególnie ważnego do wniesienia, ale nawet jako ktoś, kto kocha operatora trójskładnikowego, muszę zauważyć, że niektórzy ludzie mocno wierzą, że powinien on być używany bardzo rzadko. Ci ludzie prawdopodobnie kupiliby twoje użycie. –

+0

@BalusC: Świetne przypuszczenie o mojej aktywności JavaBeans. Wdrażam to tylko dla hobby i użytku osobistego, czyszczenie składni wewnątrz fasoli przez właśnie 'super.property (newValue)' w każdym setera. ;-) ale jestem tego świadomy, dziękuję za wzmiankę. – Pindatjuh

Odpowiedz

8

chciałbym zmienić go do

if (methodName.equals("set" + this.name) 
|| methodName.equals((isBoolean() ? "is" : "get") + this.name)) { 
    ... 
} 
+0

I chciałbym usunąć niepotrzebne 'this''s –

+1

@Software Monkey: to jest mój styl kodu, przepraszam, jeśli ci to przeszkadza. – Pindatjuh

+0

@Pindatjuh: Jasne - powiedziałem "chciałbym", a nie "powinieneś". Do każdego z nich. Nie przeszkadza mi to, to tylko dodatkowe pisanie. –

2

Czy jest dobrą praktyką? To dobrze, jeśli ułatwia czytanie. Ułatwia to odczytanie, jeśli (1) tak jest i (2) osoba, która się z nim pomyli, nie będzie jej czytać. Kto to przeczyta?

2

Czy nie podoba Ci się następujące dzieło?

if (methodName.equals("set" + this.name) 
    || methodName.equals("get" + this.name) 
    || (isBoolean() && methodName.equals("is" + this.name))) { 
    ... 
} 

To jest bardziej czytelny niż sposób, w jaki został użyty operator potrójny i na pewno łatwiejsze do zrozumienia. Ma również tę zaletę, że może uniknąć niepotrzebnego wywołania metody do metody isBoolean (ma albo 1, 2, albo 4 wywołania metod, podczas gdy twój zawsze ma 1 albo 3, zysk/strata wydajności jest prawdopodobnie zbyt mały, by to zauważyć).

Również tam podobne pytanie tutaj zatytułowany "Is this a reasonable use of the ternary operator?" Jeden użytkownik miał the following to say:

Operator trójargumentowy ma zwraca wartości.

IMO, nie powinien mutować stanu, a należy użyć wartości zwracanej.

W drugim przypadku użyj instrukcji if. Jeśli instrukcje mają służyć do wykonywania bloków kodu .

Należy pamiętać, że zawarte nawiasy wokół wypowiedzi zawierające „& &” dla czytelności. Nie są konieczne, ponieważ x && y jest oceniane przed m || n.

Niezależnie od tego, czy zdecydujesz się go użyć, zależy to od Ciebie, ale staram się go unikać na rzecz czytelności.

+0

Twoje przepisanie jest bardzo praktyczne, ponieważ metoda "getSomeBooleanProperty" również przejdzie. Chociaż nie jest tak czytelny jak subiektywny SLaks. – Pindatjuh

2

byłbym skłonny go zmienić na

if (methodName.equals(setterForThis()) 
    || methodName.equals(getterForThis())) { 
    ... 
} 

z niektórych funkcji wydobytych:

private String setterForThis() { 
    return "set" + this.name; 
} 

private String getterForThis() { 
    return (isBoolean() ? "is" : "get") + this.name; 
} 

To już oczywiście, ale nie jestem do golfa i tak.