Compatibile con Xcode 10

If else in Swift. L’arte del controllo del codice

Se qualcosa va bene allora faccio così, altrimenti… Quante volte ti è capito di ragionare così? 🤔

Questo modus operandi lo ritroviamo anche all’interno dei linguaggi di programmazione.

Il linguaggio Swift ti mette a disposizione due keywords, if ed else, che ti permetteranno di eseguire o meno dei blocchi di codice in base allo stato di una condizione.

Grazie all’istruzione if-else riuscirai a variare il comportamento della tua applicazione iOS.

Esempio, vogliamo far entrare gli utenti all’interno della nostra app solamente quando inseriscono email e password. E questa operazione, si esegue, sfruttando le istruzioni if-else.

Ti do un’assaggio ⤵️

Esempio if else linguaggio swift

If significa “se” mentre else “altrimenti”.

Quindi anche senza saperla utilizzare, leggendo puoi già capire cosa succede. “Se email è uguale a …. && la password è uguale a ….” allora esegui quest’operazione. Else, se l’if non è valido, fai quest’altra cosa.

Ma procediamo con ordine!

Vediamo insieme la prima istruzione condizionale del linguaggio Swift: if ed else 💪

Operatori di confronto

Per capire l’if else devo innanzitutto presentarti gli operatori di confronto.

Apri il tuo Playground e crea queste due semplici variabili:

Gli operatori di confronto o anche condizionali, sono dei simboli che ti permetteranno di eseguire operazioni tra due variabili/costanti. Operazioni che restituiranno, come risultato, un valore Booleano.

I simboli sono i seguenti:

Il risultato dell’operazione è un Bool, quindi true o false. Dipenderà esclusivamente dall’operatore usato e dai valori messi a confronto.

Per capire il risultato ad occhio, senza dover eseguire, devi leggere l’operazione da sinistra verso destra.

Esempio:

Nel nostro caso si leggerà: “a è maggiore di b“. Cioè il valore dentro la var a è maggiore del valore dentro la var b?

Siccome 2 è minore di 3, il risultato sarà false.

Confronto tra String

Se per i numeri è abbastanza semplice capire il risultato dell’operazione, per le stringhe tutto si complica un po’.

E quando mai? 😂

Quello a cui devi far attenzione è l’operazione di maggiore e minore di.

Prendiamo un esempio:

Durante un’operazione di confronto tra stringhe vengono controllati carattere per carattere in ordine lessicografico. Quindi, “x > y” è false perché “b” viene dopo “a”.

Cosa succede se la stringa x è più grande della y?

L’operazione continuerà a generare false perché, dato che vengono confrontati carattere con carattere, il primo confronto “a > b” genererà false e quindi si interromperà lì il confronto.

Chiaro? 😱

Se controllerai sempre i singoli caratteri ti assicuro che non sbaglierai. Comunque, se ci sono dei problemi, al solito mi puoi scrivere un commento.

La sintassi dell’if-else

Gli operatori di confronto sono alla base dell’istruzione if-else. Partiamo dalla sintassi:

Questo è il pattern che dovrai rispettare. Ma non è ancora completo.

All’interno delle tonde dovrai aggiungere una condizione booleana. Cioè un’operazione che genererà un bool (dovrai usare gli operatori visti poco fa).

Se la condizione sarà:

  1. true, attiverà il codice dentro il blocco di parentesi dell’if
  2. false, attiverà il blocco dell’else

Esempio 1

Facciamo subito un esempio.

Vogliamo far entrare il nostro utente all’interno della sezione adult 😈 solo se ha più di 25 anni. Altrimenti, va nella kids.

Come risolviamo questo problema?

Ci serve un if-else. If, se l’età dell’utente è maggiore di 25, entri dentro le sue graffe. Else, altrimenti no:

Domanda. Con questo codice, dove andrà a finire l’utente? (gioca un po’ cambiando i valori di età)

Esempio 2

L’utente deve inserire la password in due campi di testo. Dobbiamo controllare che queste combacino ed, eventualmente, avvisarlo dell’errore.

Ci serve anche qui un if-else.

In questo caso ho usato l’== perché le due password devono essere identiche.

Dentro un’app tu avrai sempre questa istruzione solamente che poi dall’if-else interagirai con l’interfaccia e manderai un avviso all’utente (esempio colorando di verde i bordi dei due campi se le psw combaciano o di rosso altrimenti)

L’ordine del codice

L’ordine ed il posto in cui viene inserito il codice è fondamentale. FONDAMENTALE.

E ti faccio subito capire perché.

Riprendiamo l’esempio delle password. Ipotizziamo che l’inserimento delle password comporti l’accesso ad un conto bancario:

Cosa c’è di sbagliato? Le password sono uguali, non viene attivato l’else, e viene stampato il valore del conto.

Il compito di noi sviluppatori è quello di controllare sempre, e dico sempre, tutti i possibili casi d’utilizzo 😎.

Cosa accade se le password sono diverse?

Qualsiasi utente può visualizzare il conto corrente. E questo è e può diventare un grossissimo errore.

Come fare allora?

Se sposti il codice dell’accesso al conto dentro l’if, allora avrai risolto il problema.

Quindi, in base a ciò che vuoi realizzare, se hai degli if-else ricordati di verificare l’ordine del codice.

  • Tutto ciò che è relativo alla condizione di true, va inserito dentro il blocco if
  • Se è relativo alla condizione false, dentro l’else
  • Se vuoi un codice per tutti e due i casi, va messo sopra o sotto l’istruzione if-else.

