Introducció

En aquest tema, aprendrem sobre les funcions i les closures en Swift. Les funcions són blocs de codi reutilitzables que realitzen una tasca específica, mentre que les closures són blocs de codi que poden ser passats i utilitzats dins d'altres funcions o com a valors de variables. Aquestes eines són fonamentals per a la programació en Swift i ens permeten escriure codi més modular i reutilitzable.

Funcions

Definició de Funcions

Una funció en Swift es defineix utilitzant la paraula clau func, seguida del nom de la funció, una llista de paràmetres entre parèntesis i el tipus de retorn. Aquí teniu un exemple bàsic:

func greet(name: String) -> String {
    return "Hola, \(name)!"
}

Cridant Funcions

Per cridar una funció, simplement utilitzem el seu nom seguit dels arguments entre parèntesis:

let salutacio = greet(name: "Anna")
print(salutacio) // Sortida: Hola, Anna!

Paràmetres i Tipus de Retorn

Les funcions poden tenir múltiples paràmetres i un tipus de retorn. Si una funció no retorna cap valor, utilitzem Void o simplement ometem el tipus de retorn:

func add(a: Int, b: Int) -> Int {
    return a + b
}

func printMessage() {
    print("Això és un missatge.")
}

Paràmetres amb Noms i Etiquetes

Swift permet definir etiquetes de paràmetres per millorar la llegibilitat del codi:

func greet(person name: String, from hometown: String) -> String {
    return "Hola \(name)! Un plaer conèixer-te de \(hometown)."
}

let message = greet(person: "Anna", from: "Barcelona")
print(message) // Sortida: Hola Anna! Un plaer conèixer-te de Barcelona.

Paràmetres per Defecte

Podem assignar valors per defecte als paràmetres de les funcions:

func greet(name: String = "amic") -> String {
    return "Hola, \(name)!"
}

print(greet()) // Sortida: Hola, amic!
print(greet(name: "Anna")) // Sortida: Hola, Anna!

Closures

Definició de Closures

Les closures són blocs de codi que poden ser passats com a arguments a funcions o assignats a variables. Es defineixen utilitzant una sintaxi similar a les funcions, però sense la paraula clau func i amb una sintaxi més concisa:

let sum: (Int, Int) -> Int = { (a: Int, b: Int) -> Int in
    return a + b
}

let resultat = sum(3, 5)
print(resultat) // Sortida: 8

Closures com a Paràmetres de Funcions

Les closures són especialment útils quan es passen com a paràmetres a altres funcions. Per exemple, podem utilitzar una closure per ordenar una llista:

let nombres = [3, 1, 4, 1, 5, 9]
let nombresOrdenats = nombres.sorted(by: { (a: Int, b: Int) -> Bool in
    return a < b
})

print(nombresOrdenats) // Sortida: [1, 1, 3, 4, 5, 9]

Sintaxi Reduïda de Closures

Swift permet una sintaxi més curta per a les closures, eliminant parts redundants:

let nombresOrdenats = nombres.sorted(by: { a, b in a < b })
print(nombresOrdenats) // Sortida: [1, 1, 3, 4, 5, 9]

Encara més curta:

let nombresOrdenats = nombres.sorted(by: <)
print(nombresOrdenats) // Sortida: [1, 1, 3, 4, 5, 9]

Exercicis Pràctics

Exercici 1: Funció de Salutació

Crea una funció anomenada saluda que prengui un nom com a paràmetre i retorni una salutació personalitzada.

func saluda(nom: String) -> String {
    return "Hola, \(nom)!"
}

// Prova la funció
let salutacio = saluda(nom: "Joan")
print(salutacio) // Sortida esperada: Hola, Joan!

Exercici 2: Funció de Suma

Crea una funció anomenada suma que prengui dos enters com a paràmetres i retorni la seva suma.

func suma(a: Int, b: Int) -> Int {
    return a + b
}

// Prova la funció
let resultat = suma(a: 3, b: 4)
print(resultat) // Sortida esperada: 7

Exercici 3: Ordenar una Llista amb una Closure

Utilitza una closure per ordenar una llista de nombres en ordre descendent.

let nombres = [10, 2, 33, 4, 5]
let nombresOrdenats = nombres.sorted(by: { $0 > $1 })

print(nombresOrdenats) // Sortida esperada: [33, 10, 5, 4, 2]

Conclusió

En aquesta secció, hem après a definir i utilitzar funcions i closures en Swift. Les funcions ens permeten encapsular blocs de codi reutilitzables, mentre que les closures ens ofereixen una manera flexible de passar codi com a arguments a altres funcions. Amb aquests coneixements, estem preparats per escriure codi més modular i eficient en Swift. En el següent mòdul, explorarem com construir interfícies d'usuari utilitzant Xcode.

© Copyright 2024. Tots els drets reservats