2022年01月11日
川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!total 278 count

goto文: 悪魔の誘惑か最後の希望か

Written By: 川俣 晶連絡先

この章のテーマ §

 goto文について学びます。goto文の乱用は禁物ですが、これがないと上手く書けないケースがあります。

前提知識 §

Console.WriteLineメソッド, 変数の基礎, 条件演算子, int型, for文

解説 §

 goto文は、プログラムの実行位置を指定したラベルの場所まで飛ばします。

 たとえば、break文は1つのループからの強制脱出を可能としますが、ネストしたループからは出られません。しかし、goto文なら出られます。

 書式は"goto ラベル名;"です。ラベルは、"ラベル名:"です。

罠の数々 §

  • goto文は無い方が良いのか、あった方が良いのかのgoto論争が存在するが、C言語風の構文を持った多くのプログラミング言語にgoto文は存在する。C#にもある
  • 存在しても使わない人、利用を禁止する人も多い
  • C#のgotoは、C言語のgotoよりもずっと制約が厳しく危険性はずっと少ないが、しばしば"goto=悪"と思い込んだ正義の戦士から攻撃される
  • gotoで他のメソッドには移動できない。また、ループから出ることはできるが、ループに入ることはできない
  • 一般的に、goto抜きで簡単に書ける処理はgoto抜きで書いた方が良い。しかし、希にgoto抜きではエレガントに書けないケースがある。たまに見かけて慌てないために知っておくと良い

参考リンク §

goto ステートメント

サンプルソース: kw_goto §

for (int x = 0; x < 10; x++)

{

    for (int y = 0; y < 10; y++)

    {

        Console.Write($"x={x},y={y} ");

        if (x * y > 20) goto exitLabel;

    }

}

// 以下の1行は永遠に実行されない

Console.WriteLine("Loop End");

// 以下の1行はexitLabelという名前のラベル

exitLabel:

Console.WriteLine("Done");

実行結果 §

x=0,y=0 x=0,y=1 x=0,y=2 x=0,y=3 x=0,y=4 x=0,y=5 x=0,y=6 x=0,y=7 x=0,y=8 x=0,y=9 x=1,y=0 x=1,y=1 x=1,y=2 x=1,y=3 x=1,y=4 x=1,y=5 x=1,y=6 x=1,y=7 x=1,y=8 x=1,y=9 x=2,y=0 x=2,y=1 x=2,y=2 x=2,y=3 x=2,y=4 x=2,y=5 x=2,y=6 x=2,y=7 x=2,y=8 x=2,y=9 x=3,y=0 x=3,y=1 x=3,y=2 x=3,y=3 x=3,y=4 x=3,y=5 x=3,y=6 x=3,y=7 Done

リポジトリ §

https://github.com/autumn009/CSharpPrimer2

練習問題 §

 以下のプログラムの実行結果を予測してみよう。

goto label;

int a = 1;

label:

Console.WriteLine(a);

  1. 0
  2. 1
  3. コンパイルエラー
  4. 実行時例外

[[解答]]

Facebook

COOL C# CREW Series

キーワード【 川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!
【new_C#入門・全キーワード明快解説!】の次のコンテンツ
2022年
01月
12日
class: 参照型を自作できる魔法のキーワード!
3days 4 count
total 292 count
【new_C#入門・全キーワード明快解説!】の前のコンテンツ
2022年
01月
10日
yield: 列挙可能なメソッドを自作しよう
3days 2 count
total 299 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20220111095831
サイトの表紙【new_C#入門・全キーワード明快解説!】の表紙【new_C#入門・全キーワード明快解説!】のコンテンツ全リスト 【new_C#入門・全キーワード明快解説!】の入手全リスト 【new_C#入門・全キーワード明快解説!】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.