ブールデータタイプとは | マーブルルール

ブールデータタイプとは

ステップアップ

スポンサーリンク

この記事は、初心者向けのまずこれシリーズ第5回の補足記事です。ブールデータタイプって何の役に立つの、という方向けにもう少し内容を補足しています。

プログラミングに慣れていない方にとっては、数値、とか文字列といった「わかりやすい」データタイプ以外によく目にしたり耳にするブールデータタイプについて、なんのためにあるの?と思う方も多いかもしれません。

でも、ブールデータを扱うことはプログラムを動かすのに必要なアルゴリズムの構築になくてはならない大切な要素になっています。

わざわざブールデータという見慣れない(?)データタイプを扱うにはちゃんと理由があるので、聞き慣れないという理由だけで苦手意識を持たずにしっかりどんなものか理解しておくのは大切です。

そこで、本記事ではブールデータタイプについてもう少し掘り下げてみてみることにします。

スポンサーリンク

ブールデータタイプとは

改めてブールデータタイプについておさらいです(以下単にブールと言います)。

簡単な話、ブールは0か1を表わすだけのデータです。二つのうちのどちらか、を表わすために使用します。プログラム(アルゴリズム)の中では

  • ある条件を満たしているか満たしていないか

を示すことが多いです。二つあるうちどちらか一方の状態、ということなので、ブールの値はTRUEとFALSE、真か偽かを表す文字の頭文字「T」「F」で表されます。

そんな簡単なことかと思われるかもしれませんが、これがありがたがられる場面は条件分岐やイベント検出など多岐にわたります。

条件分岐でいえば、例えば「サイコロを振って4以上が出たか」を検出するのに、6が出たらTRUE、2が出たらFALSEといった表し方ができます。

「3が出た」とか「6が出た」という具体的な数値の情報はこの際どうでもよく、「4以上かどうか」という二択にしか興味がない時に便利です。

また、イベント検出でいえば、例えば「フロントパネル上でユーザーがボタンを押した」状態を検出するのに、「ボタンが押された」をTRUE、「ボタンが押されていない」をFALSEとするといった具合です。

ブールデータタイプ以外でこれらのことを検出するのは意外と厄介だったりします。厳密にいうと後述するようにブールは数値に変換できるので数値で表すこともできるのですが、TRUEとFALSEのシンプルな二者択一の形式で扱う方が簡便です。

ブールの特徴

ブールの特徴は、まず制御器の扱いとしてスイッチとラッチの二つの機械的動作があってさらに「押されたら」「放されたら」「放されるまで」の三つに細分化されるため、計6つの状態があるということが挙げられます。

これらについてはプログラム上の特性でありまずこれシリーズ第5回の記事で紹介していますので本記事では省いています。

ブールデータの種類は上記の通りTRUEとFALSEだけですが、これらの組み合わせ方というのも考慮する必要がある場合があります。

例えば、サイコロの例でいえば、「4以上が出た」という状態と「5回振った」という状態を組み合わせて、「5回以上振って4以上が出たら終了」ということを表わすような場合です。

この場合には、「5回以上振る」という条件がTRUEになり、さらに「4以上が出る」という条件もTRUEになる必要があります。これらは「5回以上振る」かつ(AND)「4以上が出る」、と表せます。

上の図を見るとわかりますが、一番右の列がTRUEになるのは、「5回以上振ったか」がTRUEで「4以上が出たか」もTRUEになっているときのみです。片方でもFALSEになっていると一番右はFALSEになっています。

一方で、例えば「5回以上振るかあるいは4以上が出たら終了」という条件を表わす場合には、「5回以上振る」または(OR)「4以上が出る」と表せます。

こちらも上の図を見ると、一番右の列がTRUEになるのは、「5回以上振ったか」と「4以上が出たか」がどちらもFALSEになっているとき以外全部ということがわかります。

つまり二つの条件の組み合わせで結果(TRUEかFALSEか)が異なることが分かったと思います。

ブロックダイアグラムの関数パレットでブールの欄を見るとこれらの組み合わせを示すための関数がいくつも用意されています。

