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?

macht
War es hilfreich?

Lö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

machen
(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 .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top