恋に落ちるコード.js

@8am

情報処理部活動報告

#1 恋に落ちるループ -While I'm falling in love-

絵子えこ、キャンディを10個あげるわ」

「ほえ。ありがと」


 放課後、情報処理部の部室。

 中央の事務机には、篠宮樹里しのみやじゅり瀬尾絵子せのおえこの二人の部員。

 決してお菓子片手に無駄話をしているわけではない。立派な部活動の最中だ。


「今から絵子にキャンディを10個あげるというメソッドを実行するよ」

「え、なんでそこ言い直したの」

「まあまあ」


 そう言って、樹里がおもむろに鞄の中から取り出したのは、まさかの巨大な指輪型キャンディ。それが次から次へと。


「……どこで売ってるの? これ」

「では、このメソッドが終了する条件はなんだろう」

「スルーですか……そりゃ、10個あげるって言ってるから、10個もらったら終わり、だよねえ」

「その通り。では実行するから、条件式がfalseになったらループから抜けてくれたまえ」

「10数えたらストップって言う、ってことね。わかった」


 樹里は、絵子の目の前に指輪型キャンディをごろんごろんと並べていく。

「いち、に、さん……」

 絵子はそれを目で追いながら、律儀に一個ずつ数える。そして。


「……ストップ。10個もらったよ。ありがと」

 というと同時に、ピンク色のキャンディを取り、包装紙を破ろうとした。

「待った」

 樹里は右手の掌を絵子の目の前に大きく突き出す。

「まだ食べてはいけない」

「えー」

「絵子は今、なんの根拠をもって、条件式が偽になったと思ったの」

「そりゃ、10数えてたから……」

「それだよ」


 と言うなり、樹里は部の備品であるMacBookを引き寄せ、テキストエディタに何やら入力し始めた。


----

var candy = 0;

for (var i = 0; i < 10; i++) {

 candy = candy + 1;

}

----


「今の絵子の行動をJavaScriptで表現すると、こうなる」

 と、MacBookの画面を絵子の方に向ける。


「この1行目のcandyていう変数が、実際のキャンディの数だ」

「そーね」

「で、2行目のfor文。左から初期化式、継続の条件となる式、ループが一回りするごとに実行される式を指定している」

 と、セミコロンで区切られた3つの式を、トラックパッドでなぞって反転させながら説明する。

「そーね」

「で、iってのが、さっき絵子が数えてた数字ね。いわば、絵子の心のカウンターなわけだ」

「ふむふむ」

「最初に心のカウンターをゼロにして、心のカウンターが10未満の間、心のカウンターを1ずつ増やしたわけよね」

「樹里、『心のカウンター』って言いたいだけなんじゃ」

「じゃあ、iでもいいよ。まずiをゼロにして」

「アイをゼロにする、ってなんか悲しくなる響きね。そこはかとなく」

「……そこは本題じゃないからとりあえず置いといて」

 樹里はMacBookを自分の方に向け直す。


「キャンディを10個数えるために、わざわざ別の、絵子の心のカウンターでも10を数えているわけだな」

「んー、そうなるのかな」

「これって、人としてどうだろう」

「え。人格を疑われてんの、私。今」

「せっかくキャンディという数えやすい形状のものがあるのだ」

 樹里はキャンディの一つをつまみ上げ、光に透かすように眺める。

「それを、ダイレクトに数えればいい、と私は思うわけだよ」

「ほー」

 絵子はこくこくと頷く。

「言わんとすることはわかるよ。人としてどうか、は心外だけど」

「では、心のカウンターを使わずに、ダイレクトにキャンディを数えるように書き直すと、こうなる」


----

var candy = 0;

for (; candy < 10;) {

 candy = candy + 1;

}

----


「なんか、あんまり見たことない書き方ね」

「少なくとも、初心者向けの書籍には出てこない。かなり変態的な書き方だと思う」

「その言い方はいろいろ波紋を呼ぶわ」

「じゃあ、東京の人間が無理して関西弁を喋ってる感じとか」

「最悪ね。変態だわ」

 と言いながら、絵子はキャンディの包装を手早く破って左手薬指に装着し、樹里が止める前に口に放り込んだ。

「あーあ。まだ食べちゃダメって言ったのに……まあ書き方はともかく、余計な変数が出てくることはなくなった」

「じゃあじゃあ、最初のコードみたいにさ」

 とここまで言うと、絵子はキャンディを咥えたまま指を抜き、MacBookを自分の方に向けてカチャカチャとタイプした。


----

for (var candy = 0; candy < 10;) {

 candy = candy + 1;

}

----


「ほおは……こう書いちゃダメなの?」

「いや、こう書いても間違いじゃないし、今回のコードなら同じ結果になる。ただ、変数をループの外で宣言するのには、それなりに意味があって……ま、それについては次の機会にしよう」

「ふーん」

「で、こういう場合は、while文を使ってこう書くのが一般的だ」


----

var candy = 0;

while (candy < 10) {

 candy = candy + 1;

}

----


「whileってのは『何々してる間』って意味。だからこう書くと、『キャンディが10個未満の間は繰り返す』という条件がより明確になる。かなりエレガントな書き方だと思うが」

「でもさー」

 そう言うと絵子は、机の上にあるキャンディを全部一箇所に集める。

「これって結局、ループが一回りするごとにキャンディの数をいちいち数えてるわけよね? 10個ならまあ一目でわかるけど、たとえば500個とかだったら辛くない? なんか非効率的な気もしない?」

「大丈夫。私が絵子に500個もの物品をあげることなどない」

「え」

「そもそも数を数えるのは機械だから、心配する必要などない」

「……なんだろう、このハシゴ外された感」

「まあこれは、そもそもどっちの書き方が優れてる、とか、どっちが間違ってる、とかそう言う話ではないけどね」

「あー、聞いたことあるよ。そう言う宗教論争みたいなやつ。キノコとタケノコみたいな」

「ただ、よりシンプルな記述で、より正確に意図を伝えられる表現ができる、ということはいろんな場面で役に立つ、と思う」

「小説書くときにも有効だよねー」

「そうだね。さて、他に質問は?」

「……元々、私から何か質問してた覚えはないんだけど……」

 べっとべとになった左手を樹里に向け、絵子は苦笑いしながらこう言った。

「……とりあえず、ウェットティッシュ、ない?」

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援した人

ビューワー設定

文字サイズ

背景色

フォント

一部のAndroid端末では
フォント設定が反映されません。

応援の気持ちを届けよう

カクヨムに登録すると作者に思いを届けられます。ぜひ応援してください。

アカウントをお持ちの方はログイン

フォロー機能を活用しよう

カクヨムに登録して、気になる小説の更新を逃さずチェック!

アカウントをお持ちの方はログイン

フォロー機能を活用しよう

カクヨムに登録して、お気に入り作者の活動を追いかけよう!