En aquest tema, explorarem dos conceptes fonamentals en la programació funcional: l'aplicació parcial i el currying. Aquests conceptes permeten crear funcions més flexibles i reutilitzables, facilitant la composició de funcions complexes a partir de funcions més senzilles.
Aplicació Parcial
Què és l'Aplicació Parcial?
L'aplicació parcial és una tècnica en la qual una funció que pren múltiples arguments es transforma en una funció que pren menys arguments. Això es fa fixant alguns dels arguments de la funció original.
Exemple d'Aplicació Parcial
Considerem una funció que suma tres nombres:
Podem crear una nova funció que suma 5 a dos nombres fixant el primer argument a 5:
Ara, add5
és una funció que pren dos arguments:
Exercici Pràctic
- Defineix una funció
multiply
que multiplica tres nombres. - Utilitza l'aplicació parcial per crear una funció
doubleAndAdd
que multiplica el primer nombre per 2 i després suma els altres dos nombres.
let multiply x y z = x * y * z let doubleAndAdd = multiply 2 let result = doubleAndAdd 3 4 // result és 24
Currying
Què és el Currying?
El currying és el procés de transformar una funció que pren múltiples arguments en una seqüència de funcions que prenen un sol argument. En F#, totes les funcions són curried per defecte.
Exemple de Currying
Considerem la mateixa funció sum3
:
Podem veure que sum3
és realment una funció que retorna una altra funció:
let sum3Curried = sum3 1 // sum3Curried és una funció que pren dos arguments let result = sum3Curried 2 3 // result és 6
Exercici Pràctic
- Defineix una funció
subtract
que resta tres nombres. - Utilitza el currying per crear una funció
subtractFrom10
que resta dos nombres del nombre 10.
let subtract x y z = x - y - z let subtractFrom10 = subtract 10 let result = subtractFrom10 3 2 // result és 5
Comparació entre Aplicació Parcial i Currying
Característica | Aplicació Parcial | Currying |
---|---|---|
Definició | Fixar alguns arguments d'una funció per crear una nova funció amb menys arguments. | Transformar una funció que pren múltiples arguments en una seqüència de funcions que prenen un sol argument. |
Exemple | let add5 = sum3 5 |
let sum3Curried = sum3 1 |
Ús | Crear funcions especialitzades a partir de funcions generals. | Facilitar la composició de funcions i la reutilització de codi. |
Exercicis Addicionals
- Defineix una funció
divide
que divideix tres nombres. - Utilitza l'aplicació parcial per crear una funció
halfAndDivide
que divideix el primer nombre per 2 i després divideix els altres dos nombres. - Defineix una funció
modulus
que calcula el mòdul de tres nombres. - Utilitza el currying per crear una funció
modulusBy5
que calcula el mòdul de dos nombres respecte a 5.
Solucions
// Exercici 1 let divide x y z = x / y / z let halfAndDivide = divide 2 let result1 = halfAndDivide 4 2 // result1 és 1 // Exercici 2 let modulus x y z = x % y % z let modulusBy5 = modulus 5 let result2 = modulusBy5 3 2 // result2 és 1
Conclusió
En aquesta secció, hem après sobre l'aplicació parcial i el currying, dues tècniques poderoses en la programació funcional que ens permeten crear funcions més flexibles i reutilitzables. Hem vist exemples pràctics i hem realitzat exercicis per reforçar aquests conceptes. Aquests coneixements seran fonamentals per a la programació funcional avançada i la composició de funcions complexes en F#.
Curs de Programació en F#
Mòdul 1: Introducció a F#
Mòdul 2: Conceptes Bàsics
- Tipus de Dades i Variables
- Funcions i Immutabilitat
- Coincidència de Patrons
- Col·leccions: Llistes, Matrius i Seqüències
Mòdul 3: Programació Funcional
Mòdul 4: Estructures de Dades Avançades
Mòdul 5: Programació Orientada a Objectes en F#
- Classes i Objectes
- Herència i Interfícies
- Barreja de Programació Funcional i Orientada a Objectes
- Mòduls i Espais de Noms
Mòdul 6: Programació Asíncrona i Paral·lela
- Fluxos de Treball Asíncrons
- Biblioteca de Tasques Paral·leles
- MailboxProcessor i Agents
- Patrons de Concurrència
Mòdul 7: Accés i Manipulació de Dades
Mòdul 8: Proves i Depuració
- Proves Unitàries amb NUnit
- Proves Basades en Propietats amb FsCheck
- Tècniques de Depuració
- Perfilat de Rendiment