En aquest tema, explorarem el concepte de "guards" en Haskell. Els guards són una manera elegant i llegible de gestionar condicions múltiples en les definicions de funcions. Són similars a les estructures if-else
que es troben en altres llenguatges de programació, però amb una sintaxi més clara i concisa.
Conceptes Clau
- Guards: Són expressions booleanes que es col·loquen després del símbol
|
i s'utilitzen per seleccionar entre diverses alternatives en una funció. - Otherwise: És una guard especial que sempre és certa i s'utilitza com a cas per defecte.
Sintaxi de Guards
La sintaxi bàsica per utilitzar guards en Haskell és la següent:
funció :: Tipus -> Tipus funció paràmetre | condició1 = resultat1 | condició2 = resultat2 | otherwise = resultatPerDefecte
Exemple Pràctic
Vegem un exemple pràctic per entendre millor com funcionen els guards. Suposem que volem definir una funció que classifiqui una nota numèrica en una lletra (A, B, C, D, F).
classificaNota :: Int -> Char classificaNota nota | nota >= 90 = 'A' | nota >= 80 = 'B' | nota >= 70 = 'C' | nota >= 60 = 'D' | otherwise = 'F'
Explicació del Codi
- Definició de la funció:
classificaNota
pren un enter (Int
) com a entrada i retorna un caràcter (Char
). - Guards:
nota >= 90 = 'A'
: Si la nota és 90 o superior, retorna 'A'.nota >= 80 = 'B'
: Si la nota és entre 80 i 89, retorna 'B'.nota >= 70 = 'C'
: Si la nota és entre 70 i 79, retorna 'C'.nota >= 60 = 'D'
: Si la nota és entre 60 i 69, retorna 'D'.otherwise = 'F'
: Si cap de les condicions anteriors es compleix, retorna 'F'.
Exercicis Pràctics
Exercici 1: Classificació de Temperatures
Defineix una funció classificaTemperatura
que classifiqui una temperatura en graus Celsius com a "Fred", "Tèbia" o "Calor".
classificaTemperatura :: Int -> String classificaTemperatura temp | temp <= 0 = "Fred" | temp <= 20 = "Tèbia" | otherwise = "Calor"
Exercici 2: Determinació de Paritat
Defineix una funció paritat
que determini si un nombre és parell o senar.
Solucions dels Exercicis
Solució de l'Exercici 1
classificaTemperatura :: Int -> String classificaTemperatura temp | temp <= 0 = "Fred" | temp <= 20 = "Tèbia" | otherwise = "Calor"
Solució de l'Exercici 2
Errors Comuns i Consells
- Oblidar el
otherwise
: Si no inclous un cas per defecte (otherwise
), la funció pot no cobrir tots els casos possibles, la qual cosa pot provocar errors en temps d'execució. - Condicions superposades: Assegura't que les condicions dels guards no es superposin de manera que només una condició sigui certa per a qualsevol entrada donada.
Conclusió
Els guards són una eina poderosa en Haskell per gestionar condicions múltiples de manera clara i concisa. Amb una comprensió sòlida dels guards, pots escriure funcions més llegibles i mantenibles. En el següent tema, explorarem les funcions d'ordre superior, que són una part fonamental de la programació funcional en Haskell.