スポンサーリンク
※サイト運営にサーバーは必須です※
~このサイトもエックスサーバーを使用しています~
goto文
goto文はラベルで指定されている箇所へ強制的に移動します。
goto ラベル名;
…中略…
ラベル名:
※注:goto ラベル名;の「;」はカンマだが、ラベル名:の「:」はコロンです。
※言語はC#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Goto03 { class Program { static void Main(string[] args) { goto step01; Console.WriteLine("step01の前"); step01: Console.WriteLine("step01の後"); } } } |
実行結果
step01の後
goto文を無造作に使うと、ソースコードの可読性を悪くするため、実際にはほとんど使われません。
goto文は到達不可能な場所へはジャンプすることはできません。
例えば、以下のコードはif(false){}の中にジャンプ先があります。
しかし、ifの中の条件式はfalseなので、絶対にif文の中は、実行されません。
そのため、以下のようなコードはビルドエラーになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Goto02 { class Program { static void Main(string[] args) { //ビルドエラーになる goto step01; if (false) { step01: Console.WriteLine("テスト"); } } } } |
goto文は、自身より前に移動することができます。
以下のようなコードは、無限ループになり、いつまでたっても処理が完了しません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Goto04 { class Program { static void Main(string[] args) { //無限ループになる step01: Console.WriteLine("テスト"); goto step01; } } } |
実行結果
テスト
テスト
テスト
テスト
……
goto文は、ネストの深いループ文を抜ける際に、有用です。
break文を使った場合は、単純にはいきません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Goto05 { class Program { static void Main(string[] args) { while (true) { while (true) { while (true) { goto step01; } } } Console.WriteLine(" step01の前"); step01: Console.WriteLine(" step01の後"); } } } |
実行結果
step01の後
関連記事
~プログラミングを勉強してみませんか?~
TechAcademy [テックアカデミー] は無料の体験講座が用意されているので、気軽に体験できます。
※私(サイト主)も無料体験講座を実際に受けてみました(→感想)