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

  1. Monada IO: La monada IO encapsula operacions d'entrada i sortida, permetent que el codi Haskell es mantingui pur.
  2. Funcions d'I/O: Funcions com putStrLn, getLine, readFile, i writeFile són utilitzades per realitzar operacions d'I/O.
  3. Tipus IO: Les funcions que realitzen operacions d'I/O tenen el tipus IO.

Exemples Pràctics

  1. putStrLn i getLine

La 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 variable nom.
  • putStrLn ("Hola, " ++ nom ++ "!"): Imprimeix un missatge de benvinguda amb el nom introduït.

  1. 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 fitxer entrada.txt i l'assigna a la variable contingut.
  • 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 fitxer sortida.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

  1. Oblidar el tipus IO: Recorda que les funcions que realitzen operacions d'I/O han de tenir el tipus IO.
  2. No utilitzar do: Les operacions d'I/O en Haskell sovint requereixen l'ús de la notació do per encadenar accions.
  3. Gestió d'errors: Considera la possibilitat d'errors en les operacions d'I/O, com ara fitxers inexistents o permisos denegats. Utilitza funcions com catch per 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.

© Copyright 2024. Tots els drets reservats