L'operatore ternario (condizionale) restituisce un valore. Se i metodi non lo fanno, non possono essere utilizzati come parti dell'operatore (dove prende il valore).
Per capirlo meglio, pensiamo a un semplice operatore binario: +
. Funziona in questo modo:
<eval1> + <eval2> --> <value>
Ha bisogno di 2 parti valutabili e ne restituisce un altro. Se hai digitato
doThis() + doThat();
o anche
gimmeAValue = doThis() + doThat();
fallirebbe, in quanto né doThis()
né doThat()
valutare a qualsiasi cosa (loro "ritorno" void
). Naturalmente, sia <eval1>
sia <eval2>
devono essere di tipo "compatibile" per consentire all'operatore +
di gestirli e restituire un valore di qualche tipo.
Ora vediamo l'operatore ternario:
<evalBoolean> ? <eval1> : <eval2> --> <value>
ci vogliono 3 valutabili parti, e restituisce un valore.
La prima parte valutabile deve essere comprensibile (calcolabile) dal compilatore come booleano. Sarà usato per decidere quale delle altre 2 parti valutabili deve essere restituita.
Le altre due parti valutabili devono essere, beh ... valutabili. A qualcosa. Di certo tipo.
In altre parole: l'operatore condizionale ternario è inteso per restituire qualcosa, non come ramificazione del codice. Usato in questo modo:
gimmeAValue = testMe() ? returnThis() : returnThat();
fonte
2012-09-23 22:07:23
No, non così. Basta usare un "se" come una persona normale. –
Credo che l'operatore ternario debba assegnare valori a un'istanza di un tipo, con un controllo delle condizioni. il modo in cui lo stai suggerendo non è soddisfare il formato. –
@codesparkle: non molto spazio. if (condizione) {doThis();} else {doThat();} – tehdoommarine