提供:Japanese Scratch-Wiki
真偽ブロックは、「条件・状態」を意味する六角形のブロックである(この形状は、フローチャートにおける「条件判断」に近い形として採用された)。プログラム内で呼び出されたとき、真偽ブロックは、真(True)または偽(False)を返す値ブロックとしてふるまう。
真偽ブロックは調べるブロック、演算ブロック、変数ブロックの3つのカテゴリに存在しており、総数は13個である。ブロック定義 (カテゴリ)でも、ブロック定義で指定しておけば、真偽ブロックによる真偽値の入力を受け取ることができる。
ブロック
Scratch 3.0には、次の13個の真偽ブロックが存在する:
( v) に触れた
[#000] 色に触れた
[#000] 色が [#000] 色に触れた
マウスが押された
( v) キーが押された
[] \< []
[] = []
[] > []
<> かつ <>
<> または <>
<> ではない
[] に [] が含まれる::operators
[ v] に [] が含まれる
形状
真偽ブロックは真(True)または偽(False)のいずれかの「条件」(状態)を持つブロックである。形状は六角形であり、他のブロックにある六角形のスロットにはめ込んで使用する(六角形のスロットは条件を表し、すべての真偽ブロックを入れることができる)。
もし <(スペース v) キーが押された> なら (ジャンプ! v) を送る end
さらに、形状は一致しないものの、文字列を入力する場所には真偽ブロックをはめ込むこともできる。
@greenFlag が押されたとき::events hat ずっと <(スプライト1 v) に触れた> と言う//スプライト1に接触している間は「true」、接触していない間は「false」と表示される
真(True)と偽(False)は、次のようにすれば数値に変換できる(真は1、偽は0となる)。
@greenFlag が押されたとき::events hat ずっと ((0) + <(スプライト1 v) に触れた>) と言う//スプライト1に接触している間は「1」、接触していない間は「0」と表示される end
これらのスクリプトでは、真偽ブロック自体は真(True)または偽(False)を返しているが、スプライトでこれらを文字列や数値に変換して、表示している。
種類
Scratchには2種類の真偽ブロックがある。1つは特定の状態を調べるもの、もう1つは値を比較するものである。
状態を調べる真偽ブロックには、たとえば次のものがある: () に () が含まれるブロック、() に触れたブロック
値同士を比較する真偽ブロックには、たとえば次のものがある: () = ()ブロック、() かつ ()ブロック、() ではないブロック なお「() かつ ()」「() または ()」「() ではない」ブロックが返す値は、真理値表に基づいている。
使用例
真偽ブロックは、ブロックの内容を評価して、真または偽を返すブロックであり、条件を指定したいときに使用できる。 真偽ブロックによる条件を受け取るブロックは、C型ブロック、制御ブロック、スタックブロックの3つのカテゴリに存在するが、その中でも制御カテゴリのもし () ならブロックは特に利用する機会が多い。 「もし () なら」ブロックでは、条件が真のとき内部のブロックが実行されるが、この条件には「マウスがスプライトに触れたかどうか」から「ある変数の値が他の変数と等しいかどうか」まで、さまざまな内容が指定できる。 次に「もし () なら」ブロックの使用例を示す:
@greenFlag が押されたとき::events hat <(ストップ実行) = [1]> まで繰り返す (10) 歩動かす [色 v] の効果を (25) ずつ変える 終わるまで (meow v) の音を鳴らす もし <(端 v) に触れた> なら [終了!] と (2) 秒言う [このスクリプト v] を止める ::control cap end end
() まで繰り返すでは、真偽ブロック() = ()を使って、変数「ストップ実行」の値が1であるかどうかを調べている。この場合は、条件が偽となるあいだ(変数「ストップ実行」が1ではないとき)、内部のブロックが実行される。 一方、繰り返し処理の内部にあるもし () ならでは、真偽ブロック() に触れたを使って、スプライトが画面の端に接触したかどうかを調べている。こちらの場合は、条件が真の場合(スプライトが画面の端に接触した場合)、「もし () なら」内部のブロックが実行されるため、このスクリプトが終了する。
その他の使用例
真偽値間の比較
真偽値の値は、別の真偽値の値と比較することができる。たとえば、次の例では2つの真偽ブロックが返す値を直接比較している。この例では、両方の真偽ブロックが同じ値を返すとき(両方とも真、または、両方とも偽、XNOR)、「もし () なら」内部のコードが実行される。
もし <<マウスが押された> = <[#00A] 色に触れた>> なら ... end
変数への代入
真偽値は、ほかの値と同じように変数に入れることができる。たとえば、次のスクリプトを実行すると、現在のマウスの状態が真偽値として変数「bool」に格納される(マウスが押されているときは真(True)、マウスが押されていないときは偽(False)が格納される)。
[bool v] を <マウスが押された> にする
このようにして真偽値を入れた変数は、後からほかの真偽値(真偽ブロック)と比較することができる:
もし <<マウスが押された> = (bool)> なら ... end
上記の例では、現在のマウスの状態が、bool変数に値を入れたときと同じであるかどうかがチェックされる。