カテゴリ: C# 更新日: 2026/01/25

C#のgoto文の使い方と注意点!ジャンプ構文を理解しよう

C#のgoto文の使い方と注意点!ジャンプ構文を理解しよう
C#のgoto文の使い方と注意点!ジャンプ構文を理解しよう

先生と生徒の会話形式で理解しよう

生徒

「C#でプログラムの途中から別の場所にジャンプすることってできますか?」

先生

「はい、C#ではgoto文を使うと、指定したラベルの位置に処理をジャンプさせることができます。」

生徒

「ジャンプって何か難しそうですね……どんな時に使うんですか?」

先生

「それでは、goto文の使い方や注意点を、初心者の方にもわかりやすく説明していきましょう!」

1. goto文とは?

1. goto文とは?
1. goto文とは?

C#のgoto文は、プログラムの中で指定したラベルの場所へ処理の流れをジャンプさせる構文です。「ジャンプ構文」とも呼ばれます。

たとえば、ある条件が満たされたときに、すぐに別の処理へ移動したい場合に使われます。ラベルとは、ジャンプ先の目印となる名前で、:(コロン)をつけて定義します。

2. goto文の基本的な使い方

2. goto文の基本的な使い方
2. goto文の基本的な使い方

まずは、簡単なgoto文のサンプルコードを見てみましょう。特定の条件を満たすと、指定されたラベルにジャンプします。


using System;

class Program
{
    static void Main()
    {
        int number = 3;

        if (number == 3)
        {
            goto JumpHere;
        }

        Console.WriteLine("この行はスキップされます。");

    JumpHere:
        Console.WriteLine("ここにジャンプしてきました!");
    }
}

この例では、変数numberが3のとき、goto JumpHere;によってJumpHere:というラベルの位置へジャンプします。


ここにジャンプしてきました!

3. goto文を使うときの注意点

3. goto文を使うときの注意点
3. goto文を使うときの注意点

goto文はとても強力ですが、使い方には注意が必要です。なぜなら、ジャンプを多用するとプログラムの流れが複雑になり、コードが読みにくくなるからです。

このようなコードのことを「スパゲッティコード」と呼びます。文字通り、処理の流れがごちゃごちゃに絡まってしまうという意味です。

そのため、goto文はできるだけ避け、代わりにif文switch文ループ構文(for、while、foreachなど)を使って処理を記述するのが一般的です。

4. ループの中でgotoを使う例

4. ループの中でgotoを使う例
4. ループの中でgotoを使う例

gotoはループの中で条件によって途中で抜けるような処理にも使えますが、通常はbreakcontinueを使う方が自然です。

とはいえ、参考のためにgotoを使ったループ処理を紹介します。


using System;

class Program
{
    static void Main()
    {
        int i = 0;

    StartLoop:
        if (i >= 5)
            goto End;

        Console.WriteLine("i = " + i);
        i++;
        goto StartLoop;

    End:
        Console.WriteLine("ループを抜けました。");
    }
}

i = 0
i = 1
i = 2
i = 3
i = 4
ループを抜けました。

このようにgotoだけでループを作ることもできますが、whileforを使った方が分かりやすく安全です。

5. goto文の使用を避けるための代替方法

5. goto文の使用を避けるための代替方法
5. goto文の使用を避けるための代替方法

goto文を使いたくなる場面は、主に以下のような場合です。

  • ネストが深い処理から一気に抜けたいとき
  • エラーハンドリングや一部の特別な処理をしたいとき

しかし、それらの多くは、関数化することで読みやすく、再利用しやすくできます。たとえば、処理を小さなメソッドに分けると、ジャンプせずに処理の流れを明確に保てます。

また、if文で早めにreturnする書き方をすれば、無理にgotoで飛ばす必要もなくなります。

6. どうしても使いたいときのポイント

6. どうしても使いたいときのポイント
6. どうしても使いたいときのポイント

どうしてもgoto文を使わなければならない場面があるときは、以下のポイントを守りましょう。

  • ジャンプ先のラベル名は、意味のある分かりやすい名前にする
  • 短い範囲で使い、他のコードに影響を与えないようにする
  • ドキュメントやコメントをしっかり残して、なぜ使ったのか理由を書く

これらを意識することで、gotoを使ったとしても、最低限の可読性を保つことができます。

まとめ

まとめ
まとめ

C#のgoto文は、特定のラベルに処理をジャンプさせることで、プログラムの実行フローを自在に操作できる便利な構文です。ただし、その強力さゆえに、使い方を誤るとプログラムが読みにくくなり、保守性が下がってしまうリスクも伴います。この記事では、gotoの基本的な使い方、ループ内での利用例、避けるべき理由、代替手段、そしてどうしても使用する際のポイントについて丁寧に解説してきました。

