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?
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 .