Frage
Also ich bin nicht für Wartbarkeit oder Eleganz hier gehe .. Suche nach einem Weg auf den Gesamt-Token in einem Verfahren nur zum Spaß zu senken. Das Verfahren besteht aus einem langen verschachtelten if-else-Konstrukt, und ich habe festgestellt, dass (glaube ich), wie es mit den wenigsten Token zu tun ist, der ternäre Operator. Im Wesentlichen übersetze ich diese:
String method(param) {
if (param == null)
return error0;
else if (param.equals(foo1))
if (condition)
return bar1;
else
return error1;
else if (param.equals(foo2))
if (condition)
return bar2;
else
return error1;
...
else
return error;
}
folgt aus:
String method(param) {
return
param == null ?
error0 :
param.equals(foo1) ?
condition ?
bar1 :
error1 :
param.equals(foo2) ?
condition ?
bar2 :
error2 :
...
error
}
Es gibt jedoch ein paar Fälle, in denen zusätzlich zu einem Wert zurückgibt Ich möchte auch ein Feld ändern oder eine Methode aufrufen; z. B.
else if (param.equals(foo3))
if (condition) {
field = value;
return bar3;
}
else
return error3;
Was wäre der billigste Weg, um diese Token-weise zu tun? Was ich mache jetzt hässlich ist, aber vergeudet nicht zu viele Token (hier das Feld ist ein String):
param.equals(foo3) && (field = value) instanceOf String ?
condition ?
bar2 :
error2 :
Auch hier ist der Punkt nicht gut Codierung, ich suche nur für Hacks der Tokenzählung zu verringern. Wenn es ein kürzerer Weg ist die ganze Sache zu schreiben, bin ich das auch offen. Vielen Dank für alle Vorschläge.
Edit: Jedes Wort und Satzzeichen zählen als ein Zeichen. So zum Beispiel "instanceOf String" ist zwei Token, aber "! = Null" ist drei. Die wichtigsten Dinge, die ich für mögliche Verbesserungen sehen kann, sind die „&&“ und die Klammern. Ist es eine Möglichkeit, „Feld = Wert“ irgendwo neben dem bedingten zu setzen, und wenn nicht, ist es ein Konstrukt, das „Feld = Wert“ ein boolean, ohne die Notwendigkeit für Klammern?
machtLösung
(field = value) instanceof String
Unter der Annahme, dass es Ihre Bedürfnisse bereits erfüllt (und es enthält somit falsch zurückkehrt, wenn value
ist null
), eine kürzere Alternative wäre dann gewesen
(field = value) != null
Oder wenn Sie tatsächlich, dass übersehen und wollen null
Rückkehr true
auch dann verwenden
(field = value) == value
Dies kann viel kürzer gemacht werden, wenn man 1-Buchstaben-Variablennamen verwenden.
Weitere sehe ich nicht andere Möglichkeiten, und ich stimme mit den meisten von uns, dass dies alles etwas böse ist;)
Andere Tipps
Wenn param null ist, return 0
Dann machen Sie einen Fall / Switch / Select-Anweisung auf den Parameter. Das ist clean .