- 1 名前:デフォルトの名無しさん [2005/08/11(木) 11:18:15 ]
- 前スレ pc8.2ch.net/test/read.cgi/tech/1021364372/
- 74 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 14:23:47 ]
- knuth先生のコードにもgotoが使われているものがあったぞ。
確かミニマックスαβ探索だったと思う。 knuth先生だって必要最低限のgoto使うことがあるのだから、原理主義はやめるべき。
- 75 名前:デフォルトの名無しさん [2006/05/03(水) 20:41:23 ]
- goto 1
- 76 名前:デフォルトの名無しさん mailto:sage [2006/05/03(水) 20:52:18 ]
- >>74
ってか、knuth は goto 擁護論者の筆頭だろ。
- 77 名前:デフォルトの名無しさん mailto:sage [2006/05/03(水) 21:42:42 ]
- 高徳納には先生ってつける奴多いけど何で?
- 78 名前:デフォルトの名無しさん mailto:sage [2006/05/04(木) 17:16:51 ]
- 趣味だろ
- 79 名前:デフォルトの名無しさん mailto:sage [2006/05/04(木) 22:28:29 ]
- 先生と 生徒
ハァハァ
- 80 名前:デフォルトの名無しさん mailto:sage [2006/05/04(木) 22:53:19 ]
- ジジイは趣味じゃないからパス
- 81 名前:デフォルトの名無しさん [2006/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 mailto:sage [2006/08/08(火) 15:09:56 ]
- 書き込んで気が付きましたがスレ違いっぽいですね。
すみません。
- 83 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 15:14:08 ]
- if(B) procY;
else if(!A) return; procX; 普通にこれではマズいのか?
- 84 名前:81 mailto:sage [2006/08/08(火) 15:57:02 ]
- >>83
ぉぅっ。エレガントです…。思いつきませんでした。 実際のコードはAで判定できる箇所が多くかつ判定自体も速いので、 できればAの判定を先に持ってきたいのですが…。 先に書くべきでしたね。
- 85 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 16:58:17 ]
- if(!A) {
if(B) procY; else return; } procX; これで>>81と等価かな。
- 86 名前:81 mailto:sage [2006/08/08(火) 18:22:30 ]
- >>85
できるもんなんですねぇ…。 勉強になりました。ありがとうございました。
- 87 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 20:00:42 ]
- そういう思考ができない人はあまりプログラマに向いて無い希ガス
- 88 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 20:15:33 ]
- >>81
俺ならこうやってネストしちゃうな。 (例として、条件がCまで、処理がprocZまでの三段階に増えたとする) if(!A) { if(!B) { if(!C) return; procZ; } procY; } procX;
- 89 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 21:43:38 ]
- 誰もお前には聞いてないんだよカス
- 90 名前:デフォルトの名無しさん [2006/08/08(火) 22:43:54 ]
- GOTO使う事によってコードが短くなる件
- 91 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 22:54:29 ]
- まあ、goto使うことで
コードが短くも速くもならないなら 使うなとは言えるなw
- 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 ]
- だから、商用システムなんかにはよく使われていた。
当時は、それが生産性が高かったんだよ。
|

|