[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 12/22 04:06 / Filesize : 243 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

gotoを恐れず使う兵共がfinallyや多重breakを語るスレ



1 名前:デフォルトの名無しさん [2005/08/11(木) 11:18:15 ]
前スレ pc8.2ch.net/test/read.cgi/tech/1021364372/

92 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 23:20:51 ]
    if (flag)
        goto N0021;
    return;

N0021:
    〜

こういうコードならつい最近見た。Fortran から C に単純変換したものらしい。
こういうのがいたるところに orz

93 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 23:37:24 ]
>>92
実行形式から逆コンパイルした結果も
それと同様に goto だらけになったりするんだろうなぁ。

94 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 19:48:06 ]
>>89
では今度からきちんと指名 (無料) するように。

95 名前:デフォルトの名無しさん mailto:sage [2006/09/06(水) 08:55:10 ]
コンパイル済みの汗ソース見ればくだらない議論と気付くはずw

96 名前:デフォルトの名無しさん mailto:sage [2006/09/06(水) 20:08:23 ]
ちうか、わざわざ高級言語つって読み書きしやすい制御構文を用意しているのに、
それを破壊するような使い方をするなっていうのがgotoは悪派の主張なわけで、
機械語に落ちれば全部jmpだろってのはあんまり関係ないよな。

まあ、機械語レベルのjmp命令がif等の制御構文と同等のレベルで
読み書きできるような人間にゃgotoだろうがforだろうが関係ないのかもしれんが、
そうじゃない人もいるんでそういう人も思いやってくれよということで。

97 名前:デフォルトの名無しさん mailto:sage [2006/09/28(木) 07:51:36 ]
1.gotoはどんな事があっても絶対使うな!
2.gotoはなるべく使わない方がいい

初心者に教えるなら1の方が正しいと思う。

98 名前:デフォルトの名無しさん mailto:sage [2006/09/28(木) 08:24:30 ]
ちなみに俺自身がどの程度使っているか調べてみたら、
92年ごろこんな事やってた。

// ポートからマウス移動量を取得
outp(0x7fdd,0x80);goto L1;
L1: x1 =inp(0x7fd9)&0xf;
outp(0x7fdd,0xa0);goto L2;
L2: x1+=(inp(0x7fd9)&0xf)<<4;
outp(0x7fdd,0xc0);goto L3;
L3: y1 =inp(0x7fd9)&0xf;
outp(0x7fdd,0xe0);goto L4;
L4: y1+=(inp(0x7fd9)&0xf)<<4;
outp(0x7fdd,0);goto L5;
L5: wark =inp(0x7fd9);

pc98のコードだが、今となってはよく分からん。
見ての通り組み込みに近い処理なので、こういうウェイトが
必要な場合もあったんだろうな、たぶん。


99 名前:デフォルトの名無しさん mailto:sage [2006/09/28(木) 19:48:42 ]
ジャンプ系の命令を挟んで数clockをwaitするってこと…なのか?
要するにnop代わりにgotoを使ったと…結構アレげだな

100 名前:98 mailto:sage [2006/09/28(木) 20:20:07 ]
>ジャンプ系の命令を挟んで数clockをwaitするってこと…なのか?

たぶん、そういう事をやりたかったのだと思う。
gotoはCで書けるけど、nopはasmブロックで書かなくてはならないので
gotoを選択したんじゃないかねー。「念のため」的なコードは書かない
主義なので、このgotoが無ければ動かない機種があったのだとは思う。
14〜15年前の若かりし日のコードなんで詳しい事は思い出せないなw



101 名前:デフォルトの名無しさん mailto:sage [2006/09/28(木) 23:28:51 ]
>>100
約15年前のキミに言っておきたい。
そのコードにはコメントを入れておけとw

102 名前:デフォルトの名無しさん mailto:sage [2006/09/28(木) 23:29:29 ]
おっと、もちろん、goto使用理由に関するコメントな。

