@IT情報マネジメント会議室は、2009年4月15日に新システムに移行しました。
新たに書き込みを行う場合には、新しい会議室をご利用ください。
- PR -

なぜ「GOTO文」を使っては、いけないのですか?

投稿者投稿内容
たーぞう
ぬし
会議室デビュー日: 2003/08/08
投稿数: 317
お住まい・勤務地: お花畑
投稿日時: 2004-11-27 10:50
引用:

ほろりんさんの書き込み (2004-11-27 10:31) より:
そのうち、えー大工さんとか言ったかのう、順次・反復・分岐だけでプログラムができるいいだしてのう、そのうちIF THEN ELSE ENDという構造ができて喜んじゃものじゃ。


おじいちゃん、IF THEN ELSE ENDIFだったと思うよ、FORTRAN77では。
ほろりん
ベテラン
会議室デビュー日: 2004/11/24
投稿数: 98
お住まい・勤務地: あそこ
投稿日時: 2004-11-27 11:13
引用:

おじいちゃん、IF THEN ELSE ENDIFだったと思うよ、FORTRAN77では。


えー。なんだってー。耳がとおくなってのう。もう一度大きな声で言っておくれ。
引用:

おーじーいーちゃーん、IF THEN ELSE ENDIF なんだよー。FORTRAN77じゃ。


そうか、if () {}else{}だったかのう。
引用:

ちーがーう。IF THEN ELSE ENDIFだってばー。


そうか、そうか、遠い昔のことじゃて。わしももうろくしたものじゃ。
[/quote] ←--もうろくの証

[ メッセージ編集済み 編集者: ほろりん 編集日時 2004-11-27 11:14 ]
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2004-11-27 13:14
ども、ほむらです。

同じく、終わった話であれですけれど。
GOTO文はカーソル位置よりも先にある場所へ飛ぶ分には
無理やりな構造化をするよりも読みやすいですよね。

最近の言語はbreakとかcontinueにラベルを指定できるので
使わなくなっているのも確かですけど。
関数の中でエラー処理を統一したいときなどは
まだGOTO文に変わる仕様が無いですねぇ。
これが出来ればGOTO文はほんと使わない遺物になりそうな予感はするのですけれど。。

