En aquest tema, aprendrem els conceptes bàsics d'entrada i sortida (I/O) en Haskell. La gestió d'I/O és una part fonamental de qualsevol llenguatge de programació, i Haskell no és una excepció. Tot i que Haskell és un llenguatge funcional pur, proporciona mecanismes per treballar amb I/O de manera segura i eficient.
Conceptes Clau
- Monada IO: La monada
IOencapsula operacions d'entrada i sortida, permetent que el codi Haskell es mantingui pur. - Funcions d'I/O: Funcions com
putStrLn,getLine,readFile, iwriteFilesón utilitzades per realitzar operacions d'I/O. - Tipus IO: Les funcions que realitzen operacions d'I/O tenen el tipus
IO.
Exemples Pràctics
putStrLn i getLine
putStrLn i getLineLa funció putStrLn s'utilitza per imprimir una línia de text a la consola, mentre que getLine llegeix una línia de text de la consola.
main :: IO ()
main = do
putStrLn "Quin és el teu nom?"
nom <- getLine
putStrLn ("Hola, " ++ nom ++ "!")Explicació:
putStrLn "Quin és el teu nom?": Imprimeix una línia de text a la consola.nom <- getLine: Llegeix una línia de text de la consola i l'assigna a la variablenom.putStrLn ("Hola, " ++ nom ++ "!"): Imprimeix un missatge de benvinguda amb el nom introduït.
- Llegir i Escriure Fitxers
Les funcions readFile i writeFile permeten llegir i escriure fitxers.
main :: IO ()
main = do
contingut <- readFile "entrada.txt"
putStrLn "Contingut del fitxer:"
putStrLn contingut
writeFile "sortida.txt" contingut
putStrLn "El contingut ha estat escrit a sortida.txt"Explicació:
contingut <- readFile "entrada.txt": Llegeix el contingut del fitxerentrada.txti l'assigna a la variablecontingut.putStrLn "Contingut del fitxer:": Imprimeix un missatge a la consola.putStrLn contingut: Imprimeix el contingut del fitxer a la consola.writeFile "sortida.txt" contingut: Escriu el contingut al fitxersortida.txt.putStrLn "El contingut ha estat escrit a sortida.txt": Imprimeix un missatge de confirmació.
Exercicis Pràctics
Exercici 1: Salutació Personalitzada
Escriu un programa que demani el nom de l'usuari i la seva edat, i després imprimeixi un missatge personalitzat.
main :: IO ()
main = do
putStrLn "Quin és el teu nom?"
nom <- getLine
putStrLn "Quina és la teva edat?"
edat <- getLine
putStrLn ("Hola, " ++ nom ++ "! Tens " ++ edat ++ " anys.")Exercici 2: Copiar Fitxer
Escriu un programa que llegeixi el contingut d'un fitxer i el copiï a un altre fitxer.
main :: IO ()
main = do
putStrLn "Introdueix el nom del fitxer d'entrada:"
fitxerEntrada <- getLine
putStrLn "Introdueix el nom del fitxer de sortida:"
fitxerSortida <- getLine
contingut <- readFile fitxerEntrada
writeFile fitxerSortida contingut
putStrLn ("El contingut ha estat copiat de " ++ fitxerEntrada ++ " a " ++ fitxerSortida)Errors Comuns i Consells
- Oblidar el tipus
IO: Recorda que les funcions que realitzen operacions d'I/O han de tenir el tipusIO. - No utilitzar
do: Les operacions d'I/O en Haskell sovint requereixen l'ús de la notaciódoper encadenar accions. - Gestió d'errors: Considera la possibilitat d'errors en les operacions d'I/O, com ara fitxers inexistents o permisos denegats. Utilitza funcions com
catchper gestionar excepcions.
Resum
En aquesta secció, hem après els conceptes bàsics d'I/O en Haskell, incloent-hi com utilitzar la monada IO per encapsular operacions d'entrada i sortida. Hem vist exemples pràctics de com llegir i escriure a la consola i a fitxers, i hem practicat amb exercicis per reforçar aquests conceptes. Amb aquests fonaments, estàs preparat per explorar operacions d'I/O més avançades en Haskell.
