はかせのラボ

私の頭の中を書いていく雑記ブログです

C# for文をgoto文使いながら解説していく

あいさつ

どうも、はかせです。

ちょっと前に配列についての記事を上げました。
hakase0274.hatenablog.com

配列を扱ったんだから次は配列操作にほぼ必須に近い
for文の説明をしなきゃならんだろうと思ったわけです。

ただですね。
単純for文はこんな構文でこんな機能ですよ~
っていうのを書いたとしてもそんな記事は世の中に
山ほどあるわけです。

じゃあ一体どうしようかと。
for文の理屈込みで解説すればいいのではなかろうか?

ということで今回はfor文の基礎構文から始まり、
最終的に古のgoto文クラスまで話をしていけたらと思います。

for文の使い方

言語により多少の変化はあれども
大方for文の構文はこんな感じです。

for(初期化;条件式;更新式)
{
//繰り返す処理
}

まずfor文に入ったら先頭の初期化が実行されます。
大体ここはループ回数を指定するカウンタが初期化されますね。
(もちろんそうでない場合もありますが
話を楽にするためにカウンタということで)

その後に条件式の評価がされます。
for文はこの条件式が真の間処理を繰り返します
条件式が偽になったときfor文は終了します。

その後は更新式に行きそうですが、
その前に繰り返す処理が実行されます。

処理が終了した後更新式が実行されます。
カウンタを扱っている場合は基本ここでカウンタの増減を行いますね。

その後処理はまた条件式まで戻り真偽判定から
この動きを繰り返します。

ではfor文の動きを簡単に図にしてみましょう。
f:id:hakase0274:20191107182108p:plain

なんとなく動きは掴めたでしょうか?

goto文を使ってfor文と同じ動きを作る

本題に入る前にgoto文ってなんだよってところからですね。
goto文は極めて単純で指定した行数までプログラムを飛ばす命令です。
単純ですね。

さてgoto文で作る前にどんなもの作るかをまずはfor文で

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

0~9までを順々に出力するだけです。
f:id:hakase0274:20191107184412p:plain

ではgoto文版

    goto init;

//初期化
init:
    int i = 0;
    goto condition;

//条件式
condition:
    if (i < 10)
    {
        goto excute;
    }
    else
    {
        goto end;
    }

//処理
excute:
    Console.WriteLine(i);
    goto update;

//更新式
update:
    i++;
    goto condition;

//終了
end:

さっきの図でも説明した流れを愚直にgoto文でやってみました。
goto ○○でそこにジャンプします。

これでさっきのforと全く同じ結果を出します。
実行してみましょう。
f:id:hakase0274:20191107184424p:plain

同じですね。
(頭と末の文字は違いますが何の実行結果かわかりやすくするためなので許してください)

for文はこのgoto文でやったことを内部的にやってくれているだけで
条件見て次何やるかを決めているという点では
if文とかともそんな変わらないです。
(ちなみにif文も内部はgoto的な動きをしている)

あとがき

今回はfor文の動きをgoto文使いながら解説してみました。

for文勉強し始めって<と<=を間違ったりとか
初期化を1と0で間違ったりして
自分が思った回り方をしないことがあったりします。

そういう時はこんな感じで低レベルな原理まで
落として考えてみるとわかりやすいのではないでしょうか?

今回の記事が良ければスターやコメント等よろしくお願いします。
それでは今回はこの辺でノシ