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