103 名前:デフォルトの名無しさん mailto:sage [2006/09/29(金) 00:27:57 ]
最近のコンパイラだと、最適化で消される悪寒・・・

104 名前:98 mailto:sage [2006/09/29(金) 00:49:32 ]
>そのコードにはコメントを入れておけとw
まったくもってそうかも知れない。。。

ちなみに別な所はこんな感じ

// マウス割り込みを許可する
void pascal MOUSE::_enable()
{
asm pushf
disable();
setvect(MOUSE_VECT,MOUSE::main); // ベクタの更新
outp(0x7fdf,0x93); // マウスモードセット
int a = inp(0x0a) & 0xdf; // 8259A(スレーブ)読みだし
outp(0x0a,a); // マウス割り込み許可(8259A)
goto w1;
w1: outp(0x7fdf,0x08); // マウス割り込み許可(8255A)
goto w2;
w2: asm popf
}

これだけマメにコメント入れているのに問題のgotoだけ何のコメントも
入ってないのは一体。。。。orz



105 名前:デフォルトの名無しさん mailto:sage [2006/09/29(金) 06:52:14 ]
自信の有無か、切羽詰ってたのか、或いは煮詰まっていたのか。

106 名前:デフォルトの名無しさん mailto:sage [2006/09/29(金) 23:52:01 ]
>>104
マジックナンバー(0x7fdfとか)に対するコメントはgoodだが、
「ベクタの更新」はコメント要らない気がする。
ていうか、だからgotoにコメント入れろとw

107 名前:デフォルトの名無しさん mailto:sage [2006/09/30(土) 02:16:48 ]
goto を入れるまでも無いくらい、自然で当然な行為だったんでわ。

108 名前:デフォルトの名無しさん mailto:sage [2006/09/30(土) 02:17:28 ]
goto を、じゃなくてコメントを、だった。
酔ってるんで許してくれ。

109 名前:デフォルトの名無しさん mailto:sage [2006/09/30(土) 02:21:43 ]
nopするだけのasmブロックをマクロで定義した方が良かったと思われる。

110 名前:デフォルトの名無しさん [2006/12/01(金) 12:12:09 ]
gotoを恐れなく使うのなら、finallyやbreakなんてヌルい物じゃなく、
gotoより強力な継続をバリバリに活用する方法を語るべきだろ。



111 名前:デフォルトの名無しさん [2006/12/01(金) 12:34:53 ]
ま、要するに使う側にとっては多少CPU時間が変わろうが仕様通り動けば良いわけだから
個人で開発するぶんには、完全に好みと言うか主観なわけで。


112 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 10:41:09 ]
それは議論の対象外だろ

113 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 22:52:44 ]
個人的に、breakとか使わなくてもifとgotoで事足りるんだが。

114 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 15:34:12 ]
そりゃ、そうだろ…

115 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 15:46:17 ]
プリフェッチの関係でnopではなくjmp shortを使わないとウエイトにならないとかでしょ?
当時のPC98ではそれが普通だったっつーか俺が覚えてるくらいだから広まってはいたんじゃないか

116 名前:デフォルトの名無しさん mailto:sage [2006/12/25(月) 13:40:26 ]
これまで何度も言われてきたことだけど
「個人で開発するぶんには・・・」とか「***で事足りるから***は不要」とか
無意味だとは思わんかね?

117 名前:デフォルトの名無しさん mailto:sage [2006/12/25(月) 14:15:25 ]
andとnotとorとgotoで事足りるから制御構造は不要

118 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 00:36:01 ]
nand さえあれば、andもnotもorも不要なんじゃなかったっけ?

119 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 15:51:00 ]
最終的にはチューリングマシン云々とかマシン語云々に行き着くんだろうな

120 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 00:38:20 ]
>>119
フルアセンブラで組むのはさすがにバカ→C言語を使う俺、最高→いやいやC++使いの俺、最高→(以下略



121 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 01:11:44 ]
プログラマを顎で使うクライアントの俺、最高

