Basi di Swift

Le funzioni sono il cuore di ogni linguaggio

Uno dei pilastri di ogni linguaggio di programmazione è sicuramente il concetto di funzione.

Per chi proviene dal mondo della programmazione di pagine web, la sintassi per definire una funzione in objective-C può sembrare apparentemente assurda. Qui sotto un piccolo esempio che potrebbe farti rabbbrividire:

+ (void)sempliceMetodo
{
   // metodo della classe
}

- (NSString *)metodoConParametri:(NSString *)param1 parameter2:(NSNumber *)param2
{
    return @"hello, world!";
}

Semplice no? Beh direi che è un bel casino ricordarsi tutti questi simboli. Per fortuna è arrivato Swift.

Anatomia di una funzione in Swift

Se invece volessi creare una funzione in Swift dovrei scrivere:

func miaFunzione() {
    println("Benvenuto nella mia prima APP!")
}

Decisamente più semplice non trovi? Abbiamo definito una funzione di nome miaFunzione, che non riceve parametri di ingresso e che non restituisce alcun valore.

Se poi volessi passare anche dei parametri alla funzione:

func miaFunzioneConParametri(param1: String, param2: Int) -> String {
    println("Benvenuto nella mia prima APP!")
}

Abbiamo definito una funzione di nome miaFunzioneConParametri, che riceve in ingresso due paramentri di diverso tipo (Stringa e Intero), e restituisce una stringa di valore "Benvenuto nella mia prima APP".

Se poi volessi usare i valori passati alla funzione, all'intero del corpo della funzione, per manipolarli o semplicemente per mostrarli, allora devo usare una sintassi di questo tipo:

func miaFunzioneConParametri(param1: String, param2: Int) -> String {
    printl("Benvenuto \(param1) nella mia prima APP, versione 5")
}

In realtà le cose potebbero complicarsi un pò, ma per le prime APP che creeremo, basiamoci sulle minime conoscenze necessarie a svilupparle. Avrai poi modo, con il tempo, di approfondire e andare nei meandri della programmazione Swift, anche senza il mio aiuto.

Quando si usano le funzioni in un'APP?

Beh, chi hai già programmato, troverà ridicola questa domanda. Per chi non ha mai programmato, chiariamo subito che il 60/70 del codice che scriverai, si baserà su funzioni, quindi il concetto fa parte di uno dei 4/5 pilastri che necessariamente devi conoscere.

Il concetto chiave che sta alla base delle funzioni, è che ti aiutano a spezzare la complessità di un'applicazione. Sarebbe inimmaginabile per una persona preparare la missione per sbarcare sulla Luna, da solo. E' necessario farsi aiutare da tante persone, ognuna delle quali specializzata nel fare qualcosa, e a cui ti rivolgerai per chiedere informazioni quando necessario. Questo il concetto alla base delle funzioni.

Come si usa una funzione?

Tutte le righe di codice che vengono inserite nel blocco della funzione, non vengono mai eseguite a meno che, non ci sia qualche punto del programma, o un'altro programma, che richiama la funzione. Per farlo sara' sufficiente scrivere queste righe:

miaFunzione()

Oppure nel caso della seconda:

miaFunzioneConParametri("Davide", 5)

Il risultato di questa seconda chiamata sarebbe la visulizzazione della stringa: "Benvenuto Davide nella mia prima app versione 5"

La cosa evidente che appare rispetto ad altri linguaggi è che non è necessario inserire il punto e virgola finale ad ogni istruzione.

Funzione con valore dei parametri predefinito

Spesso quando si chiamano funzioni con parametri, non sempre si riesce a passarne il valore, in quanto non sempre lo si conosce nel momento stesso in cui la chiamo. E' possibile allora definire un parametro predefinito da usare in mancanza di quello richiesto (es. nel caso qui sotto NP), usando questa sintassi:

func temperaturaCitta(temp: String = "NP") {
    println("Temperatura di oggi, \(temp)")
}

// mostro: Temperatura di oggi, 25°
temperaturaCitta(temp: "25°")

// mostro: Temperatura di oggi, NP
temperaturaCitta()

Nota come il parametro temp sia esplicitamente inserito nella chiamata alla funzione. Si dice che è un nome di parametro esterno. Altro cosa da sottolineare è che i parametri con valore predefinito, vanno tipicamente inseriti alla fine della lista parametri, questo perchè non sono obbligatori nella chiamata.