forとforeachとwhereのこと
最初にプログラムを作り始めたのは、9年前。
まず苦手だったのが、繰り返し処理だった。
そもそも日常生活には繰り返し処理というのがあまりない。
毎日ご飯を食べるのは、繰り返し処理のひとつだけど、タームが長く毎回違うことなので、繰り返し的な要素が少ない。
幼稚園なんかで「はーい集まって~、おやつあげるね~、はい、はい」って配るのは繰り返し処理だと思うけれど、日常的にはそういうことは少ない。大人数を集めるなんて機会はほとんどない。イベントの受付をする機会もまずないし。
そんなわけで、そもそも繰り返し処理という考え方になじまなかった。
それでも、そういうものだと思うと、foreachでめいめいに処理する、というのは、比較的すんなり入ってきた。
for
その次の壁がforだった。foreachでは「みんなひとつずつね」という処理で、みんなもひとつずつも匿名的ないい方で済むのだが、forだと全部をカウントする必要がある。
このforのカウントが0からスタートするのか1からスタートするのか、それはもうまったくそれぞれ別個なので、そのたびに考えなければならない。まあ使い慣れてくると、細かく指定できるようになるので、それはそれで役にたつと思うけれども。たとえば25からスタートして、43までとかをカウントするのには、たしかに便利ではある。
でも、スタートもわからないし、エンドもわかりにくい。<を使うか<=を使うかでエンドが変わるわけで。<ならend-1、<=ならendでよい。見た目的には、-1しなくてよい<=endのほうがずっと好みだけれど、forの例文で<=を使うことはまれのようでぜんぜん少ない。
数学は数IIIまでとっていたので、まあそれほど苦手ではないと思うけれど、それにしても-1はないほうがわかりやすいと思う。
増えるのもむずかしい。++って田んぼみたいで。1ずつ増えるときには使うけど、2ずつ増えるときには使えないのかどうなのか。そのあたりもよくわからない。結局2ずつ増えるときにはどうしたらよいかまだ知らない。
where
そうこうしていると、.Whereがいいと聞いた。
Whereはifなので、「どこ」を連想しているうちには、ぜんぜんちんぷんかんぷんだった。
でも、たぶん100回くらい見ているうちに、使い慣れてきた。今日なんて、すらっと.Where( => )とか書いていて、おお自分すごい、みたいな気持ちになった。たぶんWhereで「どこ」を連想するのではなくて、Whereは関係代名詞的な条件だよと連想するようになったので、使えるようになったのだと思う。
これで、foreachとforとwhereを使えるようになった。