代表的なANDとORを見てみます。これらは、関数に二つのブールを入力してそれらの組み合わせで出力が変わります。具体的には

ANDの場合:二つの入力のうち両方がTRUEでないと出力がTRUEにならない

ORの場合:二つの入力のうち片方だけでもTRUEだと出力がTRUEになる

といった具合です。先ほどのサイコロの例で「5回以上振る」と「4以上が出る」という条件の組み合わせの結果と同じことが分かると思います。

他にも条件の組み合わせは数多くあり、一例として

NotORの場合:二つの入力がともにFALSEのときのみ出力がTRUEとなる

NotANDの場合:二つの入力がともにTRUEのときのみ出力がFALSEになる

というものもあります。それぞれの入力と出力は詳細ヘルプに記載があります。

ロジックを多く実装する場合には上記の様々な配列関数を駆使することもあると思いますが、そんなに覚えられないという場合にはとりあえずORとANDだけ覚えておけばいいと思います。

特にORは頻繁に使うケースが多いと個人的には思います。ループ構造を扱って、何か特定の操作を繰り返し行う場合には「処理が終わったという条件を満たしたOR処理にエラーが出て繰り返しを終了する」という書き方は頻繁に登場します。

特殊なブール、ラジオボタン

ブールデータは、制御器表示器のスタイルによってかなり見た目の種類がたくさんあります。そんな中で、一部のスタイルにしかないラジオボタンというものがあります。

これはブールのくくりなのですが、プログラムの中での実体はTRUEやFALSEではありません。「複数ある選択肢のどれか一つがTRUE」となっていることを表わすために、TRUEになっている選択肢の番号がそのまま数値として得られます。

そのため、複数の選択肢から一つの条件を選ばせる場合にラジオボタンが使用できます。(もし複数の選択肢から複数選ばせる場合には、ブールの配列あるいはクラスタというデータタイプにすることになります)

なお、実際は普通のブールデータも数値として表すことができ、その場合FALSEが0、TRUEが1となっています。

例えば、何かの理由でブールの情報を記録するためにファイル出力する際、TRUEやFALSEといった文字列で記録することももちろんできますが、0や1といった簡単な数値で記録する方が便利かもしれません。

ブールにテキスト

ブールは見た目でFALSEかTRUEか判断させられる以外に、中に表示するテキストも変えることができます。

こうすることで、よりユーザーに分かりやすく状態を知らせることができます。

通常、このあたりの設定は右クリックして表示されるプロパティから行えます。プロパティの外観の項目でテキストを設定、色も変更することができます。

確かにこの方法で変更することはできるのですが、中には「プログラム中で場合に応じてテキストを変更したい」という場合があるかもしれません。

もちろんそういったこともできるのですが、そのためにはプロパティノードを使用します。もしまだプロパティノードを知らないよ、という方がいましたら、簡単に解説した記事がありますのでこちらもあわせてどうぞ。

ブールのプロパティにある「文字列[4]」という項目を選択すると、4種類の状態に対してテキストを設定することができます(4つの要素を持った配列を入力します)。え、ブールってTRUEかFALSEの2種類なのに4種類って何?と思われるかもしれませんが、実際に組んで実行するとわかると思います。

上の図にある「TRUEからFALSEのとき」とは、例えばブールの機械的動作をスイッチにして「放されたらスイッチ」にした際、TRUEの状態でブールをクリック後指を放さない(FALSEにしない)状態にしておくと確認することができます。

ブールはアルゴリズムとして条件分岐の際に頻繁に使用されることがありますし、フロントパネル上のユーザーの操作あるいはユーザーに何か条件の結果を知らせる際にも頻繁に使用されます。

その際に、単にTRUEかFALSEかの状態を知らせるだけでなく、テキストなども組み合わせて視覚的に分かりやすい表示を心掛けると良いプログラムになります。

ブールデータについてプログラミングを学ぶ中でどんな場面で使うのか、これからどんどんプログラムを書いていく中で嫌というほど出てくると思うのですが、まずその導入としてこの記事がお役に立てば嬉しいです。

ここまで読んでいただきありがとうございました。

コメント

タイトルとURLをコピーしました