Adesso iniziamo con la vera e propria guida, dopo aver visto in maniera generale le parti salienti del linguaggio nei 3 tour precedenti.

COSTANTI E VARIABILI

Costanti e variabili associano un nome (come maximumNumberOfLoginAttempts o WelcomeMessage) con un valore di un dato tipo(ad esempio il numero 10 o la stringa “Ciao”). Il valore di una costante non può essere modificato una volta impostato, invece una variabile,come suggerisce il nome, può essere impostata inizialmente su un valore per poi assumerne altri durante l’esecuzione del programma.

DICHIARAZIONE DI COSTANTI E VARIABILI

Costanti e variabili devono essere dichiarate prima di poter essere utilizzate. Una costante si dichiara con la parola chiave let e una variabile con la parola chiave var. Ecco un esempio di come le costanti e le variabili possono essere utilizzate per tenere traccia del numero di tentativi di accesso effettuati da un utente:

let maximumNumberOfLoginAttempts = 10
var currentLoginAttempt = 0

Questo codice può essere letto come:

Dichiara una nuova costante chiamata maximumNumberOfLoginAttempts, e dagli un valore di 10. Poi, dichiarare una nuova variabile chiamata currentLoginAttempt, e dare un valore iniziale di 0.

In questo esempio, il numero massimo di tentativi di accesso consentiti viene dichiarato come costante, poiché il valore massimo non cambia mai. Il contatore “tentativi di accesso”(currentLoginAttempt) viene dichiarato come una variabile, perché questo valore deve essere incrementato di uno dopo ogni tentativo di login fallito.

È possibile dichiarare più costanti o variabili su una singola riga, separati da virgole:

var x = 0.0, y = 0.0, z = 0.0

È possibile specificare il tipo di dato quando si dichiara una costante o variabile, per essere chiari sul tipo di valori che la costante o la variabile possono contenere, questo si realizza inserendo il tipo di annotazione posizionato dopo due punti vicino al nome della costante o variabile, seguito da uno spazio, e ovviamente dal tipo di dato da utilizzare (int, float…).

Questo esempio fornisce un tipo di annotazione per una variabile denominata WelcomeMessage, per indicare che la variabile può memorizzare i valori string:

var welcomeMessage: String

Questo codice può essere letto come :

Dichiara una variabile dal nome welcomeMessage di tipo String, cioè che può contenere solamente delle stringhe (e non ad esempio un numero in virgola mobile).

Ora la variabile welcomeMessage può contenere qualsiasi tipo di stringa, senza errori:

welcomeMessage = “Hello”

 

NOMINARE COSTANTI E VARIABILI

Per nominare costanti e variabili puoi utilizzare qualsiasi tipo di carattere, anche quelli appartenenti ad Unicode :

let π = 3.14159
let 你好 = “你好世界”

 

Dopo aver dichiarato una costante o una variabile di un certo tipo non è possibile utilizzare lo stesso nome per un’altra variabile, o modificarlo per memorizzare i valori di un altro tipo. Allo stesso modo, non puoi cambiare una costante in una variabile o viceversa.

Puoi ovviamente modificare il valore di una variabile esistente con un altro valore dello stesso tipo dichiarato. In questo esempio, il valore di “friendlyWelcome” è cambiato da “Hello!” a “Bonjour!”:

var friendlyWelcome = “Hello!”
friendlyWelcome = “Bonjour!”
// friendlyWelcome is now “Bonjour!

Per quanto riguarda invece le costanti, come suggerisce il loro nome, i valori non possono essere modificati. Se provate ad apportare modifiche ad una costante, questa azione verrà riconosciuta come un errore dal compilatore:

let languageName = “Swift”
languageName = “Swift++”
// this is a compile-time error – languageName cannot be changed

 

 STAMPA DI COSTANTI E VARIABILI

Puoi stampare il valore corrente di una costante o variabile con la funzione println:

println(friendlyWelcome)
// stampa “Bonjour!”

Println è una funzione globale che stampa un valore, seguito da un’interruzione di riga. Se si sta lavorando in Xcode, per esempio, println stampa la sua uscita direttamente nella “console” di Xcode. (Una seconda funzione, print , esegue la stessa attività senza però aggiungere un’interruzione di riga alla fine del valore da stampare.)