実際の開発現場では、goto文は滅多に登場しません。なぜなら、forwhileといったループ構文、ifswitchによる条件分岐、return文による早期リターンといった機能が充実しており、ジャンプによる処理制御の必要性が薄れているからです。構造化された読みやすいコードを書くことが重視される現代のプログラミングでは、gotoの出番は非常に限定的です。

それでも、たとえば複雑なネスト構造から脱出したいときや、エラー処理を一箇所にまとめたいときなど、慎重に設計された場面ではgotoが選択肢になることもあります。その際は、処理の見通しが悪くならないよう、ラベル名に意味を持たせるジャンプの距離を短く保つ使用理由をコメントで残すといった工夫が大切です。

具体例:エラーチェック後にまとめて処理終了


void ProcessData(string input)
{
    if (string.IsNullOrEmpty(input))
    {
        Console.WriteLine("入力が空です。");
        goto End;
    }

    if (input.Length < 5)
    {
        Console.WriteLine("文字数が足りません。");
        goto End;
    }

    Console.WriteLine("データ処理中...");
    // 実際の処理がここに入る

End:
    Console.WriteLine("処理終了。");
}

このように、複数の条件によるエラーチェック後に、共通の終了処理へジャンプすることで、コードの重複を防ぎつつスッキリとまとめることもできます。ただし、ジャンプの回数や範囲が増えると混乱の元になるため、慎重な設計が必要です。

goto文の使用判断ポイント

  • ネストが深く、複雑なif構造を整理したいとき
  • エラーハンドリングを一箇所にまとめたいとき
  • 既存コードとの互換性を保ちたいとき(レガシーコードの修正など)

ただし、こうした目的であっても、まずはreturnによる早期リターンや、try-catch-finallyの活用、処理の関数分割などを検討するのが基本方針です。

まとめ:goto文は最後の手段

C#のgotoは確かに便利な機能ですが、構造化プログラミングの観点から見ると、コードの読みやすさや安全性を犠牲にする可能性が高いため、どうしても必要な場面でのみ使用するのが鉄則です。現代のプログラム設計では、他の構文や関数の組み合わせで、同じ処理をより明確に表現する方法がたくさんあります。gotoを使わずにスマートなコードが書けるようになることは、C#プログラマーとしての大きな成長につながるでしょう。

先生と生徒の振り返り会話

生徒

「gotoって最初は便利そうに見えましたけど、使いすぎるとコードがぐちゃぐちゃになりそうですね。」

先生

「そのとおり。goto文は強力ですが、ジャンプ先が多くなるとプログラムの流れが追いづらくなってしまいます。」

生徒

「なるべくなら、if文とかreturnを使って整理したほうがよさそうですね。」

先生

「うん、普段は構造化されたコードを意識して書くのが一番です。ただ、どうしてもgotoが必要なときは、ラベル名やジャンプ範囲に注意すれば最小限の混乱で済ませられますよ。」

生徒

「なるほど。便利そうだけど、使いどころをちゃんと見極めるってことですね!」

先生

「その意識があれば、gotoに頼りすぎず、読みやすくて安全なコードが書けるようになりますよ。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

C#のgoto文とは何ですか?ジャンプ構文ってどういう意味ですか?

C#のgoto文は、プログラムの中で指定したラベルの位置に処理をジャンプさせるための構文です。ジャンプ構文とは、処理の流れを強制的に他の場所へ移動させる命令を意味します。
カテゴリの一覧へ
新着記事
New1
C#
C#のメモリ管理とガーベジコレクションの基礎を理解しよう
New2
C#
C#の参照型と値型の違いを初心者向けにやさしく解説!
New3
C#
C#のクエリ式とメソッド式の書き換え方を完全ガイド!LINQの2つの書き方をマスター
New4
C#
C#の戻り値にタプルを使う方法!複数の値を返すテクニック
人気記事
No.1
Java&Spring記事人気No1
C#
C#で文字列が数値か判定する方法を解説!char.IsDigitやTryParseの基本
No.2
Java&Spring記事人気No2
C#
C#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法
No.3
Java&Spring記事人気No3
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.4
Java&Spring記事人気No4
C#
C#のrefとoutキーワードとは?引数の参照渡しを理解しよう
No.5
Java&Spring記事人気No5
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.6
Java&Spring記事人気No6
C#
C#の引数と戻り値の基本!値を受け渡し・返す仕組みを理解しよう
No.7
Java&Spring記事人気No7
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説
No.8
Java&Spring記事人気No8
C#
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方