007. ループを使ってみよう

過去のブログのアーカイブ
この記事は前身のブログのアーカイブを引き継いだものです. 画像が正しく表示できないなど,コンテンツの表示に問題がある恐れがあります.

パソコンを使っている時に何回も似たような操作を何度もしたことありませんか?こんな簡単な操作なんだから機械がいっきにガーっとやってくれたら早いのに…
プログラミングではループを使えば簡単に同じことを繰り返せれます!

まずは基本的なループを押さえよう!

まず簡単なループのやり方には3種類あります。そこまで複雑なものではないので確実に覚えましょう。

forループ

forループの特徴は、ループの始めの命令、ループを回すたびに呼び出す命令、続けるかの条件式の3つを指定することにあります。
d11
まず1つ注意点があります。それぞれの文/式の区切りはコンマではなく、セミコロンで行います。ここ注意!
そして、この文は全て省略することができます。省略する際もセミコロンは必須です。
それでは例を見てみましょう。

for (int i = 0; i < 10; i++ ) {
    Console.WriteLine( i );
}

コンソールに0から9までの数値を出す命令です。
命令される順番をたどると

  1. int i = 0;
  2. i < 10;  つまりtrue
  3. { }の中の命令を実行する
  4. i++; つまりiの数値を1プラスしてiに格納するのでiは1になる
  5. i < 10 つまりtrue
  6. { }の中の命令を実行する
  7. i++; を実行してiが2になる
  8. i < 10 つまりtrue
  9. …以下繰り返し

そして、{ }の中が合計10回繰り返された後…

  • i++; を実行してiが10になる
  • i < 10 つまりfalse
  • ループを抜ける

といった流れになるのです。
このfor文の形は○○回同じ命令をするといったことに利用されます。ここで注意するのは10回繰り返す時、iの数値は1から10ではなく、0から9まで増えていきます。
また、まず条件を判定してからループを実行します。なので最初から条件式がfalseなら、中身は一度もループされずに抜けることになるのです。

応用

条件式は省略することができます。その際は常にtrueと仮定されます。

for (int i = 0; ; i++) {
    Console.WriteLine(i);
}

0から無限に数字が1ずつ増えてコンソールに数値が表示される命令です。
ループを抜ける手段が書かれていないので無限ループとなります。
また、初期化文やステップ文も省略可能です。意図的に無限ループを作成することも可能です。

for (; ; ) {
    // なにかしらの命令
}

このような書き方になります。

whileループ

このループはfor文のシンプルな形とも言えます。forの条件式だけしかないバージョンと言いますか、そんな感じです。
d12
いたってシンプルです。条件式だけしかありません。
こちらも最初から条件式がfalseなら、一度もループが実行されることなく飛ばされます。

応用編

こちらは条件式を省略することはできません。無限ループを作成したい場合はtrueをそのまま指定してあげればいいのです。

while (true) {
    // なにかしらの命令
}

do-whileループ

こちらは条件式で判定するタイミングが後回しになっただけです。必ず1回はループが実行される特徴にあります。
d13
このように、doの直後にブロック({と}で囲まれた命令)が実行され、そのあとに条件式で判定されます。

応用

こちらの条件敷きは省略することができません。無限ループを作りたい場合はtrueを指定してあげればいいだけです。

do {
    // なにかしらの命令
} while (true)

ただし、こちらはwhile (true) { } と動作が全く同じです。むしろ、下にスクロールしてwhile(true)を見つけるまで、このループが無限ループだとは気づかないのは厄介です。なので、このループで無限ループを作成するのは絶対にやめましょう。

まとめ

とりあえずforとwhileとdo-whileを覚えれば基本的なループは制覇したことになります!

余談

ここで終了というわけにはいきません。最近のプログラミングの特徴としては、なにかしらのループで統一するという流れがあります。
forやwhileなど、ループの書き方が複数あるとごちゃごちゃになってしまう!というお怒りの声が多いのです。
私の意見としては、forにできることはwhileにもできる。初期化文とステップ文を省略すればいいだけじゃん。と思っています。
世の中にはwhile派とfor派といった派閥に分かれてしまっているという現状があるのです。
正直こんなこと気にする必要はないのですが、プログラミングする上ではどちらか1つに絞って使った方がいいでしょう。

他のループの仕方(応用編)

さて、ループはforやwhileを使う以外にも様々な方法があります。今回は再帰という方法とgoto文を使った方法を紹介します。

再帰を使ってループをする

さて、この方法が使われることは割と珍しいのですが、たまに見かけるので紹介しておきます。(正直、使わなければいいなら使わないでください)

public void Test() {
    Test();
}

このように、メソッドの中から自分自身のメソッドを呼び出すことでループを実現することができます。

goto文を使う方法

goto文の使い方自体、このプログラミング入門の記事では紹介していませんね。goto文を使う方法は昔はよく使われていましたが、時代が流れるとともに読みづらいという理由から敬遠されてきています。
goto文を使う方法でもループを実現することはできるのですが、できるだけ使わないようにしましょう。

    int i = 0;
Label:
    i++;
    Console.WriteLine( i );
    goto Label;

goto文とは、ラベルというというものを指定して、goto [ラベル名];と指定することで、そのラベルに飛ぶことができるという命令です。
しかし、ラベルがどこにあるか探す必要が出てくるという理由から、goto文は敬遠されています。
プログラムの書き方次第ではgoto文を使う必要はありません。この方法でループを書く練習をしたところで使うことも見かけることもないでしょうし、使ってそのコードを他人に見られたら白い目で見られるだけです。やめましょう。