トップページ⇒tech
42コメント11KB

goto普及委員会

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/02/22(水) 20:40:23
ハァ?例外?
gotoを使うのが例外になってること自体が例外なんだよヴォケ

というわけで、どんどんプログラムにgotoを追加して行きましょう。
0002デフォルトの名無しさん2006/02/22(水) 20:42:09
goto >>1
0003デフォルトの名無しさん2006/02/22(水) 20:44:10
↓これがコードのコピーなしに、
if分岐とloopに還元できない有名な例。

A: process A;
  if (x) goto A; else goto B;

B: processB;
  goto C:
C: process C;
  goto B;
0004デフォルトの名無しさん2006/02/22(水) 20:44:29
行番号時代のことが印象に残って、goto排斥に繋がってるんだと思うけど、
構造化やオブジェクト指向はむしろgotoを使いやすい状態にしてる気がします。

変にforやwhileやif使うより見やすくなることも結構あると思う
0005デフォルトの名無しさん2006/02/22(水) 20:52:36
goto は、隠し刀
0006デフォルトの名無しさん2006/02/22(水) 21:02:52
gotoを絶対使わないと自慢してる奴に限って、
バグだらけのどうしようもないコードを書く。
0007デフォルトの名無しさん2006/02/22(水) 21:08:26
>行番号時代のことが印象に残って、goto排斥に繋がってるんだと思うけど、
つうか2ch以外で積極的なアンチgoto派って
お目にかかったことがないんだけど
0008デフォルトの名無しさん2006/02/22(水) 21:13:35
>>3
ループにできるように見えるけど
なにか解釈間違えてるかな。

do
{
processA;
}while(x);

while(true)
{
process B;
process C;
}
0009デフォルトの名無しさん2006/02/22(水) 21:19:42
>>1
委員長は後藤さんですか?
0010デフォルトの名無しさん2006/02/22(水) 21:21:45
アンチってリアルワールドでgotoに遭遇するとどういう反応を示すの?
0011デフォルトの名無しさん2006/02/22(水) 21:32:49
後藤さんですか?
0012デフォルトの名無しさん2006/02/22(水) 21:35:06
>>8

A: process A;
  if (x) goto B; else goto C;

B: processB;
  goto C:
C: process C;
  goto B;

の間違いでした…
0013デフォルトの名無しさん2006/02/22(水) 22:02:51
Javaでは使えるようになっていないわけだが。
0014デフォルトの名無しさん2006/02/22(水) 22:07:47
なけりゃないでどうにでもなるからな。
それにJavaはgotoをきれいにラップした制御構文も追加されてるし。
0015デフォルトの名無しさん2006/02/22(水) 22:32:25
>>12
これは?
ただしこれはむしろgotoを使ったほうがよいとは思うが。(もちろんprocess A直後の分岐に関して)
process A;

bool f = x ? false : true;

for (;;)
{
    if (f)
    {
        process B;
        f = true;
    }
    process C;
}
0016デフォルトの名無しさん2006/02/22(水) 22:37:04
関連スレ?
gotoを恐れず使う兵共がfinallyや多重breakを語るスレ
http://pc8.2ch.net/test/read.cgi/tech/1123726695/l50
0017デフォルトの名無しさん2006/02/22(水) 23:09:02
do{}while(); 使うよりは
label: goto label; のほうが楽だし見やすい気がする
0018デフォルトの名無しさん2006/02/23(木) 01:57:27
使わなくていいのに使うのは美しくない
使った方がいいのに使わないのも美しくない
0019デフォルトの名無しさん2006/02/23(木) 02:24:15
重複スレ伸ばすのも美しくない
0020デフォルトの名無しさん2006/02/23(木) 09:02:35
break thread;
0021デフォルトの名無しさん2006/02/23(木) 13:33:29
操作してるデータの構造や依存関係を無視して、
制御のフローだけ論じても無意味だと思うんだが。
0022デフォルトの名無しさん2006/02/23(木) 22:17:45
switch()ではよく使う

switch(x){
 case a: prefix a; goto postix_a;
 case b: prefix b; goto postix_a;
 case c: prefix c; goto postix_a;
postfix_a:
  .
  .
  .
  break;

 case d: prefix d; goto postix_d;
 case e: prefix e; goto postix_d;
 case f: prefix f; goto postix_d;
postfix_d:
  .
  .
  .
  break;
}

