Domanda

Quindi non ho intenzione per la manutenzione o l'eleganza qui..alla ricerca di un modo per tagliare il totale gettoni in un metodo solo per divertimento.Il metodo è composto da un lungo if-else costruire e che ho trovato (credo) il modo di farlo con il minor numero di token è l'operatore ternario.Essenzialmente, mi traduci questo:

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;

}

per questo:

String method(param) {

    return 

        param == null ?
            error0 :

        param.equals(foo1) ?
            condition ?
                bar1 :
                error1 :

        param.equals(foo2) ?
            condition ?
                bar2 :
                error2 :

        ...

        error

    }

Tuttavia, ci sono un paio di casi in cui, oltre a restituire un valore anche io voglio modificare un campo o di una chiamata di un metodo;ad esempio,

    else if (param.equals(foo3))
        if (condition) {
            field = value;
            return bar3;
        }
        else
            return error3;

Quale sarebbe il modo più economico per fare questo token-saggio?Quello che sto facendo ora è brutto, ma non spreca troppi gettoni (qui il campo è una Stringa):

        param.equals(foo3) && (field = value) instanceOf String ?
            condition ?
                bar2 :
                error2 :

Di nuovo, il punto non è buona codifica, sto solo cercando hack per diminuire il conteggio.Se c'è una strada più breve per scrivere l'intera cosa sono aperto a quello.Grazie per qualsiasi suggerimento.

Edit:Ogni parola e ogni segno di punteggiatura conta come un segno.Così, per esempio, "instanceOf Stringa" è di due token, ma "!= null" è di tre.Le principali cose che posso vedere per un eventuale miglioramento sono la "&&" e le parentesi.C'è un modo per mettere in "campo = valore" da qualche parte oltre il condizionale, e se non c'è un costrutto che rende "campo =" valore booleano, senza bisogno di parentesi?

È stato utile?

Soluzione

(field = value) instanceof String

Supponendo che soddisfa già le vostre esigenze (e quindi include il ritorno false quando value è null), un'alternativa più breve sarebbe poi stato

(field = value) != null

O se effettivamente trascurare il fatto che si desideri effettuare null ritorno true pure, quindi usare

(field = value) == value

Questo può essere fatto molto più breve se si utilizza 1-lettera nomi di variabili.

Inoltre non vedo altri modi e sono d'accordo con la maggior parte di noi che tutto questo è un po 'brutto;)

Altri suggerimenti

se il parametro è null, return 0
Poi fare un caso/switch/istruzione select sul parametro.Che pulire .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top