122 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 06:34:33 ]
作業に見合うだけのお金を払ってくれるならな。

123 名前:デフォルトの名無しさん mailto:sage [2007/01/02(火) 20:09:15 ]
>>81と似たケースなんだけど
if(A){
 if(B){
  procX;
 } else {
  procY;
 }
} else {
 procY;
}

ってなってたら判断回数を増やさずにprocYを
一箇所だけにしたい場合、

if(A){
 if(B){
  procX;
 } else {
  goto _Y;
 }
} else {
_Y:
 procY;
}

って書く以外にある?


124 名前:デフォルトの名無しさん mailto:sage [2007/01/02(火) 20:28:59 ]
if (A && B){
  procX;
} else {
  procY;
}
じゃいけないの?

125 名前:デフォルトの名無しさん mailto:sage [2007/01/02(火) 20:55:36 ]
それじゃプログラムが変わってしまう。

126 名前:デフォルトの名無しさん mailto:sage [2007/01/02(火) 20:58:39 ]
あれ、ぼけてたかも…

127 名前:デフォルトの名無しさん mailto:sage [2007/01/02(火) 21:07:49 ]
>>123
すげー
gotoは絶対禁止ってルール作った方がいいよw

128 名前:デフォルトの名無しさん mailto:sage [2007/01/02(火) 21:20:41 ]
>>125
特に変わってないように見えるんだけど

129 名前:デフォルトの名無しさん mailto:sage [2007/01/02(火) 22:20:23 ]
>>128
>>126

130 名前:デフォルトの名無しさん mailto:sage [2007/01/02(火) 22:22:59 ]
だいたいgoto無くて困った事ないなw



131 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 19:40:17 ]
>>129
ああそうか、 >>125=>>126 なのか。
>>124=>126 だと思ってた

132 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 20:01:01 ]
(A && B && (procX || 1)) || procY;
ネタ提供

133 名前:デフォルトの名無しさん mailto:sage [2007/01/04(木) 20:07:36 ]
自分はこんなくだらないことでgotoを使う/使わないなどと悩むことはしないよ。

134 名前:デフォルトの名無しさん mailto:sage [2007/01/04(木) 21:43:08 ]
悩むまでもなくgotoを使うということか

135 名前:デフォルトの名無しさん mailto:sage [2007/01/04(木) 21:49:00 ]
goto眼中無しだろ普通

136 名前:133 mailto:sage [2007/01/04(木) 22:00:10 ]
>>134
当然noだ。
故意に曲解していないか?
>>135 yes

137 名前:デフォルトの名無しさん mailto:sage [2007/01/04(木) 22:17:01 ]
134 はギャグで言っただけだろう

138 名前:デフォルトの名無しさん mailto:sage [2007/01/04(木) 22:33:01 ]
はいはいthrowthrow

139 名前:デフォルトの名無しさん mailto:sage [2007/01/04(木) 23:21:51 ]
しかしcatch

140 名前:デフォルトの名無しさん mailto:sage [2007/01/04(木) 23:23:35 ]
しかしgotoの嫌われっぷりも、相当なもんだよな
実際多少gotoつかったぐらいじゃ、可読性など落ちはしない
可読性を決める要因は、goto文の有無とは殆ど関係ないところにあるのにな

C++でgoto使うと、gotoでコンストラクタすっ飛ばすんじゃねえ
とか、コンパイラに怒られたりするな
goto文はなかなか教育的だ



141 名前:デフォルトの名無しさん mailto:sage [2007/01/04(木) 23:35:33 ]
使うシーンが思い浮かばん
使わなきゃならない、もしくは使ったほうがいい場合が思い浮かばん
もっともJava使ってんだけどJavaにはgotoって無いよね?

142 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 01:10:07 ]
残念ながらJavaはgotoをサポートしていない。

143 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 01:23:31 ]
特に残念でもないw

144 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 01:25:25 ]
まぁ、Java は goto なんか使わせたら速攻でスパゲッティなコードを書くようなプログラマを対象にした言語だからな。

