条件分岐コード 4. 階段を上がる条件を探す

if文の扱いがなんとなく掴めてきたところで、少し詳しい説明が出てきます。
ブール値(ぶーるち、と読みます)というキーワードが登場です。英語ならBool値と書きます。追々登場する変数というものの形の一種なのですが、ここではYesかNoで答えられる疑問文のようなものと思って下さい。例えば、「Is this a pen?(これはペンですか?)」という疑問文は基本的に「はい」か「いいえ」の二択(=ブール値)で答えられます。一方「What is your name?(あなたの名前はなんですか?)」という疑問文は「はい」「いいえ」では答えられません。if文が分岐の条件に扱えるのは前者の「はい」「いいえ」で答えられる内容だけなのです。そしてプログラミングの世界では、この「はい」「いいえ」をそれぞれ「true」「false」と表現します。日本語では「真」「偽」ともいいます。与えられた疑問(条件)が肯定される(成り立つ)時をtrue、否定される(成り立たない)時はfalseと呼びます。

ステージを眺めていきましょう。らせん状のルートを進んで宝石を4つ取ります。ステージは固定なので、「3歩進んで左に曲がり、4歩進んでまた左に…」というコードを書いていってもゴールできます。しかしこのステージではif文を使って解く必要があります。ステップ1の指示に従って、if文の条件にisOnGemを書いたのが下のコードです(//でコメント文を追加してあります)

「宝石があった時になにかをし、それ以外の時は一歩進む」のを16回繰り返す、ということになります。その「なにか」を追加しなければなりません。さて、なにかとはなんでしょう?
宝石があったらやることは大抵決まっていますね。そしてもうひとつマップの最後まで辿り着くまでにしなければならないことがあります。ステージを眺めて考えてみてください。

正解例はこちら。

前のステージではif文の後にelse ifというものがでてきました。今回は単なるelseです。似ているようで違うこの2つを整理しておきましょう。

まずは単なるelseの時。これがif文の基本形です。

if文から連なる一連の}が閉じた後の書かれたものは、もはやif文の関係ないので、条件文のtrue/falseに関係なく常に実行されます。{}で囲んでいる範囲に注目しましょう。
falseの場合に特にすることがない場合はまるっと省略してこう書くこともできます。

次にelse ifを使う場合。

条件(疑問)が2段階になるわけですね。もちろんこの場合も最後のelse以降が必要ない場合は省略できます。
注意して欲しいのは、前ステージで疑問を投げかけた、「else ifではなくifを2つ並べた時」との違いです。

この場合は、3行目の}でAを条件にしたif文は終了していますので、続くB条件のif文には関係しません。else ifでつなぐか新しいif文をはじめるかで動きが違ってくるので注意しましょう。

さらにいうと、if文のtrueやfalseのブロック({}に挟まれた部分)に更に別のif文を書くなんてこともあります。慣れないとちょっとこんがらがってきますね(笑)。

これらの使い分けは追々実際に活用しながら身についていくので、いまは「{}で囲む範囲が重要」と憶えておくくらいで大丈夫です。

改善希望!役に立った! (+2 rating, 4 votes)
読み込み中...

“条件分岐コード 4. 階段を上がる条件を探す” への2件の返信

    1. 遅くなってすいません。もう解決済みかもしれませんが、この{~}のループは「ジェムの上ならとる、それ以外なら進む」という処理をセットで繰り返しています。なので、マスを進む以外の行動(宝石をとって左を向く)をした場合も1回のカウントになります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です