18 struttura selettiva (IF … ELSE) ampliamenti

Vediamo una versione alternativa della funzione isUpperCaseChar vista nella lezione precedente che ho rinominato in isUooerCaseCharVersione1:

function isUpperCaseCharVersione1(carattere)
{
    if( String(carattere) === String(carattere).toUpperCase() )
    {return true;}
    else
    {return false;}
}

Nella nuova variante vogliamo utilizzare gli operatori di confronto (maggiore e minore) sul carattere “A” e l’ultimo la “Z” per vedere se la lettera inserita è compresa nell’alfabeto maiuscolo

function isUpperCaseChar(carattere)
{
    if(carattere>="A" && carattere<="Z")
    {return true;}
    else
    {return false;}
}

Gli operatori  relazionali (<,<=,=,=>,>) funzionano non solo tra numeri o espressioni, ma anche tra stringhe. Questo confronto viene detto lessicografico (ordine alfabetico) e funziona anche su intere stringhe (confrontando l’iniziale): “MAMMA” < “PAPA” e “MatEra” è minore di “MatTone”.

Nel nostro esempio il parametro carattere corrisponde ad una lettera ( passato da nome[0] ), quindi confronto il carattere ricevuto se è maggiore o uguale alla lettera A maiuscola.

Operatori logici

L’altro operatore da prendere in esame è AND && che rende la nostra espressione composta, cioè entrambi i confronti devono essere veri, quindi per essere vere la nostra espressione deve ricevere un carattere compreso nell’alfabeto maiuscolo.

Se volessimo esprimere il confronto: la lettera non è nell’alfabeto maiuscolo potremmo usare

carattere < "A" || carattere > "Z"

In questo caso l’operatore logico è OR || . La lettera o è minore della A o è maggiore della Z, basta che sia verificata uno dei 2 confronti. Altro modo:

! (carattere >= "A" && carattere <= "Z")

Operatore di negazione NOT ! qui le parentesi sono importanti, in quanto tutta l’espressione viene valutata e poi negata. Ecco u

eta >=5 && eta<=12 || eta>65

età compresa tra5 e 12 o maggiore di 65 , magari per una promozione di sconto, nel dubbio gestire le priorità usiamo le parentesi

(eta >=5 && eta<=12) || eta>65

e si può valutare anche le stringhe

(eta >=5 && eta<=12) || eta>65 || categoria === "militare"

includes

Una nuova variante della funzione isUpperCaseChar (l’altra rinominiamola in versione2) che utilizza il metodo includes, novità rispetto a ES5 che prevede indexOf, più scomodo da usare in questa situazione (restituisce la posizione della sottostringa oppure -1 se non presente):

if ( “ABCD..”.indexOF(carattere)>-1)…

function isUpperCaseChar(carattere)
{
    if("ABCDEFGHIJKLMNOPQRSTUVWYZ".includes(carattere))
    {return true;}
    else
    {return false;}
}

includes cerca all’interno della stringa se è presente il carattere

Un quarto modo potrebbe essere quello di usare le espressioni regolari, ma lo approfondiremmo forse in una lezione separata.

Un quinto modo, da masochisti:

if(carattere==="A" || carattere==="B" || carattere="C" //eccetera)

short evaluation

if (3===3 || fuffa==="xyz")

Il programma non valuterà nemmeno la presenza di fuffa perché la prima espressione è vera e OR esclude la seconda e non restituirà nessun errore sul fatto che fuffa non è definita.

if (3===2 && fuffa==="xyz")

Anche qui la seconda espressione non viene vista perché la prima è falsa e l’AND esclude la seconda

if (5===4)
    if (3===3)
        alert("A");
else
    alert("B");

In questo caso l’else viene abbinato al secondo if, quindi non viene stampato nessun messaggio. Il modo corretto è usare le graffe

if (5===4) 
{
    if (3 === 3)
    {alert("A");}
}
else
{alert("B");}

valori considerati sempre falsi

if(false) {alert("non sarò stampato");} // ovviamente è già false
if(fuffa) {alert("non sarò stampato");} // undefined , genera errore
if(null) {alert("non sarò stampato");} // // il null è false
if(0) {alert("non sarò stampato");} // lo zero è false
if(0/0) {alert("non sarò stampato");} // NaN espressione speciale NOT A NUMBER
if("") {alert("non sarò stampato");} // stringa nulla ha valore false

negando ogni espressione  di prima sarà considerata true

Una stringa è un valore quindi TRUE

if("ciao") //restituisce true