145 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 01:27:06 ]
kwsk

146 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 01:33:27 ]
このコマンドをいれると自動で玉が出る
goto

ゴト行為はやめましょう

147 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 01:36:05 ]
>>145
詳しくもなにもそのまんまなだけ。Javaが現代COBOLだとか言われているのって聞いたことない?
"普通のプログラマはまともに使いこせない"という理由で他にも元ネタの言語であるC++からtemplateなどを排除し、
メモリ管理ひとつまともにできないプログラマの為にGCを標準装備したりしている。

148 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 01:37:48 ]
>>147
そういえばそういうコードはよく見るなw

149 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 11:29:43 ]
>>144
実際には goto なくてもスパゲッティ作れる人が大量投入されてる。
(そうじゃない人も多数いるけど。まぁどの言語もなんだが。)

150 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 11:50:03 ]
Javaでmainに全コードベタ書きするスタイルを採用したらgotoが必要になると思うぞ。



151 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 12:02:54 ]
Dr.goto

152 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 21:53:43 ]
手続き指向言語(?)にはgoto欲しいかもね

153 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 17:24:39 ]
>>83
それだと評価順が変わるのでいいのか?
>>85
あとにコードが続いてたらreturnはまずい気が。

154 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 17:51:23 ]
>>147
詳しくのニュアンスに違和感を覚えるのは俺だけではないはずだ

155 名前:デフォルトの名無しさん [2007/01/06(土) 18:46:18 ]
>>154
IT土方の現代コボラーさん、いらっしゃ〜い。
まぁ、IT土方なんて沢山いるから、違和感を覚えたのは君だけじゃないよ、きっと、うん。

156 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 19:10:46 ]
違和感を覚えた部分はそこじゃないと思うよ多分。

157 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 19:14:03 ]
>>156
IT土方さん、いらっしゃい。

158 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 20:13:02 ]
コボラーにはJAVAすら使えない。

159 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 20:34:18 ]
こぼらーってJavaっていう言語があること知ってるの?

160 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 22:01:30 ]
>>158-159
コボラーにあやまれ! そこの現代コボラー!



161 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 22:15:19 ]
コボラーってアトランティス人みたいなもんでしょ

162 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 22:38:27 ]
コボラーってどんな言語?

163 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 22:44:53 ]
コボラーって伝承とか伝説でだけ出てくる空想上の生物じゃね?

164 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 16:28:26 ]
>>141
機能限定のラベル付きbreak、continueなら・・・

165 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 17:57:19 ]
高速電脳の斜向かいにある美容院の名前はコボル

166 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 01:37:16 ]
コボルちゃん

167 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 17:48:22 ]
>>158-159
Javaも書けるCOBOLプログラマはそもそもコボラーとは呼ばれない

168 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 18:02:11 ]
>>167
そのJavaコードがコボルチックだったりするからコボラーと呼ばれる。
コボラーが書いたC言語のコード見たらすごかった。
全部グローバル変数にしてw

169 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 18:38:23 ]
>>167
そりゃそうだ、現代コボラーと呼ばれるだけだから。

>>168
あるあるw

170 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 20:15:24 ]
>>168
コボルにはローカル変数無いの?

ちなみにおれ、コボル覚えられなかったんだよね…(´・ω・`)
C系よりよほど難しいと思うんだが。



171 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 20:23:11 ]
>>170
10年以上前にやったCOBOL85あたりではローカル変数って言う考え方は無かった
アドレスとかポインタとか意識する必要が無いからCOBOLのほうが圧倒的に簡単だと思うがの

172 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 20:26:56 ]
>170
>ちなみにおれ、コボル覚えられなかったんだよね…(´・ω・`)
>C系よりよほど難しいと思うんだが。

ナカーマ( ・∀・)人(・∀・ )

俺もC++ならtemplateもバッチリ使いこなせてメタプロもできるし、
アセンブラやスクリプト系の言語も問題なくこなせるんだが、
COBOLだけはダメっす。

