2020年7月22日からGoToキャンペーンが開催されました。
コロナ感染者がどんどん増えているっていうのにね。
僕はどこにも出かける予定が無いのでGoToキャンペーンなんか関係ないけれど
GoTo…話題ですもんね 乗るしかない このビッグウェーブに!
でも自粛しなきゃね。
ということで、プログラミング言語のgoto文でGoToしてみようじゃあないか。
無限ループ(禍)から脱出だ!
goto文とは…
プログラミング言語におけるgoto文(ゴートゥぶん、英: goto statement)とは、手続き列中の指定された場所(専らラベルで指定される)に無条件にジャンプ(移動)する、という制御構造のひとつである
goto文 – Wikipedia
最近のプログラミング言語ではgoto文が使えるものは少ない。
流れが分かりづらくなるから多用しちゃダメ。というか、ほぼ使ったことが無い。
goto文が使えるgoto文の花嫁達
- ・BASIC
- ・FORTRAN
- ・C
- ・C#
- ・PHP5.3以降
- ・Go
- ・番外編 Python
他にもまだ出会っていない花嫁がいると思うが、とりあえず思いついたものだけ。
Dockerで環境が作れるものをいくつか試してみました。
C
gotoといえばC言語!おなじみC言語だ。全然なじみ無いんですけどね。
#include <stdio.h>
int main()
{
int i = 1;
while(1)
{
if (i > 100) {
goto TROUBLE;
}
i += 1;
}
TROUBLE:
puts("GoToキャンペーン");
return 0;
}
cc -o main main.c
./main
GoToキャンペーン
出ました!GoToキャンペーン!
C#
C言語の後継C#も、もちろんgotoできますね。
using System;
class GoTo
{
static void Main()
{
int i=1;
while (true) {
if (i > 100) {
goto Trouble;
}
i++;
}
Trouble:
Console.WriteLine("GoToキャンペーン");
}
}
dotnet run
GoToキャンペーン
はい、出ました!GoToキャンペーン!
PHP
PHPはPHP5.3からgotoが使えるようになっています。
<?php
$i = 1;
while(true) {
if ($i > 100) {
goto Trouble;
}
$i++;
}
Trouble:
echo "GoToキャンペーン\n";
php index.php
GoToキャンペーン
またまたGoToキャンペーンしてやったぜ!
Go
お気に入りのGo言語。
色んな構文を削ぎ落としたはずなのに何故かgotoができる謎。GoogleのGoだもんね、しょーがないよね。
package main
import "fmt"
func main() {
var i int = 1
for {
if i > 100 {
goto トラブル
}
i++
}
トラブル:
fmt.Println("GoToキャンペーン")
}
go run main.go
GoToキャンペーン
もうおなかいっぱい GoToキャンペーン。
番外編 Python
Pythonでもgotoが存在はしているが、2004年エイプリルフールのジョークモジュールだそうで、実運用には使っちゃダメよって。
The “goto” module was an April Fool’s joke, published on 1st April 2004. Yes, it works, but it’s a joke nevertheless. Please don’t use it in real code!
entrian.com – goto for Python – Download
from goto import goto, label
def main():
i = 1
while(True):
if i > 100:
goto .trouble
i += 1
label .trouble
print("GoToキャンペーン")
if __name__ == "__main__":
main()
このコードでできるとは思うけど、gotoモジュールがエラーで実行できませんでしたヽ(´ー`)ノ
Python3.8.5だからか?Python2.7.17でも試したけどだめだった。
直して実行する気もないのでこれで終わりとします。
色んな言語のgoto文で色んなところに出かけた気分になりました。なったんです。。
十分にマイGoToキャンペーンを堪能したので連休はしっかり自粛しよう。