Elm - Gestion des erreurs

Une erreur est une condition inattendue dans un programme. Des erreurs peuvent se produire au moment de la compilation ou de l'exécution. Des erreurs de compilation se produisent lors de la compilation d'un programme (par exemple, une erreur dans la syntaxe du programme) tandis que des erreurs d'exécution se produisent pendant l'exécution du programme. Contrairement à d'autres langages de programmation, Elm ne génère pas d'erreurs d'exécution.

Considérez une application qui accepte l'âge d'un utilisateur. L'application doit générer une erreur si l'âge est nul ou négatif. Dans ce cas, l'application Elm peut utiliser le concept de gestion des erreurs pour déclencher explicitement une erreur au moment de l'exécution si l'utilisateur entre zéro ou une valeur négative comme âge. La gestion des erreurs spécifie la marche à suivre si quelque chose d'inattendu se produit pendant l'exécution du programme.

Le langage de programmation Elm gère les erreurs de la manière suivante -

  • MayBe
  • Result

Peut être

Considérez la fonction de recherche dans une application. La fonction de recherche renvoie des données associées si le mot-clé de recherche est trouvé sinon ne renvoie rien. Ce cas d'utilisation peut être implémenté dans Elm en utilisant le type MayBe.

Syntaxe

variable_name:MayBe data_type

Une variable de type MayBe peut contenir l'une des valeurs suivantes -

  • Just some_Value - Ceci est utilisé s'il existe des données valides.

  • Rien - Ceci est utilisé si la valeur est absente ou inconnue. Rien n'est équivalent à null dans d'autres langages de programmation.

Illustration

L'exemple suivant montre comment utiliser le type MayBe avec des variables et une fonction.

Step 1 - Créer un MayBeDemo.elm fichier et ajoutez-y le code suivant

-- MayBeDemo.elm
module MayBeDemo exposing(..)
import Maybe

--declaring a MayBe variable and assigning value to it
userName : Maybe String
userName = Just "Mohtashim"

--declaring a MayBe variable and assigning value to it
userAge :Maybe Int
userAge = Just 20

--declaring a MayBe variable and assigning value to it
userSalary:Maybe Float
userSalary = Nothing

--declaring a custom type
type Country = India | China | SriLanka

--defining a function that takes a String parameter as input and returns a value of type MayBe

getCountryFromString : String -> Maybe Country
getCountryFromString p =
case p of
   "India"
      -> Just India
   "China"
      -> Just China
   "SriLanka"
      -> Just SriLanka
   _
      -> Nothing

Step 2 - Importez le module dans elm repl et exécutez-le comme indiqué ci-dessous

E:\ElmWorks\ErroApp> elm repl
---- elm-repl 0.18.0 -----------------------------------------------------------
:help for help, :exit to exit, more at 
      
        -------------------------------------------------------------------------------- > import MayBeDemo exposing(..) > userName Just "Mohtashim" : Maybe.Maybe String > userAge Just 20 : Maybe.Maybe Int > userSalary Nothing : Maybe.Maybe Float > getCountryFromString "India" Just India : Maybe.Maybe MayBeDemo.Country > getCountryFromString "india" Nothing : Maybe.Maybe MayBeDemo.Country 
      

La fonction vérifie si la valeur transmise à la fonction est l'Inde, la Chine ou le SriLanka. Si la valeur du paramètre ne correspond à aucune de ces valeurs, elle ne renvoie rien.

Résultat

Prenons un exemple, où l'application doit valider une condition et générer une erreur si la condition n'est pas satisfaite. Le type de résultat peut être utilisé pour y parvenir. Le type de résultat doit être utilisé si l'application souhaite explicitement déclencher une erreur et renvoyer des détails sur ce qui s'est mal passé.

Syntaxe

La déclaration de type de résultat prend deux paramètres: le type de données de l'erreur (généralement String) et le type de données du résultat à renvoyer si tout se passe bien.

type Result error_type data_value_type
= Ok data_value
| Err error_message

Le type de résultat renvoie l'une des valeurs suivantes -

  • Ok some_value - Représente le résultat à retourner

  • Err - Représente le message d'erreur à renvoyer si les conditions attendues ne sont pas satisfaites.

Illustration 1

Essayez l'exemple suivant dans Elm REPL -

> String.toInt
<function> : String -> Result.Result String Int
-- successful result
> String.toInt "10"
Ok 10 : Result.Result String Int
-- unsuccessful result , Error
> String.toInt "a"
Err "could not convert string 'a' to an Int" : Result.Result String Int

La fonction String.toInt renvoie la valeur Integer si le paramètre passé est valide. Si le paramètre n'est pas un nombre, la fonction renvoie une erreur.

Illustration 2

L'exemple suivant accepte l'âge comme paramètre. La fonction renvoie l'âge s'il est compris entre 0 et 135, sinon elle renvoie un message d'erreur approprié.

Step 1 - Créez un fichier ResultDemo.elm et ajoutez-y le code suivant.

--ResultDemo.elm
module ResultDemo exposing(..)

userId : Result String Int
userId = Ok 10

emailId : Result String Int
emailId = Err "Not valid emailId"

isReasonableAge : String -> Result String Int
isReasonableAge input =
   case String.toInt input of
      Err r ->
         Err "That is not a age!"

   Ok age ->
      if age < 0 then
         Err "Please try again ,age can't be negative"
      else if age > 135 then
         Err "Please try agian,age can't be this big.."

   else
      Ok age

Step 2 - Importez le module dans le package elm et exécutez-le comme indiqué ci-dessous

E:\ElmWorks\ElmRepo\15_ErrorHandling\15_Code> elm repl
---- elm-repl 0.18.0 -----------------------------------------------------------
:help for help, :exit to exit, more at <https://github.com/elm-lang/elm-repl>
--------------------------------------------------------------------------------
> import ResultDemo exposing (..)
> userId
Ok 10 : Result.Result String Int
> emailId
Err "Not valid emailId" : Result.Result String Int
> isReasonableAge "10"
Ok 10 : Result.Result String Int
> isReasonableAge "abc"
Err "That is not a age!" : Result.Result String Int