English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Erlang ガード

Guardはパターンにパターンマッチング機能を追加するための構造体です。Guardを使用することで、パターンの変数に対して簡単なテストや比較を行うことができます。

Guard文の一般的な構文は以下の通りです-

function(parameter) when condition ->

どこで、

  • Function(parameter) −これは保護条件下で使用される関数宣言です。

  • パラメータ -通常、保護条件は引数に基づいています。

  • Condition −条件を評価して、関数を実行するかどうかを決定します。

  • Guard条件が指定された場合、when文を使用する必要があります。

守護者の簡単な例を見てみましょう-

インスタンス

-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

上記の例について、以下の点に注意してください:

  • display関数はGuardと一緒に定義されています。引数nが大きい場合、10の場合、最初の表示宣言に保護があります。したがって、引数が大きい場合、10、その関数が呼び出されます。

  • display関数を再定義しましたが、这次の保護条件は小さい10。このようにして、同じ関数を複数回定義し、それぞれに異なるGuard条件を持つことができます。

上記のプログラムの出力は以下の通りです:

greater than 10

保護条件はif elseとcase文にも使用できます。これらの文に対する保護操作の方法を見てみましょう。

if文のGuard

Guardはif文にも使用できます。一連の文が保護条件に基づいて実行されるようにします。これをどうやって実現するかを見てみましょう。

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

上記の例について、以下の点に注意してください:

  • guard関数とif文を一緒に使用します。guard関数の計算結果がtrueの場合、文「Nが大きい」が表示されます。10”。

  • guard関数の計算結果がfalseの場合、文「Nが小さい」が表示されます。10”。

上記のプログラムの出力は以下の通りです:

出力

N is less than 10

「case」文のGuard

保護はcase文にも使用できます。一連の文が保護条件に基づいて実行されるようにします。その実現方法を見てみましょう。

インスタンス

-module(helloworld). 
-export([start/0]). 
start() -> 
   A = 9, 
   case A of {A} when A>10 -> 
      io:fwrite("Aの値が大きい10"); _ -> 
      io:fwrite("Aの値が小さい10") 
   end.

上記の例について、以下の点に注意してください:

  • guard関数とcase文を一緒に使用します。guard関数の計算結果がtrueの場合、文“Aの値が大きい”が表示されます。10”。

  • guard関数の計算結果が他の値の場合、文“Aの値が小さい”が表示されます。10”。

上記のプログラムの出力は以下の通りです:

出力

Aの値が小さい10

多重Guard条件

関数には複数の保護条件を指定することもできます。複数の保護条件を持つ保護文の一般的な文法は以下の通りです-

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

どこで、

  • Function(parameter) −保護条件を使用した関数宣言です。

  • パラメータ -通常、保護条件は引数に基づいています。

  • condition1, condition1, .. conditionN -これらは関数に適用される多重保護条件です。

  • 保護条件が指定された場合、when文を使用する必要があります。

複数のガードを使用する簡単な例を見てみましょう-

インスタンス

-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("より小さい 10 
   
start() -> 
   display(11

上記の例について、次の点に注意してください:

  • 最初のdisplay関数の宣言について、N>10の条件の他に、is\u integerの条件も指定されました。したがって、Nの値が整数でかつ大于10その場合だけこの関数が実行されます。

上記のプログラムの出力は以下の通りです:

出力

より小さい 10