Google Translate

English French German Spain Italian Dutch Russian Portuguese Japanese Korean Arabic Chinese Simplified by : BTF, ed. by JRD (me!)

mercoledì 18 agosto 2010

Javascript: operatore ternario con molteplici istruzioni

Oggi ho fatto una nuova scoperta in javascript di cui non si trova facilmente documentazione. Si tratta dell'utilizzo dell'operatore ternario, una specie di scorciatioia per le istruzioni condizionali, con molteplici istruzioni. L'operatore ternario è un modo compatto per scrivere le istruzioni condizionali, in pratica anziché scrivere "if...then...else" ossia "if (condizione) { istruzioni; } else { istruzioni; }", si scrive "(condizione) ? istruzione : istruzione;", che corrisponde in questo modo: "(if) ? then : else;". Stavo cercando di sfruttare l'operatore ternario utilizzando però più istruzioni in caso di risultato positivo. Ora molteplici istruzioni in javascript si dovrebbero separare con un punto e virgola. Ma se metti un punto e virgola in mezzo all'operatore ternario si interrompe. Ebbene ho trovato una soluzione: basta concatenare le varie istruzioni con un "+", con un segno più. Spiego meglio con degli esempi concreti la mia soluzione.



Esempio di un condizionale con una sola istruzione:


if(1==1) { alert("Hello") }
else { alert("Goodbye") }



Esempio di un condizionale con molteplici istruzioni:

if(1==1) { alert("Hello"); alert("World!"); }
else { alert("Goodbye"); alert("Sky!"); }



Esempio di un'operatore ternario con una sola istruzione:

(1==1) ? alert("Hello") : alert("Goodbye");


Esempio di un'operatore ternario con molteplici istruzioni separate da punto e virgola:

(1==1) ? alert("Hello"); alert("World!"); : alert("Goodbye"); alert("Sky!");


Questa forma non è corretta perché il punto e virgola all'interno dell'operatore ternario lo interrompe.

Sarà possibile avere molteplici istruzioni? Ebbene sì ed ecco il modo:

Esempio di un'operatore ternario con molteplici istruzioni concatenate dal segno più:

(1==1) ? alert("Hello")+alert("World!") : alert("Goodbye")+alert("Sky!");

Non ho avuto alcun problema con questo metodo, ora l'ho provato in un paio di circostanze diverse e mi ha funzionato molto bene.