Swift Playgroundsで学ぶiOSプログラミング

プログラムは条件分岐の集合体、「論理」と「集合」をマスター

文●柴田文彦 編集●吉田ヒロ

2016年09月12日 17時00分

2つの組み合わせで1つの判断

 前回に真偽値も一種の値なので「演算」が可能だということを述べました。実際にどのような演算が可能なのでしょうか。最もよく使われるのは、2つの真偽値が両方とも真だった場合に真となる「論理積」と、2つの真偽値のどちらか1つでも真なら真となる「論理和」です。検索の条件についてご存知なら「AND」と「OR」と言ったほうがわかりやすいでしょう。

 これは小学校の算数でも習う「集合」の考え方と同じです。Aという条件とBという条件があって、AとBの両方を満たしている(重なり、または交わり)のがAとBの論理積で、AかBか、(少なくとも)どちらかを満たしている(結び)のがAとBの論理和というわけです。

AとBの条件が両方とも真である状態は集合Aと集合Bの交わりで表されます。どちらかが真ならよいという状態はAとBの結びです

 プログラミングでは、論理積(AND)を「&&」で、論理和(OR)を「||」で表します。前者は一般に「アンド」と呼ばれている&記号を、後者はいわゆる縦棒(JISキーボードでは右上近く円の¥記号を「shift」キーを押して入力する)を、それぞれ2つ続けたもので、いずれも半角の記号を使います。

 どうしてこれが単独の「&」や「|」ではないのかと疑問に思われるでしょう。実は単独の「&」や「|」は、似ていてもはっきりと異なる別の演算子として使われるのです。それについては、今は紛らわしいだけなので、また別の機会に紹介します。

 論理積や論理和を使う例を示しましょう。国語と理科のテストの点数を、それぞれp1、p2という変数で表すとします。このテストでは、国語で80点以上、理科で70点以上を取った人が合格とします。この日本語は曖昧ですが、それぞれの合格点を国語と理科の両方で取った人だけが合格とすれば、論理積を使って、

(p1>=80)&&(p2>=70)

のように表せます。一方、国語と理科のどちらかで、それぞれの合格点を取れば合格とすれば、論理和を使って、

(p1>=80)||(p2>=70)

のように書くことができます。p1とp2の値をいろいろに変化させて、論理積と論理和の結果を試してみましょう。Playgroundの右側にtrueと表示されていれば合格、falseと表示されていれば不合格という意味になります。

2つの比較演算を論理演算でつなぐと、論理積と論理和を表現できます

論理演算の結果の使い道

 このような論理演算も、結果を確認しただけでは、もちろん役に立ちません。論理演算の最も有力な使い方は、その結果によってプログラムが次に実行する内容を変更することです。これをプログラムの「分岐(ぶんき)」と言います。プログラムは、分かれ道に差し掛かるたびに、そこの看板に書いてある問題を解いて(論理演算を実行して)、どちらに進むか決めているようなものです。これを延々と繰り替えしているのです。

 このような分岐を実行するための最も基本的な表現が「if文(いふぶん)」と呼ばれるものです。これはifというキーワードの後ろに真偽値を導く演算を置き、それを実行した結果が真なら、その演算の後ろにある中カッコ{}でくくった中のプログラムを実行する、偽なら実行しない。これが基本です。

 さっそく例を見てみましょう。まずscoreという変数を初期値が78の整数型として定義します。次がif文ですが、このscoreの値と、合格基準値の80を比較演算子「>」で比べています。この表現では、scoreの値が80より大きければ真となります。この場合、比較の対象が整数なので、値が81以上なら真になるというわけです。

 続く{}は、足掛け3行にまたがっていますが、プログラムの範囲(これを「ブロック」と言います)を示す{}は、このように複数行にまたがるのが普通です。その中ではprint("合格です")という命令を実行しています。

if文は、続く演算の結果が真なら、その後ろの{}の中を実行するというものです

 printというのは、もちろん「印刷する」という意味の英語からきたものですが、プリンターで印刷するというわけではなく、続く()の中身を表示するものだと思ってください。では、どこに表示するか? Playgroundの場合には、ウィンドウの底辺部分に開くことのできる「コンソール」と呼ばれる場所です。最初は表示されていませんが、左下角にある上向きの三角マークをクリックすると表示されます。そこには、確かに「合格です」と表示されているのが確認できます。

print命令の結果は、Playgroundの底辺に表示するコンソールで確認できます

 最初に初期化するscoreの値を80以下にすると、比較演算の結果が偽となるので、{}の中が実行されなくなります。その結果、コンソールには何も表示されなくなります。試してみてください。またifの後ろの演算としては、このような単純な比較だけでなく、今回の最初に出てきた論理演算を書くこともできます。それによって、より複雑な条件を調べてからプログラムを分岐させることができるのです。

次回の予定

 今回のif文には、何かが足りないような気がしませんか。そう、ifに続く演算の結果が真のときに実行する命令は指定できましたが、偽の時には何も実行できませんでした。不合格の場合には何も言ってくれないわけです。次回は、そのあたりの改善も含めて、プログラムの動作をもっとコントロールする方法を見ていきます。

mobileASCII.jp TOPページへ

mobile ASCII

Access Rankingアクセスランキング