2016-05-05 5 views
1

Ich fand den folgenden Ausschnitt in unserer Code-Basis. Dies ist Code, der weit verbreitet ist und keine Probleme verursacht hat, und ich kann nicht herausfinden warum.Zuordnung als Teil von ternär wenn

element = someBoolean ? 
      element = parentElement : 
      element; 

Sollte nicht die zweite Zeile element auf einen leeren Wert sein Zurücksetzen oder etwas, nachdem es auf parentElement

ETA festgelegt ist: Ich frage mich, was der Rückgabewert der element = parentElement Klausel wäre, weil es didn Es sieht so aus, als ob da drüben irgendwelche Renditen wären. Ich habe vergessen, dass es in Java ein Konzept von Mehrfachzuweisungen gibt, also würde das Element einfach zweimal gesetzt werden.

+1

Was meinen Sie mit _empty value_? Und was lässt dich denken, dass das passieren sollte? Abhängig von Ihrem realen Code ist dieses Element elementelElement: vollständig redundant. Verwenden Sie einfach 'parentElement' im Ternär, keine Notwendigkeit für die Zuweisung. –

+1

Wenn 'someBoolean' wahr ist, dann ist der Code' element = element = parentElement', was, obwohl redundant, funktionieren sollte. –

+0

Ich weiß nicht, was ich mit leerem Wert meine. Ich wundere mich, was die Aufgabe im if-true Teil des Ternärs ist, wenn es eine Aufgabe gibt. Ich weiß, dass dieser Code falsch ist. Ich versuche herauszufinden, warum es so funktioniert zu haben scheint, wie ich es erwartet habe, bevor ich diesen Fehler bemerkt habe. – chama

Antwort

8

Sollte nicht das zweite Leitungselement auf einen leeren Wert sein Zurücksetzen oder etwas, nachdem es auf parent

Ich weiß nicht gesetzt ist, warum Sie das denken würde. Der Zweck der gesamten Aussage ist, element zu parentElement möglicherweise neu zuzuweisen. Die Aussage ist äquivalent zu:

element = someBoolean ? 
      parentElement: 
      element; 

Dies liegt daran, dass eine Zuweisungsanweisung (element = parentElement) einen Wert der RHS (d.h. parentElement) aufweist. Ich würde es auf diese Weise einfach schreiben, aber:

if (someBoolean) { 
    element = parentElement; 
} 
+0

Sie haben Recht - das ist wirklich schlechter Code :(Ich verstehe es jetzt. Danke! – chama

3

Die Zuordnung ziemlich nutzlos ist, da der Code geschrieben werden kann als ...

element = someBoolean ? 
      parentElement: 
      element; 

nur in Ihrem Code Sie nicht zurück parentElement sofort, aber zuerst element auf parentElement und dann element auf element setzen.

+0

Vielen Dank für die Hilfe mich zu verstehen. Ich habe vergessen, dass Java mehrere Zuweisungen erlaubt. – chama

Verwandte Themen