Erlang-guards
提供:Dev Guides
アーラン-ガード
ガードは、パターンマッチングの能力を高めるために使用できる構造です。 ガードを使用すると、パターン内の変数に対して簡単なテストと比較を実行できます。
ガードステートメントの一般的な構文は次のとおりです-
function(parameter) when condition ->
どこで、
- * Function(parameter)*-これは、ガード条件で使用される関数宣言です。
- パラメータ-一般に、ガード条件はパラメータに基づいています。
- 条件-関数を実行する必要があるかどうかを確認するために評価する必要がある条件。
- ガード条件が指定されている場合、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).
上記の例について、次のことに注意する必要があります-
- 表示機能は、ガードとともに定義されます。 最初の表示宣言には、パラメーターNが10より大きい場合のガードがあります。 したがって、パラメーターが10より大きい場合、その関数が呼び出されます。
- 表示関数が再び定義されますが、今回は10未満のガードで定義されています。 この方法で、同じ関数を複数回定義し、それぞれに個別のガード条件を設定できます。
上記のプログラムの出力は次のようになります-
出力
greater than 10
ガード条件は、 if else および case ステートメントにも使用できます。 これらのステートメントに対してガード操作を実行する方法を見てみましょう。
「if」ステートメントのガード
ガードは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.
上記の例について、次のことに注意する必要があります-
- ガード機能はifステートメントとともに使用されます。 ガード関数がtrueと評価された場合、ステートメント「N is than than 10」が表示されます。
- ガード関数がfalseと評価されると、「N is less than 10」というステートメントが表示されます。
上記のプログラムの出力は次のようになります-
出力
N is less than 10
「ケース」ステートメントの警備員
ガードはcaseステートメントにも使用できるため、実行される一連のステートメントはガード条件に基づいています。 これを達成する方法を見てみましょう。
例
-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.
上記の例について、次のことに注意する必要があります-
- ガード関数は、caseステートメントと共に使用されます。 ガード関数がtrueと評価されると、「Aの値は10より大きい」というステートメントが表示されます。
- ガード関数が他の何かに評価される場合、「Aの値は10未満です」というステートメントが表示されます。
上記のプログラムの出力は次のようになります-
出力
The value of A is less than 10
複数のガード条件
関数に対して複数のガード条件を指定することもできます。 複数のガード条件を持つガードステートメントの一般的な構文は次のとおりです-
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("Less than 10").
start() ->
display(11).
上記の例については、次の点に注意する必要があります-
- 最初の表示関数宣言では、N> 10の条件に加えて、 is_integer の条件も指定されています。 したがって、Nの値が10以上の整数である場合にのみ、この関数が実行されます。
上記のプログラムの出力は次のようになります-
出力
Greater than 10