こんにちは。プログラミングを挫折したこと数知れなめがねの谷口(@khtax16)です。
プログラミング的には超重要な制御構文であるらしいfor文。
(同じ処理を繰り返せるやつ)
ただ、
「ほうほう、繰り返せるのね。わかるわかる」
と役割についてはわかっても、「じゃあお前書け」と言われて書こうとしてみると、for文の中をどう書いていいか思い出せない ということはありませんか?
ありますね。
ありますものとして強引に推し進めてまいります。
私のようなfor文がいまいち理解できない 初心者のための記事 であり、かつ個人的な理解のための備忘録ではありますが、なんとなく自分がこんな整理をしたら頭に思い浮かぶようになったため、忘れないうちにそれをまとめておきたいと思います。
上級者、あるいは「for文ごときでつまずくかよww」国の国民はそっとおかえりください。出口はあっちです。そうそう肥溜めに腰までつかってまっすぐ進んだところ。くっさ。
目次
プログラミングの重要な制御構文「for文」を覚えるための整理のしかた
プログラミングに関するブログだと、ふつうコードを埋め込むと思いますが、今回私がしたいのは「概念の説明」であるため、あえて画像貼り付けでいきます。
(特にコードのコピペは必要ない)
あと、私がいま勉強しているのはGAS(Google Apps Script)であるため、その記述がもとになっています。
まず、for文についての説明として、
for ( 初期化式; 条件式; 増減式 ) {
// 条件式がtrueの間、実行される処理
}
という構成になっています。
(末尾のGAS本参照)
GASでの例文をあげると、
for (var i = 1; i <= 5; i++) {
Logger.log(i);
}
という感じ。
これを実行すると、ログに1から5までの数字が出力されます。
下の画像の右下のイメージです。
(あくまでイメージです。ログは実際の表示からだいぶ省いてます)
で、私が咆哮したいのが
「初期化式とか条件式とか言われてもよくわかんねえよぉ!!」
という点です。
それぞれの式の役割を日本語の文章にしてみる
何度もプログラミングを挫折してきた私のごときプログラミング不適格くそめがねからしてみると、
「初期化式って、どんな役割だっけ?」
「iを書くのは覚えてるんだけど、そのあとどうするんだっけ?」
など、結局何を書けばいいのか覚えられない ≒ だから「書け」と言われても書けない、という問題が初心者にはある気がしています。
そこで私がしたのが、意味合いを頭の中で日本語の文章にしてみること、でした。
具体的には以下の画像のような感じです。
(まだ不正確なので、もっと追求できる気がしているのですが、言葉にできない。「このほうがわかりやすくない?」というご意見お待ちしています)
言葉にも起こすと、
- 初期化式 ⇒ 何からはじめる?
- 条件式 ⇒ いつ終える?
- 増減式 ⇒ 1ずつ増やす? 減らす? それ以外?
という感じです。
一応さらにそれぞれ解説加えます。
for文の初期化式とは 何からはじめる?
まず初期化式。
for文のカウント用変数には「i」「j」「k」を使うのが一般的らしいので、変数を宣言する「var」と組み合わせて「var i」はほぼ鉄板 です
では「i」に何を代入するかですが、これは「1」とか「2」(1行目に見出しがある場合)が比較的多いのではないでしょうか。
つまり、初期化式を書こうとするとき、
「1からはじめんの? 2からはじめんの? それともそれ以外からはじめんの?」
と「よく使われる基準」とともに自分への問いかけを覚えておくことで、私は思い浮かびやすくなりました。
for文の条件式とは いつ終える?
次の条件式。
正確に説明するなら、どうも「この条件を満たす間は繰り返す」といったことのようです。
これで覚えられる方はもちろんそれでいいのですが、私はマジプログラミング不適格くそめがねなので、いまひとつ腹に落ちていませんでした。
で、その対応策として、
「いつ終えるの?」
という問いかけに変えたらわりと思い浮かぶようになりました。
上記例文の場合だと、「5に達したら終わりにしよう」と言い換える感じです。
スプレッドシートの操作の場合、「i <= lastRow」みたいに最終行までつづける処理は多そうですが(lastRow変数を定義したあと)、これはつまり、「最終行に達したら終わり」という意味だととらえます。
for文の増減式とは 1ずつ増やす? 減らす? それ以外?
最後の増減式です。
私は一番これが覚えやすかったです。
おそらく、GASで最もメジャーな増減式は「i++」ではないでしょうか。
(わからんがそういうことにしておく)
これはつまり、「iを1ずつ増やす」ことを意味しています。
省略せずに書くなら、「i = i + 1」となります。
逆に、大きい数字から1ずつ減らしていきたい場合は「i- -」です。
こちらも省略せずに書くなら、「i = i – 1」となります。
基本はこの「i++」と「i- -」の2つで、もし2つずつ増やしたい場合は「i += 2」などのアレンジをしていくことで対応できます。
(「i = i + 2」の意味です)
なので、この増減式の言い換えとして、
「1ずつ増やす? 減らす? それともそれ以外?」
と、「よく使われる基準」と「問いかけ」をセットで覚えることで、私は思い浮かびやすくなりました。
おさらいと全体像
すみません、for文の{ }の中のtrueの場合の処理については、いまのところそこまで覚えるのに難儀しなかったため省略しています。
ただ、あえて理解に時間がかかった点を挙げるなら、「あくまで繰り返したい処理を{ }の中に置くこと」でしょうか。
繰り返しをしなくていい処理なら、forの前か後に書いてあげなくてはいけません。
以上をまとめ、改めて図にするとこんな感じ↓
こういう言葉に変換するようになってから、「あ、あれを書けばいいんだな」というのが思い浮かぶようになりました。
以上、簡単ではございますがfor文の理解のための文章化でした!
おわりに
ということで、for文をわかりやすく理解するための方法(めがね式)でした。
改めて書くと、
- 初期化式 ⇒ 何からはじめる?
- 条件式 ⇒ いつ終える?
- 増減式 ⇒ 1ずつ増やす? 減らす? それ以外?
に言い換える感じです。
プログラミングを勉強するにあたって、私はもともとPyQやProgateで写経をしていたことはあったのですが、
「表示されたものを書いているだけじゃ理解ができない」
という問題をずっと抱えていました。
その後、下のGAS講座に参加し、この「こういうつくりになってるのか!」がわかるようになって、だいぶ理解が進んだ気がします。
(なお、PyQやProgateはとてもよいサービスだと思います。私のふがいなさの問題)
現在、わたくし下のGAS本の著者であるタカハシさんが主催されている『ノンプログラマーのためのスキルアップ研究会』に所属し、そちらのGAS初級講座にて2020年1月22日から1カ月半程度勉強中です。
明後日のオブジェクトの勉強が山らしいので、更新が途絶えたら「散ったか・・・・」と思ってください。
がんばるぞ!
「役に立った!」「ニヤニヤした」など、もし「こいつ応援してやろうかな」という菩薩のごときお心が芽生えましたら、Amazonか楽天でお買い物するときに、下のリンクを踏んでからお買い物をしていただけますと私にジュース代なんぞが入ります。とても嬉しい。(なぜかメガネの検索画面が出てきますが無視してお好きなものを!)
▷Amazonでお買い物
▷楽天市場でお買い物