Gleamは、真偽の値をBool型で表します。値はTrueとFalseの2つだけです。これらの値は変数に束縛できます。
let true_variable = True
let false_variable = False
&&、||、!の各演算子を使うと、真偽値を操作できます。
True && True // -> True
True && False // -> False
False || True // -> True
False || False // -> False
!False // -> True
!True // -> False
&&と||演算子は短絡評価を使います。これは、演算子の右側の式が必要なときだけ評価されるという意味です。
それぞれの演算子には異なる優先順位があり、!は&&や||より先に評価されます。波括弧({})を使うと、式の一部を他の部分より先に評価できます。
!True && False // -> False
!{True && False} // -> True
この演習では、往年の名作ゲーム「パックマン」のルールをいくつかGleamの関数に翻訳していきます。
翻訳するルールは4つあり、いずれもゲームの状態に関するものです。
入力がどのようにして生まれるかは気にしなくて構いません。入力を組み合わせて、意図した結果を返すことだけに集中しましょう。
2つの入力(パワーエサの効果が有効かどうか_と_ゴーストに触れているかどうか)を受け取り、パックマンがゴーストを食べられるかどうかを真偽値で返すeat_ghost関数を定義します。この関数は、パワーエサの効果が有効で、かつゴーストに触れているときだけTrueを返すようにします。
eat_ghost(False, True)
// -> False
2つの入力(パワーエサに触れているかどうか_と_ドットに触れているかどうか)を受け取り、パックマンが得点したかどうかを真偽値で返すscore関数を定義します。この関数は、パワーエサかドットに触れているときにTrueを返すようにします。
score(True, True)
// -> True
2つの入力(パワーエサの効果が有効かどうか_と_ゴーストに触れているかどうか)を受け取り、パックマンが負けるかどうかを真偽値で返すlose関数を定義します。この関数は、ゴーストに触れていて、かつパワーエサの効果が有効でないときにTrueを返すようにします。
lose(False, True)
// -> True
3つの入力(すべてのドットを食べたかどうか、パワーエサの効果が有効かどうか、ゴーストに触れているかどうか)を受け取り、パックマンが勝つかどうかを真偽値で返すwin関数を定義します。この関数は、すべてのドットを食べていて、かつパート3で定義した入力をもとに負けていないときにTrueを返すようにします。
win(False, True, False)
// -> False