Lo Scope delle variabili

Ogni blocco di paratesi graffe crea una divisione con il mondo che ci sta all’esterno.

La regola è abbastanza semplice.

Dall’interno di un blocco puoi accedere alle cose che sono all’esterno. Viceversa no.

Questo significa che, da dentro un if, puoi accedere alle variabili/costanti che si trovano all’esterno. Viceversa no.

Ti faccio un esempio:

Da questo esempio deduciamo che lo scope di una var/let, cioè la sua visibilità, è relativa solamente al blocco corrente o a relativi blocchi interni.

If senza else

Un if può esistere senza l’else. In alcuni casi capiterà di voler controllare solamente la condizione true e mai l’altra.

Quindi potrai scrivere:

Durante lo sviluppo delle nostre app probabilmente incontreremo questa sintassi.

Annidare gli if

Immaginiamo di voler far registrare il nostro utente solamente quando inserisce password, email ed ha selezionato il checkbox.

Ci serve dunque un if che esegua più controlli contemporaneamente.

Attualmente potremmo risolvere questo problema, mettendo dentro l’if altri if:

In pratica, annidato gli if, puoi creare delle condizioni a cascata. Se emailAdded è true entra dentro, se passwordAdded è true entra dentro il suo blocco (quindi sia l’email che la psw sono true) ed infine un altro if ci assicura che entrerà dentro il suo scope quando tutte e tre le condizioni sono true.

Ma è la soluzione corretta? 🤔

Si, ma c’è un sistema migliore.

Operatori logici: And ed Or

Il simbolo && (che si legge And) può essere usato per definire un controllo in cui due condizioni devono essere entrambe true per procedere.

Esempio, se l’email && la password sono true allora entra dentro l’if, altrimenti attiva l’else (se presente):

Dall’altro lato, il simbolo || (che si legge Or) verifica la condizione dell’if quando una delle due condizioni è true:

Più di una condizione

Nessuna ti vieta di inserire all’interno dell’if più operatori logici, uguali o diversi che siano.

Oppure, possiamo utilizzare le parentesi per creare istruzioni di controllo più complesse.

Esercizio 0. Mi sai dire in quali casi l’utente entra dentro il blocco?

Operatore Not

Non amo particolarmente questo operatore, perché può portare un po’ di confusione. Però devo mostrartelo perché in alcune circostante potrai ritrovarlo.

L’operatore Not, che si esprime con il punto esclamativo, calcola l’opposto di un valore booleano:

Il Not va messo prima di un valore Bool. Se la var è true considera il false o viceversa.

Dentro un’istruzione if, il Not altera il modo in cui funziona la condizione. Se fino a questo momento l’if si attivava con un risultato di tipo true, utilizzando il Not si attiva con un false.

L’istruzione if (!name.isEmpty) puoi leggerla come: “Se il name is not empty entra dentro il blocco“.

Nell’esempio, name.isEmpty è false. Grazie al Not abbiamo esplicitamente chiesto di entrare dentro l’if quando isEmpty è false. (cioè è == false, che fa true).

If – else if

Se tutto questo ti sembra complesso, è perché ancora non hai visto l’istruzione if – else if 😭.

Un if può avere anche più di un blocco di controllo. Cioè, puoi scrivere diversi if a cascata.

Ipotizziamo che stai creando un gioco e vuoi avvisare il player che la sua salute sta scendendo rispetto a diverse soglie critiche.

Se la vita è:

  • == 0 è morto
  • > 0 < 30 è con salute bassa
  • >= 30 è in ottima salute

Siccome solamente una delle tre condizioni può essere verificata, puoi scrivere la tua istruzione così:

In pratica, subito dopo l’if, puoi aggiungere un altro blocco if utilizzando la sintassi else if (nuovaCondizione).

Le istruzioni verranno verificate a cascata. La prima che verrà verificata verrà eseguita.

Nessuno ti vieta di scrivere anche altri else if. Alla fine, comunque, potrai aggiungere un else per acchiappare tutti i casi non controllati dall’if ed else if.

Istruzioni separate?

Puoi scrivere le istruzioni anche come if separati. L’unica differenza è che mettendo le sequenze di else if solamente uno degli if verrà verificato.

Mentre, mettendoli separatamente, potrebbe capitare che si attivino più di un if.

Esercizio

Data una variabile Int che rappresenta il volume di un altoparlante (var volume: Int = 0) crea il codice che controlla il volume dell’altoparlante.

In particolare, se il volume è:

  • Maggiore di 35, scriverà sulla console che “il volume è troppo alto”.
  • Minore di 35 ma maggiore di 10, scriverà “il volume è medio alto”.
  • Minore di 10 e maggiore di 0, scriverà che “il volume è normale”.
  • Uguale a 0, dirà che “il dispositivo è spento”.
  • Minore di 0, “non puoi inserire un volume negativo”.

Per qualsiasi dubbio e chiarimento, scrivi un commento 💪

Conclusione

Con l’istruzione if else, del linguaggio Swift, finalmente facciamo un piccolo passo in avanti verso la scrittura di codice più complesso.

Il controllo del codice è qualcosa da non prendere alla leggera.

Passerai gran parte del tuo tempo a verificare il comportamento dell’app in base alle diverse azioni che compiranno gli utenti.

Si, ti sto dicendo che scriverai tantissimi if else 😂

Buona Programmazione!

Torna a: Corso gratuito linguaggio di programmazione Swift > Le basi del linguaggio Swift

Start typing and press Enter to search

Metodi e Proprietà dei tipi di dato del linguaggio swift