構造化を強調している人に一言。
お願いだから計画的に構造化してください。。。
関数とか使って構造化するのはいいけどクラスなどでファイル単位で飛ばれると
スパゲティじゃないけどジグソーパズルなプログラムでよけいタチ悪いっす(涙
(リファタリングも同様)
よっちゃん
大ベテラン
会議室デビュー日: 2004/02/15
投稿数: 117
お住まい・勤務地: 千葉の片田舎
投稿日時: 2004-12-04 13:11
ここで言っている「GO TO」文って
アセンブラーのJUMP命令も含むんでしょうか?
アセンブラーも構造化マクロというのも
昔有りましたが。
Uchikoshi
@ITエディタ
会議室デビュー日: 2001/07/27
投稿数: 197
投稿日時: 2004-12-04 15:00
引用:

よっちゃんさんの書き込み (2004-12-04 13:11) より:
ここで言っている「GO TO」文って
アセンブラーのJUMP命令も含むんでしょうか?
アセンブラーも構造化マクロというのも
昔有りましたが。



 もともとGOTO文有害論は、以下の論文(というより意見書?)に基づいていますが、

・「Go To Statement Considered Harmful」by Edsger W. Dijkstra
http://www.acm.org/classics/oct95/
(36年も前のACMの論文です)

そこでは、

 …… the go to statement should be abolished from all "higher level" programming languages

となっていて、高級言語に限定しています。マシン語レベルではどうぞお使いください、みたいなことも書かれています。実際そうだと思いますし。

 当時は、GOTOに代わる構文もまだ言語にはあまり実装されていなかったので、このような論文が書かれていたようですが、今となっては、ちょっと事情が違うのではないかと思います(この衝撃的なタイトルのおかげで、ずいぶんと有名になりましたが)。

 GOTO文を多用すると、プログラムの流れを追いにくくなるので(あくまでも、後でプログラムを追う場合からの視点に基づいているようです)、その使用は避けるべきというのがこの論文の概要かと思いますが、現在の高級言語には、この論文のおかげか、さまざまな制御構文が用意されているので、goto文をあまり使わなくてもすむようになっています。

 個人的には、やはり、同一レベル(同一ブロック)内でのGOTOや、外側のレベルへのGOTOは、ほかに代替構文がない言語の場合には、使ってもいいんじゃないかなと思ってます(コメントをどう付けるかなどは別問題として)。が、さすがに関数の外まで(スタックフレームのアンワインドが必要になるようなレベル)までGOTOで飛ぶのはどうかと思いますが(確かPascalなどではこのようなGOTO文が使用できたと思う)、例外構文などが用意されている現在の言語では、このような用途でのGOTOもほとんど必要ないでしょうね。
よっちゃん
大ベテラン
会議室デビュー日: 2004/02/15
投稿数: 117
お住まい・勤務地: 千葉の片田舎
投稿日時: 2004-12-10 07:21
引用:
Uchikoshiさんの書き込み (2004-12-04 15:00) より:

 もともとGOTO文有害論は、以下の論文(というより意見書?)に基づいていますが、

・「Go To Statement Considered Harmful」by Edsger W. Dijkstra
http://www.acm.org/classics/oct95/
(36年も前のACMの論文です)

そこでは、

 …… the go to statement should be abolished from all "higher level" programming languages

となっていて、高級言語に限定しています。マシン語レベルではどうぞお使いください、みたいなことも書かれています。実際そうだと思いますし。


随分、昔のことですが、とても気になっていました。
アセンブラーは対象外だったわけですか。
あるお客様に常駐でシステムメンテナンスで作業していた頃
「GO TO less」が話題になりまして
新し好きのお客様の一人が、プログラム修正の話をしました。
正常に動作しているプログラムの修正の怖さや
マクロ展開によるコードの冗長性を主張して
止めて貰ったことがあります。

不安だったのですが、良かったんだ。  

ありがとう、ございます。
guion
常連さん
会議室デビュー日: 2004/12/24
投稿数: 30
投稿日時: 2004-12-25 20:27
お邪魔します。

引用:

ほむらさんの書き込み (2004-11-27 13:14) より:
関数の中でエラー処理を統一したいときなどは
まだGOTO文に変わる仕様が無いですねぇ。
これが出来ればGOTO文はほんと使わない遺物になりそうな予感はするのですけれど。。



例外クラスの使い分け…じゃダメですね(^^;

うーん。クラスによって区別される例外と似たような感じで、
コンテキストによって区別された例外ってなものが有ると
便利なのかな、と、今ふと思いました。

引用:

関数とか使って構造化するのはいいけどクラスなどでファイル単位で飛ばれると
スパゲティじゃないけどジグソーパズルなプログラムでよけいタチ悪いっす(涙



タグジャンプ機能つきのテキストエディタは必須
ってことで、どーっすか?(^^;

個人的にはvimを愛用していますが、
タグジャンプ機能つきでしたら
どれであっても役立つと思います。

タグジャンプが出来れば、
処理の続き(のソース)がファイルを超えるかどうかなんて、
もう気にならなくなります。
Jun
大ベテラン
会議室デビュー日: 2003/08/25
投稿数: 141
投稿日時: 2005-12-16 15:12
goto 文についての論議が今頃あるなんて懐かしいですね

個人的にはgoto文の弊害より,そういうことが一旦言われると必ず
杓子定規にルールを作ろうとする人が現れることの方が怖いですな

goto文に限らず今のオブジェクト指向の世界でもばかげたルールが
日々作られているんじゃ無いかと思うんだが

スキルアップ/キャリアアップ(JOB@IT)