@IT情報マネジメント会議室は、2009年4月15日に新システムに移行しました。
新たに書き込みを行う場合には、新しい会議室をご利用ください。
新たに書き込みを行う場合には、新しい会議室をご利用ください。
- @IT情報マネジメント 会議室 Indexリンク
- IT戦略
- 仕事の改善
- アーキテクチャ
- プロジェクト管理
- ITインフラ
- Webマーケティング
- BPMプロフェッショナル
- 業務アプリ
- - PR -
なぜ「GOTO文」を使っては、いけないのですか?
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-04-23 12:11
unibon です。こんにちわ。
For や Do/Loop などは、制御構造のためのデザインパターンとかフレームワークに相当するのではないでしょうか。で、それらを使わずにGOTO文を使うのは、パターンやフレームワークの存在を無視することに相当するような感じだと思います。 とくに、使用の有無が混在している状況はとっても良くないのではないでしょうか。制御をGOTO文(とせいぜい IF 〜 GOTO文)だけを使って書くのならまだマシかもしれません。 | ||||||||
|
投稿日時: 2004-04-23 12:33
> なぜ、いけないのですか? シリーズ第2段です。
シリーズ化おめでとうございます(?) えっと、前回のグローバル変数の時も思ったのですが・・・ ”○○を使用しては、いけない”となると大抵は”例外がある”とか”使用してもいい”という ということになると思います。 「○○を”安易に”使用しては、いけない」ということになると、使うときに何を考慮すれば良いのか?という方向に誘導できるのかなと・・・ で、GOTO文を安易に使われると(最近はみかけませんが) 1.制御フローが追いかけづらい 2.ソースを読む気がしない 3.メンテンナンスできない(メンテナンスする気になれない) という結果が待っているのかと・・・ ラフィンさんのGOTOの使い方は”安易”でなく、”周到”な使い方だと思います。 [ メッセージ編集済み 編集者: tak3 編集日時 2004-04-23 12:38 ] | ||||||||
|
投稿日時: 2004-04-23 12:36
え?
「本物のプログラマはGOTOを使うことを恐れない」と言われていますが # 冗談はともかく、longjmpとかどうなんだ、とか。 | ||||||||
|
投稿日時: 2004-04-23 12:56
ですね(笑) 「痒いところはかかないとしょーがない」レベルです。 | ||||||||
|
投稿日時: 2004-04-23 12:57
ワシの若いころはのぅ。FORTRAN Wなんてぇ言語があっての。IF文があるにはあったんじゃが、IFの中に書ける文は1つだけだったんじゃ。もちろんELSEなんてもんもなくてのぅ。ループ処理はDO〜CONTINUEだけで、こんな言語仕様ではGOTO文なしではプログラムは作りようがなかったんじゃ。 今の若ェもんは、GOTOを一度も使わんでプログラムを作るそうじゃが、そんなことでなにがプログラマーじゃ。日本を背負って立つプログラマーになりたいなら、今からでも入門し直して、GOTOプログラムの道を極めるのじゃ!ゲホゲホゲホ・・・ #でへへへ間違えました。×FOR ○DO でした。 [ メッセージ編集済み 編集者: たーぞう 編集日時 2004-04-23 14:58 ] | ||||||||
|
投稿日時: 2004-04-23 13:00
確か「GOTO文を使ってはいけない」というのが、公然と広まったのはBasicが広まった
ころだったと思います。 古いBasicの場合、行番号を付けてコーディングしないといけなかったんです。 で、大抵は後での追加等を考えて、10番飛ばしで行を発生させていました。 1000 処理 1010 IF 〜 Then 〜 1020 処理 1030 IF 〜 Then GOTO 1010 1040 ここに追加が入り、 1000 処理 1002 A=A+1 1003 B=B+1 1010 IF 〜 Then 〜 1020 処理 1030 IF 〜 Then GOTO 1010 1040 という風に入れるわけですが、この後にも1002と1003の間に追加があるかもしれない、 ということと、どうも見た目にスッキリしないということで、Renumberというコマンド を発行すると、また10番飛ばしで番号を発生させてました。ですが、Verやバグ(という か仕様)で、行番号は振りなおしてくれても、Then GOTO の後の行番号はそのままに なっている場合もあって... 1000 処理 1010 A=A+1 1020 B=B+1 1030 IF 〜 Then 〜 1040 処理 1050 IF 〜 Then GOTO 1010 1060 とこうなってしまったりして、グチャグチャになってしまったりしていたんです。 なので、「GOTO 行番号 は使うな」ということが広まったんでしょう。 新しい言語では、ラベルへのGOTOができたり、GOTOそのものが無かったりするので こんなことにはならないと思いますが、ルーツ的にはこんなところにあるように思う のです。 ただ、割り込みや全くプロセスを切り替えなければならない場合、GOTOを使わざる を得ない事もありますね。(使わないようにもできるけど、構造から全部変えないと いけないとか...) ※余談ですが、GOTOってなんでGO TO じゃないんでしょうねぇ? 昔、作ったプログラムソースを印刷して、人にチェックしてもらった際、返された ソースにいたるところに赤ペンでGOTO、GOTOって指摘された覚えがあります。 どこへGOTOすればよいか散々悩んでもわからなかったので、チェックした人に 「教えてください」って聞きにいったところ、実はそれはこのチェックした人 (後藤さん)のサインだったのでした。 | ||||||||
|
投稿日時: 2004-04-23 13:07
NAL-6295です。
一概には言えないかもしれませんが・・・ 例外を除いた通常処理でGOTO文使わないといけない状況になったら、「リファクタリングしろ。」のサインかもしれません。 不吉な匂いって奴です。 | ||||||||
|
投稿日時: 2004-04-23 13:18
使ってよろしいです! 私が許可します。 アイ アム ソリー^^ _________________ |