La funzione print può ovviamente stampare qualsiasi valore che gli viene passato:

println(“This is a string”)
// stampa “This is a string”

 

La funzione println può stampare anche i più complessi messaggi di log, in modo simile alla funzione NSLog di cocoa. Questi messaggi possono includere i valori correnti delle costanti e variabili.

Swift utilizza l’interpolazione di stringa per includere il nome di una costante o variabile come segnaposto in una stringa più lunga. Includere il nome tra parentesi preceduto da un backslash:

println(“The current value of friendlyWelcome is \(friendlyWelcome)”)
// prints “The current value of friendlyWelcome is Bonjour!

COMMENTI

Usa i commenti per includere nel codice delle stringhe non eseguibili dal compilatore, come ad esempio delle note esplicative sulla reale funzione di una riga di codice che avete appena compilato. Tutti i commenti vengono ignorati dal compilatore di swift.

I commenti in swift sono veramente simili a quelli presenti in C. Un commento a singola riga inizia con due forward-slashes (//):

// questo è un commento

Puoi scrivere anche commenti multi-linea, che iniziano con uno slash seguito da un asterisco (/*) e finiscono con un asterisco seguito da uno slash (*/):”

/* anche questo è un commento,
ma scritto su righe multiple */

A differenza di commenti su più righe in C, quelli in Swift possono essere nidificati all’interno di altri commenti su più righe. Si possono scrivere commenti nidificati avviando un blocco di commento su più righe per poi iniziare un secondo commento su più righe all’interno del primo blocco. Il secondo blocco è quindi chiuso, seguito poi dal primo:

/* this is the start of the first multiline comment
/* this is the second, nested multiline comment */
this is the end of the first multiline comment */

Commenti nidificati su più righe consentono di commentare grandi blocchi di codice in modo rapido e semplice, anche se il codice contiene già commenti su più righe.

PUNTO E VIRGOLA

A differenza di molti altri linguaggi, Swift non richiede l’uso del punto e virgola (;) dopo ogni istruzione nel codice che state scrivendo, volendo puoi però utilizzarlo senza problemi. I punti e virgola sono richiesti, tuttavia, nel caso in cui tu abbia bisogno di scrivere più istruzioni su una singola riga:

let cat = “gatto”; println(cat)
// prints “gatto”

 

 INTERI

Gli interi (Integers) sono numeri senza componenti frazionaria, come 46 oppure -23. Possono avere un segno (positivi, zero, o negativi) oppure non averlo (come nel caso dei numeri positivi o per lo zero).

Swift prevede interi, con segno o senza nella forma di 8, 16, 32, o 64 bit. Per convenzione questi numeri hanno una denominazione simile al C,i numeri interi a 8-bit senza segno sono di tipo UInt8, e un numero intero 32-bit con segno è di tipo Int32.

PROPRIETA’

È possibile accedere ai valori minimi e massimi di ogni tipo integer con le proprietà min e max:

let minValue = UInt8.min // minValue è uguale a 0, ed è di tipo UInt8
let maxValue = UInt8.max // maxValue è uguale a 255, ed è di tipo UInt8

INT

Nella maggior parte dei casi, non è necessario specificare la dimensione del numero intero da utilizzare nel codice. Swift fornisce un tipo intero supplementare, Int, che prende la dimensione a seconda della piattaforma su cui viene utilizzato:

  1. Su una piattaforma a 32-bit, Int è la stessa dimensione come Int32.
  2. Su una piattaforma a 64 bit, Int è la stessa dimensione Int64.

A meno che tu non abbia bisogno di lavorare con un formato specifico di integer, è preferibile utilizzare sempre Int per i valori interi nel codice. Questo aiuta la coerenza e l’interoperabilità del codice. Anche su piattaforme a 32 bit, Int può memorizzare qualsiasi valore compreso tra -2.147.483.648 e 2,147,483,647, ed è abbastanza grande per assecondare le richieste della maggior parte delle applicazioni che si sviluppano normalmente.

Uint

Swift offre inoltre un tipo intero senza segno, UInt, che ha dimensione 32 o 64bit a seconda della piattaforma su cui si lavora:

Su una piattaforma a 32-bit, UInt ha la stessa dimensione di UInt32.
Su una piattaforma a 64-bit, UInt ha la stessa dimensione di UInt64.

Numeri a virgola mobile (Floating-Point)
I numeri a virgola mobile sono numeri con una componente frazionaria, come 3,14159, 0.1, e -273,15.

Con i numeri a virgola mobile si può rappresentare una gamma molto più ampia di valori di quando si utilizzano gli int. Swift fornisce due tipi di numeri in virgola mobile:

  1. Double rappresenta un numero a virgola mobile a 64-bit. Viene utilizzato quando i valori in virgola mobile devono essere molto grandi o particolarmente preciso.
  2. Float rappresenta un numero a virgola mobile a 32 bit. Si utilizza quando i valori in virgola mobile non richiedono la precisione a 64-bit.

 

INDIPENDENZA DAI TIPI ED INFERENZA DEI TIPI

Swift è un linguaggio type-safety. Un linguaggio type-safety vi incoraggia a essere chiari sui tipi di valori su cui il codice può lavorare. Ad esempio se una parte del codice si aspetta una stringa, non si può erroneamente passarli un valore int.

Essendo type-safety, swift esegue dei controlli durante la compilazione e se ci sono discordanze tra il tipo di dato dichiarato e quello utilizzato, verrà immediatamente segnalato come errore. Ciò consente di correggere gli errori in tempo reale e in maniera molto efficace.

Questo consente di evitare problemi, soprattutto quando si lavora con molti tipi di dati diversi tra di loro. Tuttavia, questo non significa che si deve specificare il tipo di ogni costante e variabile che si dichiara. Se non si specifica il tipo di valore di una costante o di una variabile, Swift utilizza l’inferenza dei tipi per capire in modo autonomo il tipo appropriato. L’inferenza dei tipi consente al compilatore di dedurre automaticamente il tipo di una particolare espressione quando si compila il codice, semplicemente esaminando i valori forniti in modo del tutto indipendente dal programmatore.

Grazie all’inferenza di tipo, Swift richiede di specificare il tipo di dati utilizzati molto meno frequentemente rispetto a linguaggi come C o Objective-C. Costanti e variabili sono ancora espressamente tipizzati, ma gran parte del lavoro di specificare il loro tipo viene compiuto dal compilatore.

L’inferenza dei tipi è particolarmente utile quando si dichiara una costante o variabile con un valore iniziale. Questo è spesso fatto assegnando un valore letterale alla costante o variabile direttamente al momento della sua dichiarazione (Un valore letterale è un valore che compare direttamente nel codice sorgente, come il 42 e 3,14159 negli esempi che seguono.)

Ad esempio, se si assegna il valore 42 ad una nuova costante senza specificarne il tipo, Swift deduce che si desidera utilizzare un dato di tipo Int, perchè la costante è stata inizializzata utilizzando un numero intero.

let meaningOfLife = 42
// meaningOfLife viene riconosciuto come Int

Allo stesso modo, se non si specifica un tipo float (virgola mobile), Swift deduce che si desidera utilizzare un valore di tipo double:

let pi = 3.14159
// pi viene riconosciuto come Double

Swift sceglie sempre double (anziché Float) quando deduce che il tipo di dato è in virgola mobile.

Se si combinano valori interi e in virgola mobile nella stessa espressione, Swift inizializzerà la costante utilizzando il tipo double:

let anotherPi = 3 + 0.14159
// anotherPi viene riconosciuto come Double

Il valore 3, infatti, non ha nessuna parte decimale; Sapendo però che verrà sommato con un numero a virgola mobile, viene preventivamente considerato come double.

 

Siamo a pagina 55 di 766 del manuale! Continueremo con questo capitolo, “le basi”, nella parte 2 di 2.

 

VOLETE ESSERE AGGIORNATI TEMPESTIVAMENTE ALL’USCITA DI UN NUOVO CAPITOLO ? BASTA UN LIKE SULLA NOSTRA PAGINA FACEBOOK!