7
今日も僕は喫茶店で授業を受けている。
ちなみに、今日はレモン味のログインボーナスをもらった。
「私、前に"プログラムは川の流れのように進む"と言ったわね。
でも、川が分かれていても、プログラムは二股の両方に進むわけにはいかないんだ」
そう言いながら、ことり先輩は開口一番よく分からない話題を切り出した。
「君、こないだ風邪ひいたって言ったよね」
ああ、確かに。
学校から帰っている間に喉の痛みと熱が出たんだ。数日間学校を休むことになって、このように喫茶店で教えてもらうのも随分久しぶりだった。
「熱があるから休む、喉が痛いからのど飴を舐める。この、何々だからどうのって言うのが<条件分岐>だよ」
なるほど。
面白い話の掴み方をしてくるものだ。
「この間でいうところの"ボタンを押したら"って言うところだね」
ことり先輩はこう言いながら電卓の処理イメージを少し直してくれた。
*───────────────────
int result; //計算結果のメモリを用意する
イコールボタンを押すまで繰り返し:
if (button1.Click = true) //1のボタンが押されたら
result = result + 1; //メモリに 1 が加算される
if (button2.Click = true) //2のボタンが押されたら
result = result + 2; //メモリに 2 が加算される
...
Print result; //メモリに格納されている計算結果を表示する
────────────────────
ifからはじまる一文が、条件分岐において処理の流れを分ける記述のひとつだ。
まず、条件が正しいかどうかを判定する必要がある。
「君が風邪をひいているかどうか、とか。
まだ未成年とか、今日が木曜日とか」
日常生活の中に身近な判定する条件があるのだという。その結果が合っていれば"true"、合っていなければ"false"となってしまう。
ここでいえば"button1.Click"、つまり数字のボタンが押されていたらtrueと判定される。次の処理である"メモリに1が加算される"が実行されるという訳だ。
「ボタンに限らずだけどね、なにかの判定をしたいときに使うんだよ」
それを聞いてテストの点数から成績を決めるのに使えそうに思った。
「そうだね、良く出てくる題材だよ。
あとトランプが絵柄かだったらって言うと、10以上かどうか。
ちなみに、三連単かどうかを考える時には馬の順位を3種類チェックしなきゃだね」
それは高校生らしい競技ではない気がするのだが。
「つまり、色んな判定の方法があるってことだよ。
今みたいに並べるのも良いし、複数を重ねるように書くこともできます」
彼女はアイスコーヒーを飲みながら、開いた片手をこちらに見せてきた。こちらを見て、にこっと笑っている。
「......その例が、ジャンケンだよ」
*───────────────────
//プレイヤーの手を数値で表す(0:グー,1:チョキ,2:パー)
int hand_pre1;
int hand_pre2;
//入力処理(省略)
if (hand_pre1 = 0)
if (hand_pre2 = 0)
print "あいこ"
elseif (hand_pre2 = 1)
print "プレイヤー1の勝ち"
elseif (hand_pre2 = 2)
print "プレイヤー1の負け"
elseif (hand_pre1 = 1)
...
elseif (hand_pre1 = 2)
...
────────────────────
ことり先輩は新しいコードを書いてくれた。色々複雑になっている。
彼女に促されるように指でたどってみた。プレイヤー1の手を表した変数hand_pre1が0の時は、つまりグーだ。その後プレイヤー2の手であるhand_pre2をチェックして、そちらも0ならあいこにたどり着くわけだ。
「君が言ってくれたように、プログラムもひとつひとつチェックをするんだ。
この例だと、プレイヤー1がどの手なのかを最初に見るんだ。
0か、1か、2か。まずその判定が行われる。
次はプレイヤー2のチェックだよ」
こうやって深掘りするように処理が行われる。これを<ネスト>というのだ。
「質問なんですけど、この"elseif"っていうのも判定なのでしょうか」
「そうだよ。一回勝負なんだから、グーかチョキかパーしか出せないじゃない?
それなのに、グーを出しているのにチョキを出したと判定される可能性がある。
それは問題あることだよね」
彼女の言っていることがよく分からない。僕は首を捻った。
「......ifとelseが一緒に書く必要があるのは、"そのうちのどれかひとつだけの判定に絞り込みたい"ときに使うんだ」
分かるよね。こういう彼女の言い回しに、僕は首を縦に振った。
「もし、プレイヤー1がグーを出したら。
その時の処理はグーで進めて、相手の手を判定すれば良いだけなんだ。
それに続くチョキかパーはチェックしなくても良いのに判定しなきゃいけない。
それは無駄足を踏ませてしまう」
なるほど。
書き方はやはり大事なんだ、良いことを教えてもらった。
・・・
僕は雑談交じりにあるひとつの質問をしてみた。先ほどの絞り込みたい質問に関してみたのだ。
「この先生活していく中で、なにかひとつのアイスクリームしか食べられないとしたらどうしますか?」
「面白いことを聞くねえ」
彼女は目を丸くしている。
少し考えるような表情になって、バニラか抹茶か......。などとぶつぶつ呟いている。その表情は本気のものだ。もう気になって仕方ないのだろう。
「ベリーチーズケーキ!」
「なんですか、そのメニューは」
彼女の回答につい声を高くして答えてしまった。駅前のアイスクリーム屋でしょう、と言われてもよく分からない。それでも、彼女が甘い味付けが好みなのはよく分かった。
少しくすくすと笑って、彼女は新しい話題を提供してくれる。
「もうひとつ、条件分岐に沿っている仕組みがあるよ」
ちょっと書いてみるね、といって彼女は先ほどのプログラムを直してくれた。
*───────────────────
//プレイヤーの手を数値で表す(0:グー,1:チョキ,2:パー)
int hand_pre1;
int hand_pre2;
//入力処理(省略)
switch(hand_pre1) //プレイヤー1の値を判定する
case 0:
print "あいこ"
elseif (hand_pre2 = 1)
print "プレイヤー1の勝ち"
elseif (hand_pre2 = 2)
print "プレイヤー1の負け"
case 1:
...
case 2:
...
────────────────────
「これを"case文"って言うんだ。
switchの時点で今現在設定されている hand_pre1 の値を判定してくれる。
その後で、値に即した case のところに処理が移るんだ」
なんだか感心したい気持ちになった。これだとswitchと書かれた最初の時点で何をしたいかが分かる気がする。
「コードを上から見ていってもさ。
switchが出てきたら、その中のcaseのどれかを選ぶんだなって分かりやすいんだよ」
私の好きな書き方だね、そう言いながら彼女はアイスコーヒーを飲み干した。
その自信あふれた表情がなんだかおもしろかった。
・・・
もう少し暗くなっている時間帯だった。
ことり先輩と別れてひとり歩いている。
喉が渇いてきたので目の前にあるコンビニに入ってみた。すると、中には絵里が居たのだ。
僕たちは適当な挨拶をすると、彼女がのど飴を手にしていることに気づく。
「まだ治らないの?」
「そうなの、放送部の当番なのに上手く喋れなくて」
彼女は眉をハの字に曲げて、困った表情を見せた。
まるで、ことり先輩との会話が映し出されたようだった。僕はついくすくす笑ってしまう。
「な、何が可笑しいのよ」
困り果てる絵里をよそに、僕の頭の中でこんなコードが生まれたからだ。
*───────────────────
if (喉が痛い)
のど飴をなめる
if (治ったかどうか)
無事生活を送る!
else
のど飴をなめる //←今ここ
────────────────────
プログラムの題材を、身近な生活で見つけるのは楽しいことだろう。
今日は奥深い分岐について知ることができた日だった。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます