Erlang World


top > module and function > guard2

Guard2

ガードについて

前節で取り扱ったガードについてこの節でもう少し理解を深めます。

ガードとは一言で言ってしまえば、
whenキーワードの後ろにある条件がtrueになるかどうかを確認している
と言えます。

trueだと処理を実行して、それ以外だと実行しません。

この章では、どのようなものがガードとして使えるかということを見て行きます。

ガードに記述できる式

ガードに書ける式は、おおまかに2つに分けられます。

また、これらの中において決められた種類の関数を取り扱うことも可能です。

順に見て行きましょう。

ブール表現と比較演算子

比較演算子の前に、その基礎となるブール表現を扱います。

【ブール表現】
演算子 意味
not 論理値を反転させる
and 論理積
or 論理和
xor 排他的論理和(左辺と右辺が違えばtrue)
orelse 論理和(左項がtrueなら右項を調べないでtrueを返す)
andalso 論理積(左項がfalseなら右項を調べないでfalseを返す)
1> not true.
false
2> true and false.
false
3> true xor false.
true	

比較演算子は、左辺と右辺の関係が演算子に対して成り立っているかを調べる時に使います。

【比較演算子】
演算子 意味 型変換
X > Y XはYより大きい あり
X < Y XはYより小さい あり
X >= Y XはY以上 あり
X <= Y XはY以下 あり
X == Y XはYと等しい あり
X /= Y XはYと等しくない あり
X =:= Y XはYと等しい なし
X =/= Y XはYと等しくない なし
1> 5 > 3.
true
2> 3 == 5.
false
3> 3 == 3.0.
true
4> 3 =:= 3.0.
false
5> 	

Erlangにおいては、整数と浮動小数点数の比較以外は「==ではなく=:=を使う」ことを勧められています。 同様に「/=ではなく=/=を使う」べきです。

ガード述語

ガード述語は返り値がboolean型の関数です。
したがって、ガードの中で利用できます。

【ブール表現】
ガード述語 意味
is_atom/1 アトムかどうか
is_binary/1 バイナリかどうか
is_bitstring/1 ビット文字列かどうか
is_float/1 浮動小数点数かどうか
is_function/1 関数かどうか
is_function(Function, Arity) Functionが、引数がArity個の関数かどうか
is_integer/1 整数かどうか
is_list/1 リストかどうか
is_number/1 数字かどうか
is_pid/1/td> プロセスIDかどうか
is_port/1 ポートIDかどうか
is_record(Record, Item) ItemがレコードRecordのものかどうか
is_reference/1 リファレンスかどうか
is_tuple/1 タプルかどうか

ガードの中で使える関数

それ自身は式として使えないですが、式として使える関数もあります。

【関数】
ガードの中で使える関数
abs(Number)
byte_size(Bitstring)
element(N, Tuple)
float(Term)
hd(List)
length(List)
node()
node(Pid|Ref|Port)
round(Number)
self()
size(Tuple|Bitstring)
tl(List)
trunc(Number)
tuple_size(Tuple)

Yuichi ITO. All rights reserved.
mail to : ad
inserted by FC2 system