まぁgoto使わなくても問題なく書けるけど面倒臭がりだから
こんな風にその場で書いちゃうわ。
0023デフォルトの名無しさん2006/02/23(木) 23:14:54
>>22
それはたまにやるなあ。
手で書くなら分割するけど、簡単なソースコードジェネレータとかではそんなの吐かせたりする。
0024デフォルトの名無しさん2006/02/23(木) 23:24:26
gotoを恐れず使う兵共がfinallyや多重breakを語るスレ
http://pc8.2ch.net/test/read.cgi/tech/1123726695/l50
0025デフォルトの名無しさん2006/02/25(土) 23:23:55
>>24
面白いスレだな
20付近で爆笑
0026デフォルトの名無しさん2006/02/25(土) 23:38:31
>>15
process A;
bool f = x;
for(;;){
 if(f){
  process B;
 }
 f = true;
 process C;
}
じゃね?
0027デフォルトの名無しさん2006/02/26(日) 15:08:36
「捨てっちまおう」
「なに!?」
「こいつぁクソコードだよ。行数は多いがな」
「これが? 一部上場企業の大サーバからかっぱらったんだぞ?」
「goto文だよ」
「goto文? 幻の命令と言われるアレか」
0028デフォルトの名無しさん2006/02/26(日) 19:43:39
後藤 文(無職)
0029デフォルトの名無しさん2006/02/28(火) 13:30:04
ルパン?
0030デフォルトの名無しさん2006/03/03(金) 00:38:53
『C言語による最新アルゴリズム事典』だっけな、たしかこれに
「再燃goto文論争」という題で「プロだったらgotoが一番の解なら
もちろん使うし、その判断は的確で一瞬だ」みたいなことが書いてあって、
全体的にはなるほどと納得したんだけど、
gotoの使用例の一つに「多重break」をあげていて、
「これは関数に分けてreturnにすれば解決するが、プロは誰も
そんなことはしない」と言っているのがちょっと気になった。

for()for()if()goto; って、たぶんgoto時点での両カウンタの値が
欲しいか、またはgotoしたかどうかが欲しいわけでしょ?
だったらなんか、1関数に分離する価値もあると思うんだが。
上の本はアルゴリズム辞典だから、スピードを考えて関数化を考えてないのかも
しれないけど。
0031デフォルトの名無しさん2006/03/03(金) 04:21:24
>>30
その本の例が
> for()for()if()goto;
だったの?
こんなんなら、多分関数にすると思うけど。いい名前付けられそうだし。
ループを抜けて次のステートメントに行くだけなら、関数にするでしょ。

変形ダイクストラ探索みたいなのを非再帰でやると、枝狩りとか例外処理とかで、凝集度の観点から goto がふさわしいこともまれにあるよ。

C++ なら goto がふさわしい場面がさらに減るから、その本の状況はちょっと古いんだと思うよ。
0032デフォルトの名無しさん2006/03/03(金) 06:18:19
gotoが発生しそうだから関数分割すると言う判断は馬鹿っぽい。
gotoなんて所詮は1ブロック中で完結する物なんだから
関数とか設計・構造レベルで論じるものではない。
0033デフォルトの名無しさん2006/03/03(金) 12:43:36
>>32
>gotoが発生しそうだから関数分割すると言う判断は馬鹿っぽい。
多分 >30 が言ってるのは、
 bool match_hoge( const TABLE * , int * outx, int * outy )
に置き換えられるようなものしか、多重 break の必要のあるコードを思いつかない、ってことだと思うよ。
0034デフォルトの名無しさん2006/03/03(金) 16:12:43
アスペクト指向がやっているのってgotoの逆だよね?
0035デフォルトの名無しさん2006/03/06(月) 18:32:14
多重ループのgotoはマクロで別名使うとか工夫すればいいんじゃないの?
あとは再帰が使えない(使いたくない)状況で使うとかね。

意味のあるgotoと、無理やりなgotoは分けて考えるべきだと思う。
0036デフォルトの名無しさん2006/03/07(火) 10:14:44
無理矢理なgotoは楽しいよ!!
0037デフォルトの名無しさん2006/03/07(火) 22:35:06
書いたその瞬間だけは。
0038デフォルトの名無しさん2006/03/08(水) 14:55:00
(´・ω・`)愛がどこかへ行ってしまった。
0039デフォルトの名無しさん2006/03/08(水) 21:24:07
gotoの使い方忘れた
もっと便利なtry,catch,throwがあるし
0040デフォルトの名無しさん2006/03/08(水) 22:22:04
finallyが無かったりするのが惜しい。
0041デフォルトの名無しさん2006/03/08(水) 23:48:15
そうそう。「Better Cとか言うくせにないんだよな」と思う。
VC++なんかの__finallyはデストラクタがあるオブジェクトが内部に存在すると使えないし。
0042デフォルトの名無しさん2006/03/23(木) 11:50:38
gosub return
■ このスレッドは過去ログ倉庫に格納されています