20 espressione condizionale e switch
data la seguente tabella
<table> <tr> <td>Titolo di Studio</td> <td><input type="radio" name="titolo" value="diploma" checked>Diploma</td> <td><input type="radio" name="titolo" value="laurea">Laurea</td> </tr> <tr> <td>Esperienza Lavorativa</td> <td><input type="radio" name="esperienza" value="meno" checked>Meno di 5 anni</td> <td><input type="radio" name="esperienza" value="piu">Più di 5 anni</td> </tr> </table> <input type="button" id="btn_stima" value="STIMA DI RETRIBUZIONE"> <input type="text" id="retribuzione1"> <input type="text" id="retribuzione2"> <input type="text" id="retribuzione3">
ecco come viene nel browser
Titolo di Studio | Diploma | Laurea |
Esperienza Lavorativa | Meno di 5 anni | Più di 5 anni |
Ricordo il dollaro di JQuery con la funzione anonima per l’inizializzazione
$(function () { $("#btn_stima").click( stima_retribuzione ); } )
Quando si clicca sul bottone, viene richiamata la funzione stima_retribuzione (con JQuery si omettono le parentesi tonde della funzione)
function stima_retribuzione() { var stipendio = 1200; //stipendio base }
Abbiamo assegnato uno stipendio base di 1200€ che andrò a ricalcolare in base alle caratteristiche scelte. Adesso, con JQuery, devo selezionare il radio button il cui name è titolo il cui stato è selezionato (checked)
$("[name='titolo']:checked")
da notare che il name si scrive tra parentesi quadre. Ora ricavo il valore e lo memorizzo in una variabile e faccio lo stesso con esperienza
var titolo = $("[name='titolo']:checked").val(); var esperienza = $("[name='esperienza']:checked").val();
ora effettuo il calcolo di 100 se è selezionato il diploma, altrimenti 300 con la laurea
if (titolo==="diploma") {stipendio 0 stipendio + 100;} else { stipendio = stipendio + 300;}
esistono anche forme compatte
x-=3 -> x = x - 3 x*=3 -> x = x * 3 x/=3 -> x = x / 3
nel nostro caso avrei potuto scrivere
if (titolo==="diploma") {stipendio+=100;}
analogamente in base agli anni di esperienza lavorativa
if (esperienza === "meno") {stipendio = stipendio + 200;} else {stipendio = stipendio + 400;}
infine andiamo a valorizzare la casella di testo retribuzione1 con il valore appena calcolato
$("#retribuzione1").val(stipendio);
vediamo ora l’espressione condizionale per riscrivere il primo blocco di codice
stipendio = stipendio + (titolo==="diploma"? 100 : 300);
mentre la seconda diventa
stipendio = stipendio + (esperienza="meno" ? 200 : 400);
avrò una funzione molto più leggibile perché molto più corta (con meno linee di codice)
function stima_retribuzione() { var stipendio = 1200; //stipendio base var titolo = $("[name='titolo']:checked").val(); var esperienza = $("[name='esperienza']:checked").val(); stipendio = stipendio + (titolo==="diploma"? 100 : 300); stipendio = stipendio + (esperienza==="meno" ? 200 : 400); $("#retribuzione2").val(stipendio); }
Potrei anche inserire i 2 blocchi in unica espressione, ma diventerebbe incomprensibile e col rischio di commettere troppi errori
stipendio = stipendio + (titolo==="diploma"? 100 + (esperienza==="meno" ? 200 : 400) : 300 + (esperienza==="meno" ? 200 : 400));
switch case
aggiungiamo una riga con 5 opzioni radio non checked e 2 input alla nostra tabella
<table> <tr> <td>Titolo di Studio</td> <td><input type="radio" name="titolo" value="diploma" checked>Diploma</td> <td><input type="radio" name="titolo" value="laurea">Laurea</td> </tr> <tr> <td>Esperienza Lavorativa</td> <td><input type="radio" name="esperienza" value="meno" checked>Meno di 5 anni</td> <td><input type="radio" name="esperienza" value="piu">Più di 5 anni</td> </tr> <tr> <td>Linguaggio MAX exp</td> <td> <input type="radio" name="linguaggio" value="C"> C 100</td> <td> <input type="radio" name="linguaggio" value="C++" > C++ 200</td> <td> <input type="radio" name="linguaggio" value="PHP" > PHP 250</td> <td> <input type="radio" name="linguaggio" value="Javascript" > Javascript 250</td> <td> <input type="radio" name="linguaggio" value="Java" > Java 150</td> </tr> </table> <input type="button" id="btn_stima" value="STIMA DI RETRIBUZIONE"> <input type="text" id="retribuzione1"> <input type="text" id="retribuzione2"> <input type="text" id="retribuzione3"> <input type="text" id="retribuzione4"> <input type="text" id="retribuzione5">
viene così
Titolo di Studio | Diploma | Laurea | |||
Esperienza Lavorativa | Meno di 5 anni | Più di 5 anni | |||
Linguaggio MAX exp | C 100 | C++ 200 | PHP 250 | Javascript 250 | Java 150 |
Si potrebbe gestire il linguaggio con tanti if / else annidati, ma il codice diventerebbe poco chiaro e con possibilità di commette errori.
if (linguaggio==="C") {stipendio+=100;} else { if (linguaggio==="C++") { stipendio+=200;} else { if (linguaggio==="PHP" || linguaggio==="Javascript") {stipendio+=250;} else { if (linguaggio==="Java") {stipendio+=150;} else {stipendio-=50;} } } } $("#retribuzione4").val(stipendio);
In questi casi è opportuno usare le istruzioni switch e case:
switch (linguaggio) { case "C": stipendio+=100; break; case "C++": stipendio+=200; break; case "PHP": case "Javascript": stipendio+=250; break; case "Java": stipendio+=150; break; default: stipendio-=50; break; } $("#retribuzione5").val(stipendio);
i vari casi sono molto comprensibili, prendiamo il primo
case "C": stipendio+=100; break;
caso C se selezionato aumento di 100 e così via, notare i : dopo case “C”. Il break serve per interrompere i casi, altrimenti verrebbero esguiti tutti. Possiamo aggiungere il default come caso in cui non vengono soddisfatti gli altri (jolly pigliatutto nel caso gli altri case non sussistono )
default: stipendio= -50; break;
Con il case possiamo solo effettuare l’uguaglianza mentre if / else sono più potenti perché permettono ogni espressione