[ Web Proxy ]
URL:
Viewing: https://it.javascript.info/ifelse [Back]  [Original]

Operatori condizionali: if, '?'
IT

Vorremo rendere disponibile questo progetto open-source per persone in tutto il mondo.

Aiutaci a tradurre il contenuto di questo tutorial nella tua lingua!

    Cerca in Javascript.info:
    Cerca nel tutorial:
    Light themeDark theme
    DanskEnglishEspaolFranaisIndonesiaItalianoTrkeOzbek

    Operatori condizionali: if, '?'

    Qualche volta abbiamo bisogno di eseguire certe azioni solo nel caso valgano determinate condizioni.

    Per questo c listruzione if e loperatore condizionale di valutazione a cui ci riferiremo, per semplicit, con loperatore punto di domanda ?.

    Listruzione if

    Listruzione if(...) valuta una condizione (racchiusa nelle parentesi); se il risultato true, esegue il codice che segue if.

    Ad esempio:

    let year = prompt('In which year was ECMAScript-2015 specification published?', '');
    
    if (year == 2015) alert( 'You are right!' );

    Nellesempio sopra, la condizione un semplice controllo di uguaglianza: year == 2015, ma potrebbe essere qualcosa di molto pi complesso.

    Se dobbiamo eseguire pi di unistruzione, queste vanno raggruppate tramite parentesi graffe:

    if (year == 2015) {
      alert( "That's correct!" );
      alert( "You're so smart!" );
    }

    E consigliabile raggruppare sempre il codice allinterno delle parentesi graffe {}, quando si usa un if, anche se contiene una sola istruzione. La leggibilit ne guadagna.

    Conversione booleana

    Listruzione if () valuta la condizione tra le parentesi e converte il risultato al tipo booleano.

    Ricordiamo le regole di conversione viste nel capitolo Conversione di tipi:

    • Il numero 0, una stringa vuota "", null, undefined e NaN diventano false. Per questo vengono chiamati valori falsi.
    • Gli altri valori diventano true, quindi vengono chiamati veri.

    Quindi, il codice nellesempio sotto, non verr mai eseguito:

    if (0) { // 0  falso
      ...
    }

    Nel seguente esempio, invece, verr sempre eseguito:

    if (1) { // 1  vero
      ...
    }

    Possiamo anche passare un valore gi valutato in precedenza, come qui:

    let cond = (year == 2015); // l'uguaglianza diventa vera o falsa
    
    if (cond) {
      ...
    }

    La clausola else

    Listruzione if pu essere seguita da un blocco opzionale else. Questo viene eseguito quando la condizione falsa.

    Ad esempio:

    let year = prompt('In which year was the ECMAScript-2015 specification published?', '');
    
    if (year == 2015) {
      alert( 'You guessed it right!' );
    } else {
      alert( 'How can you be so wrong?' ); // qualsiasi valore tranne 2015
    }

    Condizione multiple: else if

    Qualche volta vorremmo testare diverse varianti di una condizione. Per questo esiste la clausola else if.

    Ad esempio:

    let year = prompt('In which year was the ECMAScript-2015 specification published?', '');
    
    if (year < 2015) {
      alert( 'Too early...' );
    } else if (year > 2015) {
      alert( 'Too late' );
    } else {
      alert( 'Exactly!' );
    }

    Nel codice sopra JavaScript controlla anzitutto la prima condizione, year < 2015. Se risulta falsa va alla successiva condizione year > 2015 ed esegue il codice dentro le parentesi graffe, altrimenti esegue il codice dentro al blocco else.

    Ci possono essere molti blocchi else if. Lelse finale opzionale.

    Operatore condizionale ?

    Qualche volta abbiamo bisogno di assegnare un valore ad una variabile in base ad una certa condizione.

    Ad esempio:

    let accessAllowed;
    let age = prompt('How old are you?', '');
    
    if (age > 18) {
      accessAllowed = true;
    } else {
      accessAllowed = false;
    }
    
    alert(accessAllowed);

    Esiste un operatore condizionale, o punto interrogativo, che ci consente di farlo in maniera pi breve e semplice.

    Loperatore viene rappresentato dal punto interrogativo ?. Il termine formale ternario, perch richiede tre operatori. E lunico operatore in JavaScript che ne accetta cos tanti.

    La sintassi :

    let result = condition ? value1 : value2;

    La condition viene valutata; se risulta vera, viene ritornato value1, altrimenti viene ritornato value2.

    Ad esempio:

    let accessAllowed = (age > 18) ? true : false;

    Tecnicamente, potremmo omettere le parentesi attorno ad age > 18. Loperatore condizionale ha una precedenza molto bassa, viene eseguito dopo gli operatori di confronto >.

    Il risultato dellesempio sotto uguale a quello precedente:

    // l'operatore di confronto "age > 18" viene eseguito per primo
    // (non c' bisogno di racchiuderlo tra parentesi)
    let accessAllowed = age > 18 ? true : false;

    Ma le parentesi rendono il codice pi leggibile, quindi consigliabile utilizzarle.

    Da notare:

    Nellesempio sopra sarebbe possibile omettere anche loperatore ternario, perch loperatore di confronto > ritorna gi di suo true/false:

    // stesso risultato (risulter in `true` o `false`, a seconda del valore di `age`)
    let accessAllowed = age > 18;

    Multipli operatori ?

    Una sequenza di operatori ? consente di ritornare un valore che dipende da pi condizioni.

    Ad esempio:

    let age = prompt('age?', 18);
    
    let message = (age < 3) ? 'Hi, baby!' :
      (age < 18) ? 'Hello!' :
      (age < 100) ? 'Greetings!' :
      'What an unusual age!';
    
    alert( message );

    Potrebbe essere difficile, inizialmente, capirne la logica. Ma dopo averlo guardato da pi vicino ci accorgeremo che una semplice sequenza di condizioni.

    1. Il primo operatore ? controlla age < 3.
    2. Se vero ritorna 'Hi, baby!', altrimenti segue la colonna ":", controlla age < 18.
    3. Se questo vero ritorna 'Hello!', altrimenti segue la colonna ":", controlla age < 100.
    4. Se questo vero ritorna 'Greetings!', altrimenti segue la colonna ":", ritorna 'What an unusual age!'.

    La stessa logica riscritta utilizzando if..else:

    if (age < 3) {
      message = 'Hi, baby!';
    } else if (age < 18) {
      message = 'Hello!';
    } else if (age < 100) {
      message = 'Greetings!';
    } else {
      message = 'What an unusual age!';
    }

    Uso non tradizionale delloperatore ?

    Qualche volta loperatore ? si utilizza per rimpiazzare listruzione if:

    let company = prompt('Which company created JavaScript?', '');
    
    (company == 'Netscape') ?
       alert('Right!') : alert('Wrong.');

    In base alla valutazione della condizione company == 'Netscape', viene eseguita la prima o la seconda parte (e il rispettivo alert).

    Qui non assegniamo il risultato ad una variabile. Lidea di eseguire un codice differente a seconda della condizione.

    Non consigliabile utilizzare loperatore ternario in questo modo.

    La notazione risulta essere molto pi breve rispetto allistruzione if; questo viene sfruttato da molti programmatori, ma risulta meno leggibile.

    Compariamo il codice sopra con una versione che utilizza if invece delloperatore ternario ?:

    let company = prompt('Which company created JavaScript?', '');
    
    if (company == 'Netscape') {
      alert('Right!');
    } else {
      alert('Wrong.');
    }

    I nostri occhi esaminano il codice verticalmente. I costrutti che si estendono per qualche riga risultano pi semplici da capire piuttosto di ununica istruzione che si estende orrizontalmente.

    Lidea delloperatore ternario ? di ritornare, in base a una condizione, un valore piuttosto di un altro. Va quindi utilizzato solo in questo tipo di situazioni. Per eseguire diversi codici consigliabile utilizzare il costrutto if.

    Esercizi

    importanza: 5

    Lalert verr mostrato?

    if ("0") {
      alert( 'Hello' );
    }
    soluzione

    Certo.

    Qualunque stringa&#8209;ad eccezione di quella vuota ("0" non lo )- diventa true in contesto booleano.

    Possiamo eseguirlo e controllare:

    if ("0") {
      alert( 'Hello' );
    }
    importanza: 2

    Usando il costrutto if..else, scrivi un codice che chieda: What is the official name of JavaScript?

    Se lutente digita ECMAScript, ritorna Right!, altrimenti-- ritorna: Didnt know? ECMAScript!

    []

    Demo in una nuova finesta

    soluzione
    <!DOCTYPE html>
    <html>
    
    <body>
      <script>
        'use strict';
    
        let value = prompt('What is the "official" name of JavaScript?', '');
    
        if (value == 'ECMAScript') {
          alert('Right!');
        } else {
          alert("You don't know? ECMAScript!");
        }
      </script>
    
    
    </body>
    
    </html>
    importanza: 2

    Utilizzando if..else, scrivi un codice che preleva un numero tramite prompt e lo mostra con un alert:

    • 1, se il valore maggiore di zero,
    • -1, se minore di zero,
    • 0, se uguale a zero.

    In questo esercizio supporremo che linput sia sempre un numero.

    Demo in una nuova finesta

    soluzione
    let value = prompt('Type a number', 0);
    
    if (value > 0) {
      alert( 1 );
    } else if (value < 0) {
      alert( -1 );
    } else {
      alert( 0 );
    }
    importanza: 5

    Riscrivi il seguente if utilizzando loperatore ternario '?':

    let result;
    
    if (a + b < 4) {
      result = 'Below';
    } else {
      result = 'Over';
    }
    soluzione
    let result = (a + b < 4) ? 'Below' : 'Over';
    importanza: 5

    Riscrivi if..else utilizzando pi volte loperatore ternario '?'.

    Per migliorare la leggibilit, consigliato dividere il codice in pi linee.

    let message;
    
    if (login == 'Employee') {
      message = 'Hello';
    } else if (login == 'Director') {
      message = 'Greetings';
    } else if (login == '') {
      message = 'No login';
    } else {
      message = '';
    }
    soluzione
    let message = (login == 'Employee') ? 'Hello' :
      (login == 'Director') ? 'Greetings' :
      (login == '') ? 'No login' :
      '';
    Mappa del tutorial

    Commenti

    leggi questo prima di lasciare un commento
    • Per qualsiasi suggerimento - per favore, apri una issue su GitHub o una pull request, piuttosto di lasciare un commento.
    • Se non riesci a comprendere quanto scitto nell'articolo ti preghiamo di fornire una spiegazione chiara.
    • Per inserire delle righe di codice utilizza il tag <code>, per molte righe includile nel tag <pre>, per pi di 10 righe utilizza una sandbox (plnkr, jsbin, codepen)

    Web Proxy Viewer  |  New URL  |  Original Page