173 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 23:47:19 ]
cobolはデータ依存プログラミングができるから、ある意味非常に強力。
逆に、それを使わないとグローバル変数しかない非常に貧弱な言語になってしまう。

174 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 23:15:26 ]
だから、商用システムなんかにはよく使われていた。
当時は、それが生産性が高かったんだよ。

175 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 23:23:27 ]
漏れのトコはエラー処理へすっ飛ばす時にgoto使ってるんだが。

goto完全毛嫌い派ってそこんとこどうなん?


176 名前:デフォルトの名無しさん mailto:age [2007/03/04(日) 16:11:26 ]
>>175
あいつら馬鹿だから、もちろんそれも否定するよ。

177 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 16:29:08 ]
たまに1関数1returnとか言い出す。

178 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 16:53:23 ]
if( is_error( hoge, hoge ) ) {
 10行ぐらいのエラー処理
 return ERROR;
}

if( is_error( next, hoge ) ) {
 上のと同じ10行ぐらいのエラー処理
 return ERROR;
}

if( is_error( next_next, hoge ) ) {
 やっぱり同じ10行ぐらいのエラー処理
 return ERROR;
}

以下続く

こんな感じの無残なコードは、何度も見かけたもんだがw

179 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 14:58:09 ]
例外キャッチしたら頭に戻ってやり直しってコードには躊躇なくgotoを使うな

180 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 21:42:18 ]
>>179
それって catch ブロックの中から try ブロックの中あるいはその前へ飛ぶの?



181 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 23:02:59 ]
for(;;) try{
// 例外が起きそうな処理
break;
}
catch(e){
}


182 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 23:46:11 ]
ダサッ

183 名前:デフォルトの名無しさん mailto:sage [2007/04/03(火) 01:25:49 ]
摩訶不思議

184 名前:デフォルトの名無しさん mailto:sage [2007/04/29(日) 03:54:13 ]
1関数1returnというのは「出口はひとつ」を誤解してるんだろうな。
returnが複数でも出口は一つだし。returnはある意味"goto 最後の}"だと
思えばいい。

本当の「出口が一つじゃない」というのはBASICの
100 GOSUB 200
110 PRINT "1"
120 PRINT "2"
130 END
200 INPUT A
210 IF A=1 THEN RETURN 110
220 RETURN 120
の210行と220行みたいな話を言っているはず。これはもはやreturnではなくて
gotoだからな。

185 名前:デフォルトの名無しさん mailto:sage [2007/04/30(月) 03:33:13 ]
じゃあ「入り口が一つ」については?

186 名前:デフォルトの名無しさん mailto:sage [2007/04/30(月) 20:37:51 ]
入り口も出口も複数

   subroutine hoge(i, j, k, *, *)
   k = i + j
   entry huge(k, *, *)
   k = k - 1
   if (k .ne. 0) return 1
   return 2
   end

   program main
   read(*,*) n1, n2
   call hoge(n1, n2, i, *100, *300)
100 write(*,*) n1, ' + ', n2, ' - 1 = ', i
   i = 10
200 write(*,*) i
   call huge(i, *200, *300)
300 write(*,*) 'end'
   end


187 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 18:25:16 ]
>>186
よーし、おじさんはCOBOLつかっちゃうぞ。

PERFORM xxx THRU yyyy

188 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 20:53:36 ]
goto 1;

189 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 00:08:15 ]
goto\s+[\w\d]+;|^\s*[\w\d]+:
をショッキングピンクにしてgoto使いまくりだな。

190 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 18:15:53 ]
色々謎な正規表現だな



191 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 11:32:44 ]
189の目を盗んでラベルの後に空白文字を入れてやるぜ。
goto fuck189 ;
fuck189 :

192 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 19:14:32 ]
以下のケースってgotoしたくなる。

if(a && b && c){
処理1
goto jmp;
} else if(d){
処理2
}
if(a && b){
jmp:
処理3
}







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<243KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef