gotoを恐れず使う兵共 ..
2:デフォルトの名無しさん
05/08/11 11:29:02
goto 1000
3:デフォルトの名無しさん
05/08/11 12:32:08
このボタンを押せば強制終了っていう場合は
どうやって実装する?
4:デフォルトの名無しさん
05/08/11 12:42:54
一般的には、ボタンが押されたことを通知するメッセージを捕捉して、
トップレベルウィンドウを閉じる処理をするんだろうなぁ。
いずれにしてもメッセージ操作だけだね。
5:デフォルトの名無しさん
05/08/11 12:51:53
>>3
外部割り込み
6:デフォルトの名無しさん
05/08/11 13:07:40
ボタンの後ろに機械接点があって、押すと接点が解放しPCの電力供給を絶つようにする。
7:デフォルトの名無しさん
05/08/11 13:36:10
核ミサイルを発射する処理をすれば
8:マイク ◆yrBrqfF1Ew
05/08/11 14:38:37
例外的な状況こそ例外
9:デフォルトの名無しさん
05/08/11 16:00:29
>>8
トートロジー
10:デフォルトの名無しさん
05/08/11 16:01:10
>>1
gotoを恐れずに使いたくないからfinallyや多重breakを使うわけだが。
11:デフォルトの名無しさん
05/08/11 16:23:09
本格的なプログラムを作成するために存在するC++にはなぜfinallyや多重break,continueがないのですか?
12:マイク ◆yrBrqfF1Ew
05/08/11 16:36:16
トートロジー?(▽
13:デフォルトの名無しさん
05/08/11 16:37:29
トポロジーの親戚さ
14:デフォルトの名無しさん
05/08/11 17:14:38
>>11
finallyがないのはクラスを作ってデストラクタで何とかしなさいということ。
しかもstd::auto_ptrを始めとして大体は既にそのようなクラスが存在するから自分で作ることは少ない。
//俺が思うにfinallyや多重break, continueがないのは単に思いつかなかっただけではないかという気がする。
15:デフォルトの名無しさん
05/08/11 19:13:46
初代C++から幾度も仕様拡張・改変が繰り返されているのに?
16:デフォルトの名無しさん
05/08/11 19:16:08
ところで、finallyって機能の一般的な名称としては何て言うの?
俺の脳内的には「あとしまつ部」なんだけど、これじゃ格好悪いし。
17:デフォルトの名無しさん
05/08/11 19:25:31
>>16
ってことは、お主は try とか catch は何て言うのよ
「finally 節」 で良いじゃん
18:デフォルトの名無しさん
05/08/11 19:55:49
C++がJavaのfinallyを見て言った
C++「おまえ、それでよくガベージコレクタがあるって言えたな」
Java「みんなCが好きなんだよ」
19:デフォルトの名無しさん
05/08/11 20:08:20
??
ああ、メモリ以外は自分で解放する必要があるってことか
20:デフォルトの名無しさん
05/08/11 20:41:06
Cが嫌いな奴もいるだろ
女の子とか
21:デフォルトの名無しさん
05/08/11 20:44:16
>>20
偏見。私は女だがCが嫌いというわけでもない。
22:デフォルトの名無しさん
05/08/11 20:57:05
>>21
お前が本当に女なら、おっぱい晒せ。
23:デフォルトの名無しさん
05/08/11 21:03:21
>>21
ずっと前からお前の事好きだった
24:デフォルトの名無しさん
05/08/11 23:21:32
実は私、男なの。ゲイなのよ。
25:デフォルトの名無しさん
05/08/11 23:22:24
ポーーーーーーーーーーーーゥゥゥゥゥゥッッッ!!!
どーも〜〜〜、ゲイでぇ〜〜〜〜〜す〜〜〜〜
26:デフォルトの名無しさん
05/08/11 23:30:58
gotoを恐れず使う兵共はゲイだと
27:デフォルトの名無しさん
05/08/12 00:20:34
ニューハーフなら受け止める
28:デフォルトの名無しさん
05/08/12 11:54:43
スレが危険な方向に……
29:デフォルトの名無しさん
05/08/12 12:30:22
これでまたさらにム板住民→キモイという方程式が確固たるものに…
>>22は氏んでくれ
30:デフォルトの名無しさん
05/08/16 23:30:11
次スレ立ってたのか。
>10
然り。
31:デフォルトの名無しさん
05/08/17 01:41:13
age
32:デフォルトの名無しさん
05/08/17 11:41:55
>>3
組み込みの場合のマジレス。
while(1) ;
33:デフォルトの名無しさん
05/08/18 00:02:44
Cとかでtry-catchサポートするようになったら
やっぱfinally無しではキツい気がする。
finallyの中身は後片付けでしかないんで
デストラクタに書けばいいだろと言う主張は
なんか面倒くさい気もするけど納得できた。
C++とは無関係にCにも例外処理とfinallyが欲しい。
34:デフォルトの名無しさん
05/08/18 00:18:21
>>33
try-catchに関しては、普通にC++コンパイラ使えば良いじゃん。
35:デフォルトの名無しさん
05/08/18 01:17:31
try-catch
使ったらそれはもうC++だよw
36:デフォルトの名無しさん
05/08/18 03:16:49
つ Objective-C (Cocoa)
37:デフォルトの名無しさん
05/08/18 09:11:42
>>33
>C++とは無関係にCにも例外処理とfinallyが欲しい。
あるんだけど。
これまた、C++と無関係なCの例外処理だから、catchに困るんだけどね。
38:デフォルトの名無しさん
05/08/20 12:32:28
:ill||||||||||l:
:i|||||||||||||||
/''';:|||||||||||||||||l:、
/:i :||||||貞|||||||i `'! gotoやめれ〜・・ ・
/ :| :||||||||||||||||||l ノ!
| ヽ |||||||||||||||||||| :|
! !;ヽ:||||||||||||||||||||!; |
.__| |/|||||||||||||||||||||; |____
| _| .|/||||||||||||||||||||; |_____ .|
| |:='ヾ‐イ:||:|l|l|l|l|l|l|ll|||||' |::::::::::::| |
| |:::::::: | |;:|||||:l|:l|l|l|:l|:||||| イ=::::::| | ザー ……
| |:::::::::/ };|||||||||l|:l|l|l|:l|:|||.ノ:=:::::| |
| |:::=!川!;|||||!l|||l|:l|l||||ー'‐'.;:::::::::::| |
| |:::::::::!l.|ノ / ./:::::=:::::::| |
| |::::::::::::|::: ノ }::::::::=::::::| |
|  ̄ ̄~|::: 川リ ̄ ̄ ̄ ̄ |
| ̄l ̄ ̄|:::: | ~ ̄ ̄ ̄| ̄|
|_|:.::.:.:.:|::::: |:.:.:.:.:.::..:.:.:|_|
.:.:.:.:.:.:.:.:.:|;;;:::: .|.:.:.:.:.:.:.:.:.:..:.:.:.:
39:デフォルトの名無しさん
05/08/20 12:52:56
((((;゚д゚))))ヤメマス!
40:デフォルトの名無しさん
05/08/21 10:43:27
現代のプログラミング言語で、Fortranのような言語で使用されていたGOTOを
必要としない言語は何でしょうか?
41:デフォルトの名無しさん
05/08/21 11:01:17
>>40
「Fortranのような言語で使用されていたGOTO」というと、こんなのか?
URLリンク(xlsoft.com)
42:デフォルトの名無しさん
05/08/21 11:13:07
一般的なGOTOですね。
CやC++等ではGOTO使わないと思うのですが、GOTOを必要としない
ための構造というと、どういうものなのでしょうか?
もちろんFORやWHILEループ、SWITCH等はそれだとはおもうのですが。
43:デフォルトの名無しさん
05/08/21 14:27:40
>GOTOを必要としないための構造というと、どういうものなのでしょうか?
つ[COME FROM文]
URLリンク(www.fortran.com)
44:デフォルトの名無しさん
05/08/21 14:43:51
>>42
ダイキストラたんに聞いてこい。
45:デフォルトの名無しさん
05/08/21 23:26:50
>>40
つ[構造化定理]
46:デフォルトの名無しさん
05/08/22 13:51:36
>>42
>CやC++等ではGOTO使わないと思うのですが
あなたがどう思うかに関わらず
goto を必要とする人々はいます。
つーか、そういう質問をするスレではありません。
47:デフォルトの名無しさん
05/08/25 10:04:14
>>42
継続(current-continuation)。
明示的に扱えるのはschemeくらいしか無いが。
48:デフォルトの名無しさん
05/09/27 12:40:41
スレタイの無理やり加減が結構好きなんだが
さりとてこれといった話題があるでもない。
49:デフォルトの名無しさん
05/10/23 18:03:34
現実問題goto使った汚いコードよりgoto使わない汚いコードのほうが100倍多い件
50:デフォルトの名無しさん
05/10/23 18:07:55
よくわかんない。
統計とってよ。
51:デフォルトの名無しさん
05/10/23 23:06:54
取ったら取ったでサンプルが偏ってるとか言われそうだな
52:デフォルトの名無しさん
05/10/23 23:19:17
ちゃんと、そう言われないと思うようなデータを取ってこいよ。
53:デフォルトの名無しさん
05/10/23 23:21:13
「汚い」の定義もしないで何を話しているのか・・・
54:デフォルトの名無しさん
05/10/23 23:22:21
お前ら良くこんな底の方にあるスレに気がついたな
55:デフォルトの名無しさん
05/10/23 23:23:37
>>53
定義はいらん。主観だからだ。
ヒューマンインターフェースチックな評価手法が妥当だと思われる。
56:デフォルトの名無しさん
05/10/23 23:25:07
汚ないコードとgotoを使う・使わないが直交しているし、
gotoを使わないコードはgotoを使うコードの100倍どころか
1000倍以上存在しているだろうから、
goto使った汚いコードよりgoto使わない汚いコードのほうがはるかに多いだろう。
57:デフォルトの名無しさん
05/10/23 23:27:22
goto使いたがる人間はコーディングに対して意識の高い人間だからコードはきれい。
ただgotoを排除したがる人間は噂レベルの情報を鵜呑みにする思考停止したコーディングレベルの低い人間だからコードが汚い。
58:デフォルトの名無しさん
05/10/24 09:58:24
すでにgotoの存在自体を知らないプログラマが大多数を占めている罠
59:デフォルトの名無しさん
05/10/24 10:24:45
よくわかんない。
統計とってよ。
60:デフォルトの名無しさん
05/10/24 13:55:43
統計統計と連呼しないで下さい。話を止める効果しかありませんよ。
ご自身の主張をなされば良いでしょう
61:デフォルトの名無しさん
05/10/24 16:35:13
「早起きは三文の得」と言われても、統計を要求する人なんだよ、たぶん。
62:デフォルトの名無しさん
05/10/24 17:39:59
その三文とは金額のことですか? それとも距離のことですか?
具体的にどんな得があるというのか説明してください。
とか?
63:デフォルトの名無しさん
06/01/05 19:14:32
>>58
それはないよ
ジャンプも知らない奴はデバッグできない
64:デフォルトの名無しさん
06/01/05 19:19:09
なぜアセンブリのgotoは許されるのかについて
65:デフォルトの名無しさん
06/01/05 19:20:29
っていうか、アセンブリでjmpなかったら何もできん・・・w
66:デフォルトの名無しさん
06/01/05 19:21:45
つかお前らassertスレが大分前に落ちましたよ
67:デフォルトの名無しさん
06/01/09 00:09:17
gotoだろうが何だろうが頭ごなしに否定あるいは肯定をするのは自分でモノを考えていない証拠です!><
プログラミングってのがそんな定型的な作業ならわざわざ人間様がやる必要はないはずです!><
68:デフォルトの名無しさん
06/01/09 00:20:44
>>67
自分で考えているかどうかっつーより、思考停止しているだけの話だろ。
69:デフォルトの名無しさん
06/01/10 00:05:45
「自分で考えていない」と「思考停止している」はどう違うのか
70:デフォルトの名無しさん
06/01/15 22:31:06
gotoは使ってより美しくなるのなら使え、そうでないなら使うな、ではないか?
71:デフォルトの名無しさん
06/01/16 00:10:04
>>70
同意するけど。
「何が美しいか」は完全に個人的な感覚に属する問題だからw
72:デフォルトの名無しさん
06/03/03 02:45:41
gotoにまつわる話だけで一冊の本になりそうなんだが
どこか出してくれないかな。買うぜ。
73:デフォルトの名無しさん
06/03/03 21:13:04
>>71
goto排斥原理主義者にとっては「gotoが使われている」=「最悪に醜い」だからなぁw
74:デフォルトの名無しさん
06/03/05 14:23:47
knuth先生のコードにもgotoが使われているものがあったぞ。
確かミニマックスαβ探索だったと思う。
knuth先生だって必要最低限のgoto使うことがあるのだから、原理主義はやめるべき。
75:デフォルトの名無しさん
06/05/03 20:41:23
goto 1
76:デフォルトの名無しさん
06/05/03 20:52:18
>>74
ってか、knuth は goto 擁護論者の筆頭だろ。
77:デフォルトの名無しさん
06/05/03 21:42:42
高徳納には先生ってつける奴多いけど何で?
78:デフォルトの名無しさん
06/05/04 17:16:51
趣味だろ
79:デフォルトの名無しさん
06/05/04 22:28:29
先生と 生徒
ハァハァ
80:デフォルトの名無しさん
06/05/04 22:53:19
ジジイは趣味じゃないからパス
81:デフォルトの名無しさん
06/08/08 15:08:54
if (A) { procX; }
else if (B) { procY; procX; }
という処理をしたいのですが、procX、procYともに関数にするほどではないけれども、
上の位置にベタで書くにはちょっと無駄なタイプをしている気がするような処理なのです。
そこで
if (A) goto labelX;
else if (B) goto labelY;
else return;
labelY: procY;
labelX: procX;
という書き方をしました。procXとprocYの実装を一度しか書かないという縛りで
gotoを使わずに書く書き方があれば教えてくださいm(_ _)m
82:81
06/08/08 15:09:56
書き込んで気が付きましたがスレ違いっぽいですね。
すみません。
83:デフォルトの名無しさん
06/08/08 15:14:08
if(B) procY;
else if(!A) return;
procX;
普通にこれではマズいのか?
84:81
06/08/08 15:57:02
>>83
ぉぅっ。エレガントです…。思いつきませんでした。
実際のコードはAで判定できる箇所が多くかつ判定自体も速いので、
できればAの判定を先に持ってきたいのですが…。
先に書くべきでしたね。
85:デフォルトの名無しさん
06/08/08 16:58:17
if(!A) {
if(B) procY;
else return;
}
procX;
これで>>81と等価かな。
86:81
06/08/08 18:22:30
>>85
できるもんなんですねぇ…。
勉強になりました。ありがとうございました。
87:デフォルトの名無しさん
06/08/08 20:00:42
そういう思考ができない人はあまりプログラマに向いて無い希ガス
88:デフォルトの名無しさん
06/08/08 20:15:33
>>81
俺ならこうやってネストしちゃうな。
(例として、条件がCまで、処理がprocZまでの三段階に増えたとする)
if(!A) {
if(!B) {
if(!C) return;
procZ;
}
procY;
}
procX;
89:デフォルトの名無しさん
06/08/08 21:43:38
誰もお前には聞いてないんだよカス
90:デフォルトの名無しさん
06/08/08 22:43:54
GOTO使う事によってコードが短くなる件
91:デフォルトの名無しさん
06/08/08 22:54:29
まあ、goto使うことで
コードが短くも速くもならないなら
使うなとは言えるなw
92:デフォルトの名無しさん
06/08/08 23:20:51
if (flag)
goto N0021;
return;
N0021:
〜
こういうコードならつい最近見た。Fortran から C に単純変換したものらしい。
こういうのがいたるところに orz
93:デフォルトの名無しさん
06/08/08 23:37:24
>>92
実行形式から逆コンパイルした結果も
それと同様に goto だらけになったりするんだろうなぁ。
94:デフォルトの名無しさん
06/08/09 19:48:06
>>89
では今度からきちんと指名 (無料) するように。
95:デフォルトの名無しさん
06/09/06 08:55:10
コンパイル済みの汗ソース見ればくだらない議論と気付くはずw
96:デフォルトの名無しさん
06/09/06 20:08:23
ちうか、わざわざ高級言語つって読み書きしやすい制御構文を用意しているのに、
それを破壊するような使い方をするなっていうのがgotoは悪派の主張なわけで、
機械語に落ちれば全部jmpだろってのはあんまり関係ないよな。
まあ、機械語レベルのjmp命令がif等の制御構文と同等のレベルで
読み書きできるような人間にゃgotoだろうがforだろうが関係ないのかもしれんが、
そうじゃない人もいるんでそういう人も思いやってくれよということで。
97:デフォルトの名無しさん
06/09/28 07:51:36
1.gotoはどんな事があっても絶対使うな!
2.gotoはなるべく使わない方がいい
初心者に教えるなら1の方が正しいと思う。
98:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/09/28 19:48:42
ジャンプ系の命令を挟んで数clockをwaitするってこと…なのか?
要するにnop代わりにgotoを使ったと…結構アレげだな
100:98
06/09/28 20:20:07
>ジャンプ系の命令を挟んで数clockをwaitするってこと…なのか?
たぶん、そういう事をやりたかったのだと思う。
gotoはCで書けるけど、nopはasmブロックで書かなくてはならないので
gotoを選択したんじゃないかねー。「念のため」的なコードは書かない
主義なので、このgotoが無ければ動かない機種があったのだとは思う。
14〜15年前の若かりし日のコードなんで詳しい事は思い出せないなw
101:デフォルトの名無しさん
06/09/28 23:28:51
>>100
約15年前のキミに言っておきたい。
そのコードにはコメントを入れておけとw
102:デフォルトの名無しさん
06/09/28 23:29:29
おっと、もちろん、goto使用理由に関するコメントな。
103:デフォルトの名無しさん
06/09/29 00:27:57
最近のコンパイラだと、最適化で消される悪寒・・・
104:98
06/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:デフォルトの名無しさん
06/09/29 06:52:14
自信の有無か、切羽詰ってたのか、或いは煮詰まっていたのか。
106:デフォルトの名無しさん
06/09/29 23:52:01
>>104
マジックナンバー(0x7fdfとか)に対するコメントはgoodだが、
「ベクタの更新」はコメント要らない気がする。
ていうか、だからgotoにコメント入れろとw
107:デフォルトの名無しさん
06/09/30 02:16:48
goto を入れるまでも無いくらい、自然で当然な行為だったんでわ。
108:デフォルトの名無しさん
06/09/30 02:17:28
goto を、じゃなくてコメントを、だった。
酔ってるんで許してくれ。
109:デフォルトの名無しさん
06/09/30 02:21:43
nopするだけのasmブロックをマクロで定義した方が良かったと思われる。
110:デフォルトの名無しさん
06/12/01 12:12:09
gotoを恐れなく使うのなら、finallyやbreakなんてヌルい物じゃなく、
gotoより強力な継続をバリバリに活用する方法を語るべきだろ。
111:デフォルトの名無しさん
06/12/01 12:34:53
ま、要するに使う側にとっては多少CPU時間が変わろうが仕様通り動けば良いわけだから
個人で開発するぶんには、完全に好みと言うか主観なわけで。
112:デフォルトの名無しさん
06/12/04 10:41:09
それは議論の対象外だろ
113:デフォルトの名無しさん
06/12/23 22:52:44
個人的に、breakとか使わなくてもifとgotoで事足りるんだが。
114:デフォルトの名無しさん
06/12/24 15:34:12
そりゃ、そうだろ…
115:デフォルトの名無しさん
06/12/24 15:46:17
プリフェッチの関係でnopではなくjmp shortを使わないとウエイトにならないとかでしょ?
当時のPC98ではそれが普通だったっつーか俺が覚えてるくらいだから広まってはいたんじゃないか
116:デフォルトの名無しさん
06/12/25 13:40:26
これまで何度も言われてきたことだけど
「個人で開発するぶんには・・・」とか「***で事足りるから***は不要」とか
無意味だとは思わんかね?
117:デフォルトの名無しさん
06/12/25 14:15:25
andとnotとorとgotoで事足りるから制御構造は不要
118:デフォルトの名無しさん
06/12/27 00:36:01
nand さえあれば、andもnotもorも不要なんじゃなかったっけ?
119:デフォルトの名無しさん
06/12/28 15:51:00
最終的にはチューリングマシン云々とかマシン語云々に行き着くんだろうな
120:デフォルトの名無しさん
06/12/29 00:38:20
>>119
フルアセンブラで組むのはさすがにバカ→C言語を使う俺、最高→いやいやC++使いの俺、最高→(以下略
121:デフォルトの名無しさん
06/12/29 01:11:44
プログラマを顎で使うクライアントの俺、最高
122:デフォルトの名無しさん
06/12/29 06:34:33
作業に見合うだけのお金を払ってくれるならな。
123:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/01/02 20:28:59
if (A && B){
procX;
} else {
procY;
}
じゃいけないの?
125:デフォルトの名無しさん
07/01/02 20:55:36
それじゃプログラムが変わってしまう。
126:デフォルトの名無しさん
07/01/02 20:58:39
あれ、ぼけてたかも…
127:デフォルトの名無しさん
07/01/02 21:07:49
>>123
すげー
gotoは絶対禁止ってルール作った方がいいよw
128:デフォルトの名無しさん
07/01/02 21:20:41
>>125
特に変わってないように見えるんだけど
129:デフォルトの名無しさん
07/01/02 22:20:23
>>128
>>126
130:デフォルトの名無しさん
07/01/02 22:22:59
だいたいgoto無くて困った事ないなw
131:デフォルトの名無しさん
07/01/03 19:40:17
>>129
ああそうか、 >>125=>>126 なのか。
>>124=>126 だと思ってた
132:デフォルトの名無しさん
07/01/03 20:01:01
(A && B && (procX || 1)) || procY;
ネタ提供
133:デフォルトの名無しさん
07/01/04 20:07:36
自分はこんなくだらないことでgotoを使う/使わないなどと悩むことはしないよ。
134:デフォルトの名無しさん
07/01/04 21:43:08
悩むまでもなくgotoを使うということか
135:デフォルトの名無しさん
07/01/04 21:49:00
goto眼中無しだろ普通
136:133
07/01/04 22:00:10
>>134
当然noだ。
故意に曲解していないか?
>>135 yes
137:デフォルトの名無しさん
07/01/04 22:17:01
134 はギャグで言っただけだろう
138:デフォルトの名無しさん
07/01/04 22:33:01
はいはいthrowthrow
139:デフォルトの名無しさん
07/01/04 23:21:51
しかしcatch
140:デフォルトの名無しさん
07/01/04 23:23:35
しかしgotoの嫌われっぷりも、相当なもんだよな
実際多少gotoつかったぐらいじゃ、可読性など落ちはしない
可読性を決める要因は、goto文の有無とは殆ど関係ないところにあるのにな
C++でgoto使うと、gotoでコンストラクタすっ飛ばすんじゃねえ
とか、コンパイラに怒られたりするな
goto文はなかなか教育的だ
141:デフォルトの名無しさん
07/01/04 23:35:33
使うシーンが思い浮かばん
使わなきゃならない、もしくは使ったほうがいい場合が思い浮かばん
もっともJava使ってんだけどJavaにはgotoって無いよね?
142:デフォルトの名無しさん
07/01/05 01:10:07
残念ながらJavaはgotoをサポートしていない。
143:デフォルトの名無しさん
07/01/05 01:23:31
特に残念でもないw
144:デフォルトの名無しさん
07/01/05 01:25:25
まぁ、Java は goto なんか使わせたら速攻でスパゲッティなコードを書くようなプログラマを対象にした言語だからな。
145:デフォルトの名無しさん
07/01/05 01:27:06
kwsk
146:デフォルトの名無しさん
07/01/05 01:33:27
このコマンドをいれると自動で玉が出る
goto
ゴト行為はやめましょう
147:デフォルトの名無しさん
07/01/05 01:36:05
>>145
詳しくもなにもそのまんまなだけ。Javaが現代COBOLだとか言われているのって聞いたことない?
"普通のプログラマはまともに使いこせない"という理由で他にも元ネタの言語であるC++からtemplateなどを排除し、
メモリ管理ひとつまともにできないプログラマの為にGCを標準装備したりしている。
148:デフォルトの名無しさん
07/01/05 01:37:48
>>147
そういえばそういうコードはよく見るなw
149:デフォルトの名無しさん
07/01/05 11:29:43
>>144
実際には goto なくてもスパゲッティ作れる人が大量投入されてる。
(そうじゃない人も多数いるけど。まぁどの言語もなんだが。)
150:デフォルトの名無しさん
07/01/05 11:50:03
Javaでmainに全コードベタ書きするスタイルを採用したらgotoが必要になると思うぞ。
151:デフォルトの名無しさん
07/01/05 12:02:54
Dr.goto
152:デフォルトの名無しさん
07/01/05 21:53:43
手続き指向言語(?)にはgoto欲しいかもね
153:デフォルトの名無しさん
07/01/06 17:24:39
>>83
それだと評価順が変わるのでいいのか?
>>85
あとにコードが続いてたらreturnはまずい気が。
154:デフォルトの名無しさん
07/01/06 17:51:23
>>147
詳しくのニュアンスに違和感を覚えるのは俺だけではないはずだ
155:デフォルトの名無しさん
07/01/06 18:46:18
>>154
IT土方の現代コボラーさん、いらっしゃ〜い。
まぁ、IT土方なんて沢山いるから、違和感を覚えたのは君だけじゃないよ、きっと、うん。
156:デフォルトの名無しさん
07/01/06 19:10:46
違和感を覚えた部分はそこじゃないと思うよ多分。
157:デフォルトの名無しさん
07/01/06 19:14:03
>>156
IT土方さん、いらっしゃい。
158:デフォルトの名無しさん
07/01/06 20:13:02
コボラーにはJAVAすら使えない。
159:デフォルトの名無しさん
07/01/06 20:34:18
こぼらーってJavaっていう言語があること知ってるの?
160:デフォルトの名無しさん
07/01/06 22:01:30
>>158-159
コボラーにあやまれ! そこの現代コボラー!
161:デフォルトの名無しさん
07/01/06 22:15:19
コボラーってアトランティス人みたいなもんでしょ
162:デフォルトの名無しさん
07/01/06 22:38:27
コボラーってどんな言語?
163:デフォルトの名無しさん
07/01/06 22:44:53
コボラーって伝承とか伝説でだけ出てくる空想上の生物じゃね?
164:デフォルトの名無しさん
07/01/07 16:28:26
>>141
機能限定のラベル付きbreak、continueなら・・・
165:デフォルトの名無しさん
07/01/07 17:57:19
高速電脳の斜向かいにある美容院の名前はコボル
166:デフォルトの名無しさん
07/01/08 01:37:16
コボルちゃん
167:デフォルトの名無しさん
07/01/08 17:48:22
>>158-159
Javaも書けるCOBOLプログラマはそもそもコボラーとは呼ばれない
168:デフォルトの名無しさん
07/01/08 18:02:11
>>167
そのJavaコードがコボルチックだったりするからコボラーと呼ばれる。
コボラーが書いたC言語のコード見たらすごかった。
全部グローバル変数にしてw
169:デフォルトの名無しさん
07/01/08 18:38:23
>>167
そりゃそうだ、現代コボラーと呼ばれるだけだから。
>>168
あるあるw
170:デフォルトの名無しさん
07/01/08 20:15:24
>>168
コボルにはローカル変数無いの?
ちなみにおれ、コボル覚えられなかったんだよね…(´・ω・`)
C系よりよほど難しいと思うんだが。
171:デフォルトの名無しさん
07/01/08 20:23:11
>>170
10年以上前にやったCOBOL85あたりではローカル変数って言う考え方は無かった
アドレスとかポインタとか意識する必要が無いからCOBOLのほうが圧倒的に簡単だと思うがの
172:デフォルトの名無しさん
07/01/08 20:26:56
>170
>ちなみにおれ、コボル覚えられなかったんだよね…(´・ω・`)
>C系よりよほど難しいと思うんだが。
ナカーマ( ・∀・)人(・∀・ )
俺もC++ならtemplateもバッチリ使いこなせてメタプロもできるし、
アセンブラやスクリプト系の言語も問題なくこなせるんだが、
COBOLだけはダメっす。
173:デフォルトの名無しさん
07/01/08 23:47:19
cobolはデータ依存プログラミングができるから、ある意味非常に強力。
逆に、それを使わないとグローバル変数しかない非常に貧弱な言語になってしまう。
174:デフォルトの名無しさん
07/01/15 23:15:26
だから、商用システムなんかにはよく使われていた。
当時は、それが生産性が高かったんだよ。
175:デフォルトの名無しさん
07/03/03 23:23:27
漏れのトコはエラー処理へすっ飛ばす時にgoto使ってるんだが。
goto完全毛嫌い派ってそこんとこどうなん?
176:デフォルトの名無しさん
07/03/04 16:11:26
>>175
あいつら馬鹿だから、もちろんそれも否定するよ。
177:デフォルトの名無しさん
07/03/04 16:29:08
たまに1関数1returnとか言い出す。
178:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/03/29 14:58:09
例外キャッチしたら頭に戻ってやり直しってコードには躊躇なくgotoを使うな
180:デフォルトの名無しさん
07/03/29 21:42:18
>>179
それって catch ブロックの中から try ブロックの中あるいはその前へ飛ぶの?
181:デフォルトの名無しさん
07/04/02 23:02:59
for(;;) try{
// 例外が起きそうな処理
break;
}
catch(e){
}
182:デフォルトの名無しさん
07/04/02 23:46:11
ダサッ
183:デフォルトの名無しさん
07/04/03 01:25:49
摩訶不思議
184:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/04/30 03:33:13
じゃあ「入り口が一つ」については?
186:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/05/01 18:25:16
>>186
よーし、おじさんはCOBOLつかっちゃうぞ。
PERFORM xxx THRU yyyy
188:デフォルトの名無しさん
07/05/11 20:53:36
goto 1;
189:デフォルトの名無しさん
07/05/12 00:08:15
goto\s+[\w\d]+;|^\s*[\w\d]+:
をショッキングピンクにしてgoto使いまくりだな。
190:デフォルトの名無しさん
07/05/12 18:15:53
色々謎な正規表現だな
191:デフォルトの名無しさん
07/05/13 11:32:44
189の目を盗んでラベルの後に空白文字を入れてやるぜ。
goto fuck189 ;
fuck189 :
192:デフォルトの名無しさん
07/07/21 19:14:32
以下のケースってgotoしたくなる。
if(a && b && c){
処理1
goto jmp;
} else if(d){
処理2
}
if(a && b){
jmp:
処理3
}
193:デフォルトの名無しさん
07/07/21 20:37:51
真理値表を書いてみよう。
a b c d 処理1 処理2 処理3
0 0 0 0 x x x
0 0 0 1 x o x
0 0 1 0 x x x
0 0 1 1 x o x
0 1 0 0 x x x
0 1 0 1 x o x
0 1 1 0 x x x
0 1 1 1 x o x
1 0 0 0 x x x
1 0 0 1 x o x
1 0 1 0 x x x
1 0 1 1 x o x
1 1 0 0 x x o
1 1 0 1 x o o
1 1 1 0 o x o
1 1 1 1 o x o
なんだ、goto要らないじゃん。
194:デフォルトの名無しさん
07/07/24 10:55:01
で、バカを晒した>>192はどこに行った?
しかし、真理値表を書かないと結論が出ない>>193も大概だがな。
195:デフォルトの名無しさん
07/07/24 20:10:20
>>194
if(a && b){
を省略したいってことじゃないかな。auto a,bだとして。
コンパイラにやって欲しい処理だ。
196:デフォルトの名無しさん
07/10/28 23:46:38
goto使ったら先輩にしつこくなじられるようになった
うぜぇwwwwwgotoアレルギーうぜぇwwwwwww
197:デフォルトの名無しさん
07/10/29 21:33:37
>>196
もともと人間関係うまくいってなかっただけじゃね?
198:デフォルトの名無しさん
07/11/02 14:45:06
うちの下っ端で考え無しにgoto使ってるアホがいやがる
うぜぇwwwww無能下っ端うぜぇwwwwwww
って感じだろ
199:デフォルトの名無しさん
08/02/09 17:53:27
スレリンク(tech板:553-578番) あたりの続き
> 578 :デフォルトの名無しさん:2008/02/09(土) 17:20:17
> >>570
> >556 名前:デフォルトの名無しさん [sage]: 2008/02/09(土) 13:55:24
> >まぁさ、例外あるような言語ではgotoいらないかもしれないけど、
> >Cとかだと普通に使うよ?
> >557 名前:デフォルトの名無しさん [sage]: 2008/02/09(土) 14:28:31
> >いや,普通には使わないわ(ww
>
> ここから始まった話題なので、
> 今に限ってはCのgotoの話をしている。pythonは今のトピックにおいて関係なし。
> Cは例外ないから>>558がgotoなしで書けるという話も決着がついてない。
> ここで例外使えばいいという指摘自体が的外れ。
> まあ実際gotoは無くてもいいが、あると遥かリソース開放とかは便利。
> むろんGCとか例外とかがあればそっちのが便利だが。
存分にどうぞ。
あ、setjmp/longjmp使うからgoto使わないわ、というオチは禁止ね。
200:デフォルトの名無しさん
08/02/09 17:55:48
>>199
リソース解放のためにgotoって、、、不必要に汚ないコードができるだけだろ
201:デフォルトの名無しさん
08/02/09 17:59:11
>>200
goto使わないともっと汚くなるんじゃない。
202:デフォルトの名無しさん
08/02/09 18:00:29
まぁgoto禁止の会社で、あらゆるコードが以下のように
なってるのを見たとき、「素直にgoto使え」とオモタ。
do {
if (hoge) {
break;
}
} while (0);
203:デフォルトの名無しさん
08/02/09 18:05:49
>>199で問題になってるコードを天災
はっきり言って呼び出し側で解放したほうがいい典型例。
呼ばれた側で解放したければ、この関数を呼んでから
解放するような関数を書けと言いたい。
> 558 名前:デフォルトの名無しさん [sage]: 2008/02/09(土) 14:35:39
> >>557
>
> そう?ファンクショントレース埋め込むときとか、以下のように
> エラーの場合、リソース開放して戻るときとか頻繁に使うなぁ。
> {
> A *a = NULL; B *b = NULL; C *c = NULL; int result = E_UNKNOWN;
>
> if ((a = A_new()) == NULL) {
> result = E_MEM; goto END_FUNC;
> }
> if ((b = B_new()) == NULL) {
> ...
>
> END_FUNC:
> if (a !=NULL && result != E_SUCCESS) {
> A_free(a);
> }
> ...
> }
204:デフォルトの名無しさん
08/02/09 18:07:55
continueもある場合は、gotoよりも明確になるように思う。
breakで外側のループを脱出するために、switchで書いたほうが良さげな
内側の多分岐がif/else if/else ifになってたりするとgoto使え、だな。
205:デフォルトの名無しさん
08/02/09 18:12:33
>>203
関数がエラーで返った場合、オブジェクトに変更が加えられていないことが
保証されるとする場合、それじゃだめやね。エラーが発生したら、まき戻す
処理が必要になる。
206:デフォルトの名無しさん
08/02/09 18:15:49
>>205
エラーの発生箇所によって巻き戻し方が違うんなら、どのみちgotoでは処理できん。
巻き戻し方が同じなら、goto先で巻き戻すのもreturn先で巻き戻すのも同じ。
と思うのだが。
207:デフォルトの名無しさん
08/02/09 18:19:37
>>206
>エラーの発生箇所によって巻き戻し方が違うんなら、どのみちgotoでは処理できん。
でもgoto使ったほうがスッキリかけるでしょ。
>巻き戻し方が同じなら、goto先で巻き戻すのもreturn先で巻き戻すのも同じ。
APIの使い勝手が大きく違うじゃない。
208:デフォルトの名無しさん
08/02/09 18:57:34
>>207
いや、だからさ、APIとしては呼び出す側は何もしなくていいの。
処理とリソース管理を分離して実装しましょう、ってだけの話。
なんで無理にgotoなんて使いたがるのか、ワケワカラン。
209:デフォルトの名無しさん
08/02/09 19:02:43
>>208
抽象論が多くてわかりにくい。具体的なコード書いて改善してみてくれ。
210:デフォルトの名無しさん
08/02/09 19:12:49
>>203でコピペされてるコードも全然具体的じゃないけどな。
211:デフォルトの名無しさん
08/02/09 19:30:27
巻き戻し処理って、本当に巻き戻すのか単にコピーをしておくのかどっちが多いの?
transactional memoryって効率を求めるとすると、なにかしら約束事があったほうがよいんだろうけど。
完全に透過に見える実装にしたいならos側からアプローチしたほうが楽な気もする。
212:デフォルトの名無しさん
08/02/09 20:28:38
>>210
結局「gotoはダメ!って教えられたからダメダ!」で、思考停止したダケの人なのね。
>>211
>巻き戻し処理って、本当に巻き戻すのか単にコピーをしておくのかどっちが多いの?
場合による。例えば、ある処理が1,2,3,4の順番で実行することがきめられてる場合
(1を実行しないと、2が実行できない場合)、実際に実行して3でエラーが発生したら、
1,2を巻き戻す処理が必要だし。
OS側からのアプローチってどんなアプローチ?
213:デフォルトの名無しさん
08/02/09 20:34:39
gotoなんて設計に何の影響もない
同一関数内でしか影響のないものによくもまあそんなに熱くなれるなw
これ眺める限りさほど奇天烈な使い方があるようにも思えないが。
URLリンク(www.google.com)
214:デフォルトの名無しさん
08/02/09 20:43:49
>>213
>gotoなんて設計に何の影響もない
gotoは設計に影響ないとしても、APIが保障するリソース管理の方針は
大いに影響がある。
下位のモジュールがエラーを返した場合、それ以下のリソースには影響
がなかったことが保障されるのであれば、モジュールは自身の管理する
モジュールを開放すればよいことが保証される。
例外とデストラクタの伝播のようなもの。
215:デフォルトの名無しさん
08/02/09 20:44:26
んで、Cでそれを実装するには、gotoがいいよといってるわけで。
216:デフォルトの名無しさん
08/02/09 20:44:43
GCC の labels as value と computed goto を使うと結構豪快に遊べるけどなw
217:デフォルトの名無しさん
08/02/09 20:47:44
嫌goto厨ってもしかして元N88ベーシッカーが多いのかねw
218:デフォルトの名無しさん
08/02/09 20:49:13
コンパイラ言語で goto を使っても問題ない。
どうせ機械語のジャンプ命令に置き換わるだけなんだから。
ところがインタプリタ言語にとっては goto はパフォーマンスを低下させるやっかいもの。
10 FOR I=1 TO 100
20 FOR J=1 TO 200
30 PRINT "うんこ"
40 IF J=50 THEN GOTO 70
50 NEXT J
60 NEXT I
70 FOR J=1 TO 100
80 PRINT "しっこ"
90 NEXT J
仮にこのようなコードを実行するとしよう(細かいツッコミは無しね)
インタプリタは 10行目で FOR 文に出会い、変数 I と 終了値 100 をスタックに積む
次に 20 行目で 変数 J と 終了値 200 をスタックに積む。
通常は NEXT に出会ったときに終了判定がなされ、終了値に達していれば
FOR をスタックから捨てられる。
ところが 70行目で FOR〜NEXT ループの外に飛び出してしまったため
スタックには先ほどの2つの FOR 変数 I と J が積まれたままになる。
さらに 70行目で FOR に出くわしたインタプリタはどういう振る舞いをするか。
スタックに FOR J が既に積まれていないかを検査し、もしあればそれを捨てる作業が必要になる。
実はインタプリタは FOR に出会うたびに、スタックをすべて検査して、重複していないか
確かめているのだ。
GOTO 文さえなければスタックをすべて検査する必要がなくなりパフォーマンスがいくらか上がるはずだな。
java が goto を目の敵にしているのは、このせい。インタプリタにとって goto は大敵なんか長文つかれた
どうせ誰も読んでないだろなめんどくせぇもうやめたうんこちんちん!
219:デフォルトの名無しさん
08/02/09 20:52:59
>>207
こういう話ではないの?
別にどっち使ったからと言って使い勝手というかAPIが変わるとは思えない。
これだったら俺も1を選ぶけど。
//その1
void hoge() //外部に公開される関数
{
void *p = malloc(65536);
//ところどころでgoto END;
END_FUNC:
free(p);
}
//その2
static void hoge_impl(void *p)
{
//ところどころでreturn;
}
void hoge() //外部に公開される関数
{
void *p = malloc(65536);
if (!p)
hoge_impl(p);
free(p);
}
220:デフォルトの名無しさん
08/02/09 20:57:27
うんこちんちん!
まで読んだ。
221:デフォルトの名無しさん
08/02/09 20:58:35
>>212 ポカーン 自分では全然的確な例も出さずに認定かい
222:デフォルトの名無しさん
08/02/09 20:59:29
>>218
まだJavaをインタプリタ言語と呼んでる人がいるんだね。
正直驚いた。
223:デフォルトの名無しさん
08/02/09 21:06:34
実際にバイトコードインタプリタだったとしても
機械語に翻訳されりゃasmリストのjmpと一緒じゃん。
jmp命令を使えないcpuって不便そう。
224:デフォルトの名無しさん
08/02/09 21:07:45
結論
goto議論に熱中する奴は生産性が低い
goto :eof
225:デフォルトの名無しさん
08/02/09 21:13:36
つーか、BASICのインタプリタと、
Javaのインタプリタのレベルを混同してるヴァカが現存してることに驚いた。
Javaのforでスタックなんか使ってねーっての。
226:デフォルトの名無しさん
08/02/09 21:24:38
>>219
その2のほうさ、管理するリソースが1つだけならまだマシだが、4つも5つも
管理している場合、そのためのサブ関数が4つも5つもできることに
なるわけだが・・・。まぁgoto毛嫌いしている人には、そっちのほうが
ウレピイのかもしれんが。
227:デフォルトの名無しさん
08/02/09 21:28:22
リソース管理なんてif文一発だろ。
お前らもっとでかいモニタ使えよ。
int ret = 0;
if(init1())
{
if(init2())
{
if(init3())
{
ret = execute();
fin3();
}
fin2()
}
fin1();
}
return ret;
228:デフォルトの名無しさん
08/02/09 21:45:05
>>227
そのコードは、俺の頭ではツライ。
229:デフォルトの名無しさん
08/02/09 21:54:45
意外にも java がインタプリタだという事を知らない人が複数いて驚いた。
「JIT」 について、もうすこし学びましょうね。
230:デフォルトの名無しさん
08/02/09 22:01:57
ほぉ。
Javaのバイトコードで、どういう風にforとスタックが関係するのか、
説明していただけますかね?
231:デフォルトの名無しさん
08/02/09 22:26:44
Code: Stack=3, Locals=2, Args_size=1
0: iconst_0
1: istore_1
2: iload_1
3: bipush 10
5: if_icmpgt 39
8: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
11: new #3; //class java/lang/StringBuilder
14: dup
15: invokespecial #4; //Method java/lang/StringBuilder."<init>":()V
18: ldc #5; //String line
20: invokevirtual #6; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
23: iload_1
24: invokevirtual #7; //Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
27: invokevirtual #8; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
30: invokevirtual #9; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
33: iinc 1, 1
36: goto 2
39: return
public static void main(String args[])
{
for(int i=0; i<=10; i++) {
System.out.println("line " + i );
}
}
なんというひねりのないコード。
232:デフォルトの名無しさん
08/02/09 22:31:52
インタプリタなのはJVMの方でJavaはコンパイラだろ。
233:デフォルトの名無しさん
08/02/09 22:32:23
public static void main(String args[])
{
try {
for(int i=0; i<=10; i++) {
System.out.println("line " + i );
}
} catch (Exception e) {
System.out.println("boo.");
}
}
にすると
Exception table:
from to target type
0 39 42 Class java/lang/Exception
が追加されて、ジャンプ命令で例外処理の飛ぶ先が決まるんだな。
-ここまで同じ-
39: goto 51
42: astore_1
43: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
46: ldc #11; //String boo.
48: invokevirtual #9; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
51: return
ただしキャッチしなければパレントクラスに飛ぶというのは例外の普通の使い方。
やってる事自体はあまり変わらないけど、言語が持ってる機構は有効に使ったほうが綺麗になるって感じなのかな?
234:デフォルトの名無しさん
08/02/09 22:40:13
で、どのように、
BASICインタプリタで起きるようなFOR-NEXTの対応のズレの
ようなことと、関係してくるんですか、と。
(BASICのFOR-NEXTは、FORを実行する時、NEXTにぶち当たったら
戻るためのポインタをスタックに積んでいるわけですが、それに
相当するコードはどこ?)
それに、
あるインストラクションを実行する時点での、スタックトップは
コンパイル時に確定できますよね?
仮にgotoで気ままに飛んだとしても、飛ぶ時に適宜調整すれば
問題ないわけで。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5167日前に更新/243 KB
担当:undef