Erlang - Wachen

Guards sind Konstrukte, mit denen wir die Leistung des Pattern Matching erhöhen können. Mithilfe von Wachen können wir einfache Tests und Vergleiche der Variablen in einem Muster durchführen.

Die allgemeine Syntax der Guard-Anweisung lautet wie folgt:

function(parameter) when condition ->

Wo,

  • Function(parameter) - Dies ist die Funktionsdeklaration, die im Schutzzustand verwendet wird.

  • Parameter - Im Allgemeinen basiert die Schutzbedingung auf dem Parameter.

  • Condition - Die Bedingung, die ausgewertet werden soll, um festzustellen, ob die Funktion ausgeführt werden soll oder nicht.

  • Die when-Anweisung muss verwendet werden, wenn eine Schutzbedingung angegeben wird.

Schauen wir uns ein kurzes Beispiel an, wie Wachen verwendet werden können -

Beispiel

-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).

Die folgenden Dinge müssen zum obigen Beispiel beachtet werden:

  • Die Anzeigefunktion wird zusammen mit einem Schutz definiert. Die erste Anzeigedeklaration schützt, wann der Parameter N größer als 10 ist. Wenn der Parameter also größer als 10 ist, wird diese Funktion aufgerufen.

  • Die Anzeigefunktion wird erneut definiert, diesmal jedoch mit einem Schutz von weniger als 10. Auf diese Weise können Sie dieselbe Funktion mehrmals mit jeweils einer separaten Schutzbedingung definieren.

Die Ausgabe des obigen Programms wird wie folgt sein:

Ausgabe

greater than 10

Die Schutzbedingungen können auch für verwendet werden if else und caseAussagen. Mal sehen, wie wir die Wachoperationen für diese Aussagen durchführen können.

Wachen für 'if'-Anweisungen

Guards können auch für if-Anweisungen verwendet werden, sodass die Reihe der ausgeführten Anweisungen auf der Guard-Bedingung basiert. Mal sehen, wie wir das erreichen können.

Beispiel

-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.

Die folgenden Dinge müssen zum obigen Beispiel beachtet werden:

  • Die Guard-Funktion wird zusammen mit der if-Anweisung verwendet. Wenn die Schutzfunktion als wahr ausgewertet wird, wird die Anweisung "N ist größer als 10" angezeigt.

  • Wenn die Schutzfunktion als falsch ausgewertet wird, wird die Anweisung "N ist kleiner als 10" angezeigt.

Die Ausgabe des obigen Programms wird wie folgt sein:

Ausgabe

N is less than 10

Wachen für "Fall" -Anweisungen

Guards können auch für case-Anweisungen verwendet werden, sodass die Reihe der ausgeführten Anweisungen auf der Guard-Bedingung basiert. Mal sehen, wie wir das erreichen können.

Beispiel

-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.

Die folgenden Dinge müssen zum obigen Beispiel beachtet werden:

  • Die Schutzfunktion wird zusammen mit der case-Anweisung verwendet. Wenn die Schutzfunktion als wahr ausgewertet wird, wird die Anweisung "Der Wert von A ist größer als 10" angezeigt.

  • Wenn die Schutzfunktion etwas anderes ergibt, wird die Anweisung "Der Wert von A ist kleiner als 10" angezeigt.

Die Ausgabe des obigen Programms wird wie folgt sein:

Ausgabe

The value of A is less than 10

Mehrere Schutzbedingungen

Für eine Funktion können auch mehrere Schutzbedingungen angegeben werden. Die allgemeine Syntax der Guard-Anweisung mit mehreren Guard-Bedingungen ist unten angegeben -

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

Wo,

  • Function(parameter) - Dies ist die Funktionsdeklaration, die die Schutzbedingung verwendet hat.

  • Parameter - Im Allgemeinen basiert die Schutzbedingung auf dem Parameter.

  • condition1, condition1, .. conditionN - Dies sind die Mehrfachschutzbedingungen, die auf Funktionen angewendet werden.

  • Die when-Anweisung muss verwendet werden, wenn eine Schutzbedingung angegeben wird.

Schauen wir uns ein kurzes Beispiel an, wie mehrere Wachen verwendet werden können -

Beispiel

-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).

Der folgende Punkt muss zum obigen Beispiel beachtet werden:

  • Sie werden feststellen, dass für die erste Deklaration der Anzeigefunktion zusätzlich zur Bedingung für N> 10 die Bedingung für is_integerwird ebenfalls angegeben. Nur wenn der Wert von N eine ganze Zahl und größer als 10 ist, wird diese Funktion ausgeführt.

Die Ausgabe des obigen Programms wird wie folgt sein:

Ausgabe

Greater than 10