En aquest tema, explorarem dos conceptes fonamentals en F#: les funcions i la immutabilitat. Aquests conceptes són crucials per entendre la programació funcional i com F# facilita l'escriptura de codi clar, concís i segur.

Funcions en F#

Definició de Funcions

En F#, les funcions es defineixen utilitzant la paraula clau let. Aquí teniu un exemple bàsic:

let suma x y = x + y

En aquest exemple, suma és una funció que pren dos arguments x i y i retorna la seva suma.

Funcions Anònimes

Les funcions anònimes (o lambdes) es poden definir utilitzant la paraula clau fun. Aquí teniu un exemple:

let multiplicar = fun x y -> x * y

Aquesta funció fa el mateix que la funció suma, però utilitza una sintaxi diferent.

Funcions d'Ordre Superior

Les funcions d'ordre superior són funcions que poden prendre altres funcions com a arguments o retornar funcions. Aquí teniu un exemple:

let aplicarDuesVegades f x = f (f x)

En aquest exemple, aplicarDuesVegades és una funció que pren una funció f i un valor x, i aplica f a x dues vegades.

Exercici Pràctic

Exercici: Defineix una funció doblar que prengui un nombre i el multipliqui per 2. Després, utilitza la funció aplicarDuesVegades per aplicar doblar dues vegades a un nombre.

let doblar x = x * 2
let resultat = aplicarDuesVegades doblar 3
printfn "%d" resultat  // Ha de mostrar 12

Solució:

let doblar x = x * 2
let aplicarDuesVegades f x = f (f x)
let resultat = aplicarDuesVegades doblar 3
printfn "%d" resultat  // Ha de mostrar 12

Immutabilitat

Variables Immutables

En F#, les variables definides amb let són immutables per defecte. Això significa que no es poden canviar després de ser assignades. Aquí teniu un exemple:

let x = 5
// x <- 6  // Això donarà un error

Beneficis de la Immutabilitat

  1. Seguretat del Codi: Les variables immutables redueixen els errors perquè no es poden modificar accidentalment.
  2. Facilitat de Raonament: És més fàcil raonar sobre el codi quan les variables no canvien.
  3. Concorrència: La immutabilitat facilita la programació concurrent perquè no hi ha problemes de condicions de carrera.

Treballant amb Col·leccions Immutables

Les col·leccions en F# també són immutables per defecte. Aquí teniu un exemple amb una llista:

let llista = [1; 2; 3]
let novaLlista = 0 :: llista  // Afegeix 0 al començament de la llista

En aquest exemple, llista no es modifica; en canvi, es crea una nova llista novaLlista amb l'element afegit.

Exercici Pràctic

Exercici: Defineix una funció afegirElement que prengui una llista i un element, i retorni una nova llista amb l'element afegit al començament.

let afegirElement element llista = element :: llista
let llistaOriginal = [1; 2; 3]
let novaLlista = afegirElement 0 llistaOriginal
printfn "%A" novaLlista  // Ha de mostrar [0; 1; 2; 3]

Solució:

let afegirElement element llista = element :: llista
let llistaOriginal = [1; 2; 3]
let novaLlista = afegirElement 0 llistaOriginal
printfn "%A" novaLlista  // Ha de mostrar [0; 1; 2; 3]

Conclusió

En aquesta secció, hem après sobre les funcions i la immutabilitat en F#. Hem vist com definir funcions, utilitzar funcions anònimes i d'ordre superior, i els beneficis de la immutabilitat. Aquests conceptes són fonamentals per a la programació funcional i ens preparen per a temes més avançats en F#.

© Copyright 2024. Tots els drets reservats