Erlang - Gardes

Les gardes sont des constructions que nous pouvons utiliser pour augmenter la puissance de la correspondance de modèles. En utilisant des gardes, nous pouvons effectuer des tests simples et des comparaisons sur les variables d'un modèle.

La syntaxe générale de l'instruction de garde est la suivante -

function(parameter) when condition ->

Où,

  • Function(parameter) - Il s'agit de la déclaration de fonction utilisée dans la condition de garde.

  • Parameter - Généralement, la condition de garde est basée sur le paramètre.

  • Condition - La condition qui doit être évaluée pour voir si la fonction doit être exécutée ou non.

  • L'instruction when doit être utilisée lorsqu'une condition de garde est spécifiée.

Regardons un exemple rapide de la façon dont les gardes peuvent être utilisés -

Exemple

-module(helloworld). 
-export([display/1,start/0]). 

display(N) when N > 10 ->   
   io:fwrite("greater then 10"); 
display(N) when N < 10 -> io:fwrite("Less 
   than 10"). 

start() -> 
   display(11).

Les choses suivantes doivent être notées à propos de l'exemple ci-dessus -

  • La fonction d'affichage est définie avec une protection. La première déclaration d'affichage a une garde de quand le paramètre N est supérieur à 10. Donc, si le paramètre est supérieur à 10, cette fonction sera appelée.

  • La fonction d'affichage est à nouveau définie, mais cette fois avec une garde inférieure à 10. De cette manière, vous pouvez définir la même fonction plusieurs fois, chacune avec une condition de garde distincte.

La sortie du programme ci-dessus sera la suivante -

Production

greater than 10

Les conditions de garde peuvent également être utilisées pour if else et casedéclarations. Voyons comment nous pouvons effectuer les opérations de garde sur ces déclarations.

Gardes pour les déclarations 'si'

Les gardes peuvent également être utilisées pour les instructions if de sorte que la série d'instructions exécutées soit basée sur la condition de garde. Voyons comment nous pouvons y parvenir.

Exemple

-module(helloworld). 
-export([start/0]). 

start() -> 
   N = 9, 
   if 
      N > 10 -> 
         io:fwrite("N is greater than 10"); 
      true -> 
         io:fwrite("N is less than 10") 
   end.

Les choses suivantes doivent être notées à propos de l'exemple ci-dessus -

  • La fonction de garde est utilisée avec l'instruction if. Si la fonction de garde est évaluée à vrai, alors l'instruction «N est supérieur à 10» s'affiche.

  • Si la fonction de garde est évaluée à faux, alors l'instruction «N est inférieur à 10» s'affiche.

La sortie du programme ci-dessus sera la suivante -

Production

N is less than 10

Gardes pour les déclarations de cas

Les gardes peuvent également être utilisées pour les instructions case de sorte que la série d'instructions exécutées soit basée sur la condition de garde. Voyons comment nous pouvons y parvenir.

Exemple

-module(helloworld). 
-export([start/0]). 

start() -> 
   A = 9, 
   case A of {A} when A>10 -> 
      io:fwrite("The value of A is greater than 10"); _ -> 
      io:fwrite("The value of A is less than 10") 
   end.

Les choses suivantes doivent être notées à propos de l'exemple ci-dessus -

  • La fonction de garde est utilisée avec l'instruction case. Si la fonction de garde est évaluée à vrai, alors l'instruction «La valeur de A est supérieure à 10» s'affiche.

  • Si la fonction de garde évalue autre chose, l'instruction «La valeur de A est inférieure à 10» s'affiche.

La sortie du programme ci-dessus sera la suivante -

Production

The value of A is less than 10

Conditions de garde multiples

Plusieurs conditions de garde peuvent également être spécifiées pour une fonction. La syntaxe générale de l'instruction de garde avec plusieurs conditions de garde est donnée ci-dessous -

function(parameter) when condition1 , condition1 , .. conditionN ->

Où,

  • Function(parameter) - Il s'agit de la déclaration de fonction qui a utilisé la condition de garde.

  • Parameter - Généralement, la condition de garde est basée sur le paramètre.

  • condition1, condition1, .. conditionN - Ce sont les conditions de garde multiples qui sont appliquées aux fonctions.

  • L'instruction when doit être utilisée lorsqu'une condition de garde est spécifiée.

Regardons un exemple rapide de la façon dont plusieurs gardes peuvent être utilisés -

Exemple

-module(helloworld). 
-export([display/1,start/0]). 

display(N) when N > 10 , is_integer(N) -> 
   io:fwrite("greater then 10"); 
display(N) when N < 10 -> 
   io:fwrite("Less than 10"). 
   
start() -> 
   display(11).

Le point suivant doit être noté à propos de l'exemple ci-dessus -

  • Vous remarquerez que pour la première déclaration de fonction d'affichage, en plus de la condition pour N> 10, la condition pour is_integerest également spécifié. Donc seulement si la valeur de N est un entier et supérieur à 10, cette fonction sera exécutée.

La sortie du programme ci-dessus sera la suivante -

Production

Greater than 10