[表示 : 全て 最新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/

243 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 14:58:54 ]
そもそも、大域変数しか使えない言語で「変数をスタックに積むって」ありえるのか?

変数宣言なし&局所変数なしの言語の場合、変数管理表と戻り先(jump先)管理表を使うのが普通だろ?

244 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 18:24:27 ]
>>243
> そもそも、大域変数しか使えない言語で「変数をスタックに積むって」ありえるのか?
>
> 変数宣言なし&局所変数なしの言語の場合、変数管理表と戻り先(jump先)管理表を使うのが普通だろ?

BASICのFOR-NEXT制御の場合、変数名をタグとして、
FOR x IN ... 〜 NEXT x を対応させる処理系がある。
(NEXTのあとの変数名はreminderで、処理系は無視するものもある)

>>218 が得意そうに解説してるBASIC処理系では、NEXT x の x の
変数名を見て、対応するFORの処理に戻るような処理系なんだろうが、
そのような場合、FORの場所だけでなく、変数名もフレームに覚えておく
必要がある。変数の値じゃなくて、変数名そのものか、ポインタかを
タグとして書いておくわけやね。

245 名前:デフォルトの名無しさん [2008/02/10(日) 18:53:17 ]
じゃあgotoを使うなって言われるのは、
単純にスパゲッティ化するのを防ぐだけじゃなく、
スタックを開放する作業を確実にやるためだったってことだな。


246 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 18:55:43 ]
つか今時どうやったら制御構文完備な言語で
goto使ってスパゲッチなコードを書けるんだよw

247 名前:デフォルトの名無しさん [2008/02/10(日) 19:02:49 ]
完備ってほどでもないと思うけど。


248 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 19:04:48 ]
gotoは悪だ!という宣伝がコレまで続けられてきて、普通のプログラマ
はgotoを使ったスパゲティコードに関して十分知っているわけでしょ。
そういう意味では、goto邪悪論の目標は達していると思う。

それなのに会社のコーディング規約でgotoを禁止するのは、どうみても
自社のプログラマを信用していないとしか思えない。

goto禁止したところで、do { if (hoge) break; } while(0)で、gotoに近いことを
やろうと思えば出来てしまうわけだぜ。そういう会社がやるべきは、社員の
教育であってgoto撲滅では決してない。

249 名前:デフォルトの名無しさん [2008/02/10(日) 19:29:20 ]
条件分岐とループで複雑に作ってもわけ分からんしな。

250 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 19:30:07 ]
ゴトーさんが泣いているぞ

251 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 19:35:51 ]
おまえは、BLASの後藤か、CINTの後藤か、パラメトロンの後藤か、
なんちゃって。



252 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 19:49:17 ]
>>226
その2のほうさ、管理するリソースが1つだけならまだマシだが、4つも5つも
> 管理している場合、そのためのサブ関数が4つも5つもできることに
> なるわけだが・・・。

>>219の2のどこをどう考えればリソース毎にサブ関数が必要になると思えるのやら。
hoge()の中身が増えるだけだろ。
まさかhoge_implのほうがリソース管理してるとでも読んだのか?

253 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 19:51:00 ]
>>248
goto邪悪論も有害だが、goto気軽に利用論はもっと有害だな。
あくまで汚ないことをやっているという自覚を持って使うべきだ。


254 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:06:09 ]
相変わらず曖昧論ばっかりだな

255 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:16:53 ]
>>252
いや、そうだな。だがしかし4つも5つもリソースがあるばあいはどうすんの。
そもそもその手法じゃダメやん。

256 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:25:56 ]
つまり>>227のようになってしまうわけだし。依存関係あると。
そうじゃないなら、やっぱりサブ関数をわけて依存関係を
チェインさせる?正気の沙汰じゃないな。

257 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:30:00 ]
//その2
static void hoge_impl(void *p)
{
//ところどころでreturn;
}

void hoge() //外部に公開される関数
{
void *p1 = malloc(65536);
void *p2 = malloc(65536);
void *p3 = malloc(65536);
void *p4 = malloc(65536);
if (p1 && p2 && p3 && p4)
ret = hoge_impl(p);
if (p1) free(p1);
if (p2) free(p2);
if (p3) free(p3);
if (p4) free(p4);
return ret
}

で何か?

258 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:34:55 ]
>>257
mallocならいいが、

>例えば、ある処理が1,2,3,4の順番で実行することがきめられてる場合
>(1を実行しないと、2が実行できない場合)、実際に実行して3でエラーが発生したら、
>1,2を巻き戻す処理が必要だし。

この場合はどうする

259 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:38:03 ]
hoge()の最後でretの中身に応じて必要な回復処理すればいいだけじゃねーの?

260 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:39:28 ]
>>259
書いてミレヨ

261 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:41:43 ]
>>260
おいおい、どんな巻き戻しが必要なのか具体的なコードを出すのが先だろw



262 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:45:17 ]
hoge_impl()の返り値にどこまで進んだかの情報を入れ込んでおけばOK

263 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:47:47 ]
>>261
  if (A_init() != 0) goto A_FAILED;
  if (B_init() != 0) goto B_FAILED;
  if (C_init() != 0) goto C_FAILED;
  if (D_init() != 0) goto D_FAILED;

  return 0;

D_FAILED:
  D_finish();
C_FAILED:
  C_finish();
B_FAILED:
  B_finish();
A_FAILED:
  A_finish();
  return -1;

264 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:49:18 ]
>>263
それのどこが巻き戻しのコード?

265 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:53:08 ]
盛り上がってまいりました

266 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:53:26 ]
>>263
initが失敗したら、finishでまき戻せると思ってくれ。

267 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:54:00 ]
//その2
static void hoge_impl(void *p)
{
  if (A_init() != 0) return A_FAILED;
  if (B_init() != 0) return B_FAILED;
  if (C_init() != 0) return C_FAILED;
  if (D_init() != 0) return D_FAILED;

  return 0;
}

void hoge() //外部に公開される関数
{
switch (hoge_impl(p)) {
case D_FAILED:
D_finish();
case C_FAILED:
C_finish();
case B_FAILED:
B_finish();
case A_FAILED:
A_finish();
return -1;
default:
return 0;
}

で何か?


268 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:57:00 ]
もうこねーよ、ウワーン

269 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:58:18 ]
そんなコード見たことねぇw
goto避ける為にがんばりすぎだなw
大体ローカル変数にアクセスできねぇし
いちいち引数で渡しますか。

C++厨のtry/finallyなんていらねぇ!
がんばればclassのコンストラクタ、デストラクタで何とかなる!みたいだなw

270 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 21:01:22 ]
>>269 御託はいいから、>>226が筋違いだということは理解できたか?

271 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 21:02:23 ]
>>269
回復に4つも別々の関数呼ばにゃならんコードな時点で糞ケテーイ



272 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 21:06:09 ]
みんな、今271が良い事を言ったぞ!

273 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 21:09:51 ]
がんばることある?
大抵のものは誰かがラッパー作っているし、
ないものは確かに作ることもあるけど、面倒ならboost::shared_ptrに任せられるし。

274 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 21:09:56 ]
>>269 後出しイクナイ!
ローカル変数うんぬんを言うのなら、A_finishとかが無引数なのはおかしいだろ。

275 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 21:12:22 ]
>>273
禿同。こんな事にgotoとか使ってる奴はboost時代に乗り遅れてる。

276 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 21:18:15 ]
でも削除子指定できるscoped_ptrほしい。
と思ったらunique_ptrは削除子していできるのか?

277 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 21:50:35 ]
>>267
それってさ、一連の処理を分割してしまってるわけだけど、initしてからfinishする
までの処理を。逆にメンテナンスせいが落ちそうじゃない。goto使うよりも。

278 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 21:52:09 ]
アホが見ても分かるような用途にしかgotoは使わない。

279 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 21:55:02 ]
>>278
アフォが見てもわかる用途って具体的には?

280 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 21:57:24 ]
>>277
A_initって名前が悪いんじゃねーかな。
たぶん>>263はA_init()は何か実際に処理をさせたいから"巻き戻し"なんて言ってるんじゃ。
だとするとA_init()はA_proc()と読みかえたほうがいいだろ。
そうすれば>>267>>208が言うように処理とリソース管理の分離というデザインになる。

281 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 21:59:20 ]
>>279
278じゃないけど多重breakとかかな?
多重breakできる言語が少しうらやましい。



282 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 22:01:20 ]
それを言うとA_finishも変なネーミングだ

283 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 00:59:43 ]
ファンクショントレースもgotoの話題にでてたけど、みなどうしてる?
ftraceコマンドとかあるみたいだけど、どうも共有ライブラリとかの
ファンクションコールをうまくトレースしてくんないのよね。

284 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 01:21:39 ]
あぁちょっと調べてみたら、valgrindとか色々ありそうやね。

285 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 02:46:36 ]

bool Init()
{
if (!InitHogeGraphics()) {goto FAILED_INIT_HOGE_GRAPHICS;}
if (!InitHogeAudio()) {goto FAILED_INIT_HOGE_AUDIO;}
if (!InitHogeInput()) {goto FAILED_INIT_HOGE_INPUT;}
return true;

FAILED_INIT_HOGE_INPUT:
UninitHogeAudio();
FAILED_INIT_HOGE_AUDIO:
UninitHogeGraphics();
FAILED_INIT_HOGE_GRAPHICS:
return false;
}

こういう使い方もダメなのか?俺的にはスマートな方法だと思ってる
初期化が重なる場合でgoto文を使わない方法って何があるのよ


286 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 02:57:07 ]
>>285
やりすぎかもしれんが・・・w こういうのも出来なくはないかもしれない、
気もしないでもない。
InitUninitFunc funcs[] = {
  {InitHogeGraphics, UninititHogeGraphics},
  {InitHogeAudio, UninititHogeAudio},
  ...
};

bool Init()
{
  for (int i = 0; i < NELEMS(funcs); i++) {
    if (!funcs[i].init()) {
      for (int j = i; j > 0; j--) {
        funcs[j].uninit();
      }
      return false;
    }
  }
  return true;
}

287 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 03:22:22 ]
>>285
gotoいらないじゃん

288 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 03:25:46 ]
>>287
別にgotoなんて無くてもいいんだが、分かりやすいことが重要じゃない?
極論すればwhile()だけで全ての制御構造は書けるわけだし。非常に面倒くさくなるけど。

>>285で、InitHogeAudioの引数の一つがInitHogeGraphicsの結果だったりするみたいな感じで
からみあってたりすると結構面倒くさいんじゃない?

289 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 03:31:26 ]
ほら、ここでもinit関数と、finish関数のAPI仕様の統一の必要性がでてきた。

「gotoは設計に関係ない」っていったやつでてこい。プログラムのアマチュア
が設計だけして、実装まるなげは本当に排除すべきだ。

290 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 03:41:18 ]
>>287
いやまぁ、さきの例はそれぞれのinitとuninitが関数だからそうだけど、
たとえば単なる値の設定とそれをクリアするのに関数を用意するのはバカらしい。
それならgoto使うとかいう選択は十分にあると俺は思うな。

291 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 07:48:56 ]
>>267で結論が出た話を蒸し返してる香具師がいるぞw



292 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 08:07:30 ]
>290 のように後出しジャンケンばかりやっている奴のコードは仕事に使えん

293 名前:デフォルトの名無しさん [2008/02/11(月) 08:15:32 ]
>>285=>>263

294 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 08:51:09 ]
半端なinit/finishを繰り返す時点でダメダメ

295 名前:デフォルトの名無しさん [2008/02/11(月) 10:50:15 ]
>>288
確かにまとめてひとつの関数にすれば数は少なくてすむが、
ラベルの数が多すぎるだろ。

>分かりやすいことが重要じゃない?
分かりにくいんだよ。
制御が入ると、その制御全部チェックしないといけないだろ。
それ、順番間違ったらそれだけでバグになるだろ。


296 名前:デフォルトの名無しさん [2008/02/11(月) 11:05:02 ]
gotoなしで実現しようとすれば、
ラベルの代わりにフラグ変数を使うことになるだけじゃないか?

--
int ret_code = 0;

ret_code = !(a_init() ? A_FAILED : 0) &&
ret_code = !(b_init() ? B_FAILED : 0) &&
ret_code = !(c_init() ? C_FAILED : 0);

switch(ret_code) {
case C_FAILED: c_rollback();
case B_FAILED: b_rollback();
case A_FAILED: a_rollback();
}

return ret_code;
--

かつ、何らかの事情でinit()やrollback()を同一関数内に
まとめて書く必要がある場合(式でなく文になる場合)
こういうコードは書けないのでgotoするしかない気がする。

297 名前:296 [2008/02/11(月) 11:10:43 ]
見直すと意味不明なコードだが気にするなw

298 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:01:53 ]
>>296
> かつ、何らかの事情でinit()やrollback()を同一関数内に
> まとめて書く必要がある場合(式でなく文になる場合)

どんな状況を言いたいのかサパーリわかりません。
ちゃんとした日本語か、仮でいいからCか、どっちかで書いてくれ。

299 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:02:31 ]
>>288
これで「わかりやすい」と思うのは書いた本人だけだと思うぞ。

300 名前:デフォルトの名無しさん [2008/02/11(月) 12:05:02 ]
つーか、UnInitって未初期化のことじゃないか
オマエラ本当にマなのか?w

301 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:12:09 ]
>296 たぶん君は10万行以上のコード書いたことないでしょ。
それにチームでコードを書いた経験もほとんど無いように見受けられる。
素人はgoto避けたほうが身のためだよ。



302 名前:296 [2008/02/11(月) 12:16:53 ]
gotoの代替手段があってそれがgotoより優れているならそうするw

でも>>267>>286みたいに、goto回避を目的としたトリッキーなコードを書くくらいなら
イディオムとして理解できるgotoは素直に利用する方がよっぽどわかりやすい

303 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:19:41 ]
>267をトリッキーと感じる感性でgotoを濫用されちゃ話になりませんな。

304 名前:296 [2008/02/11(月) 12:21:26 ]
>>298

簡単な例で言えば>>267のコードで
hoge_implおよび*_initをインライン化する必要が出たら
フラグをreturnしてswitchで受けるっていうのは無理だわな、
そんときはどうする?ってこと


305 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:21:45 ]
>>267はgoto回避のトリッキーなコードというよりも、
APIから抜ける前にチェックを「確実に」入れるための簡単なtipsなのだが。

306 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:23:14 ]
>>300
Get:UnGetと書くマがこの世に実在してだな…

>>302
IDEでデバッグできる環境なら多少強引でもgoto回避したほうが追いやすいよ。

307 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:23:27 ]
>>304 具体的に。

308 名前:296 mailto:sage [2008/02/11(月) 12:23:33 ]
>>303
LABELを定義してgoto label するのと
フラグ定数をdefine してreturn -> switch するのと何が違うんだ?



309 名前:296 [2008/02/11(月) 12:29:49 ]
こんな感じかな

for (int i = 0; i < 10; i++) {
 if (x[i] == 0) {
  goto A_FAILED;
 } else {
  a /= x[i];
}

for (int i = 0; i < 10; i++) {
 if (y[i] == 0) {
  goto B_FAILED;
 } else {
  b /= y[i];
}

return 0;

B_FAILED:
 something
A_FAILED:
 something
 return -1;


310 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:29:50 ]
意図的に話をループさせて逃げようとしてますな
>>298>>304で答えたことになると思ってんの?

311 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:30:23 ]
>>308 >>305



312 名前:296 [2008/02/11(月) 12:32:26 ]
309をgotoを使わずに上手く書くのってどうする?


313 名前:296 [2008/02/11(月) 12:34:10 ]
要望にこたえて>>309に具体的に書いたので、
そちらも具体的なコードでよろしく

関数分割は無しな。
「美しい設計」にしたがって自由にリファクタリングできる業務なら
議論の余地なくgotoなんていらないだろ。ってかそんな環境ならC使わないし。


314 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:35:43 ]
>>309 いいかげん同じようなコード書くのに飽きてきたよ。

int foo_impl() {
for (int i = 0; i < 10; i++) {
 if (x[i] == 0) {
  return A_FAILED;
 } else {
  a /= x[i];
}

for (int i = 0; i < 10; i++) {
 if (y[i] == 0) {
  return B_FAILED;
 } else {
  b /= y[i];
}

return SUCCESS;
}

int foo() { //公開されるAPI
switch (foo_impl()) {
case B_FAILED:
 something
case A_FAILED:
 something
 return -1;
default:
return 0;
}

で何がこまる?

315 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:38:16 ]
どこまで条件の後付けを続けるのかしら…(´・ω・`)

316 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:38:19 ]
>>313
お前な、はっきり言わせてもらうと、馬鹿じゃねーのか?

「goto使わずに、関数分割してリソース管理と処理本体を分離する設計にしろ、
そのほうがgotoでスパゲッティにせずにリソースの解放を確実に実行できる。」
という主張に大して「関数分割はなしな」じゃ議論から逃げているとしか
受け取りようがない。

317 名前:296 [2008/02/11(月) 12:42:30 ]
>>314
そのコードが実質的に>>309と何が違う?

318 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:46:08 ]
>>317 過去ログ読んでろ。自分のレスだけでなく、相手のレスも真摯に読め。
話はそれからだ。

319 名前:296 [2008/02/11(月) 12:47:28 ]
過去ログ嫁は逃げるときに便利な言葉だな。


320 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:48:32 ]
正直、もう後出しジャンケンのワナビー初心者相手にするのは飽きた。

321 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:50:54 ]
>319 条件の後付けで逃げてるのはキミのほうでしょ…(´・ω・`)



322 名前:320 [2008/02/11(月) 12:51:07 ]
飽きたといいつつ、お前は次の奴も相手するよw

323 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:52:17 ]
>>317 過去ログと言わず、自分のレスの1つ前のレスを読んでみたらどうだ?

324 名前:315 mailto:sage [2008/02/11(月) 12:54:59 ]
>>321もしかして僕のレス見て言ってる…?
>>296へのレスだかんね(´・ω・`)

325 名前:321 mailto:sage [2008/02/11(月) 12:59:38 ]
>>324
もちろん>>319=>>296へのレスだかんね(´・ω・`)


326 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 13:08:40 ]
296はトンヅラを決め込んだようですwwwwwwwwwwwカコワリwwwwwwwwwwwww

327 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 13:11:22 ]
誰もレスしていないが286が良い設計

328 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 13:33:25 ]
>>267が良いコードとされた時代が懐かしいな

329 名前:デフォルトの名無しさん [2008/02/11(月) 13:34:46 ]
なんだ時代は後退してるのか

330 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 13:37:10 ]
それを後退だと思うなら後退だ。

331 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 13:41:26 ]
時代の最先端のコードは>>285です。



332 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 13:41:31 ]
A_init()
A_FAILED
case A_FAILED
A_finish()

ソース上ばらばらなのに意味上は相変わらず密結合
メンテナンス性を悪化させる似非リファクタリングの典型

333 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 13:45:55 ]
>>332 よく読むとわかるけど、ソース上の距離は>285も同じなんだよ。
文句があるのなら>285に言ってくれw

334 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 13:48:45 ]
「処理とリソース管理の分離」を掲げた設計に対して
「ソース上ばらばら」は誉め言葉だよwww

335 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 13:53:31 ]
hoge_impl()に処理を分割した分だけ距離が離れている
A_FAILEDを別途#defineしなければならない分だけ管理要素が増えている

>>334意味不明

336 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 13:57:34 ]
>>335
gotoであちこちのブロックから飛びまくるのに比べれば
> hoge_impl()に処理を分割した分だけ距離が離れている
> A_FAILEDを別途#defineしなければならない分だけ管理要素が増えている
なんて取るに足らない瑣末な問題だな

337 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 13:59:07 ]
>>332の日本語訳

意味上の結合を維持したまま、処理本体とリソース管理を分離できている。
メンテナンス性を向上させるリファクタリングの典型

338 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 13:59:47 ]
勘違いしないでほしいがgoto版との比較で>>267が駄目だという事ではなく
goto版も>>267もどちらも駄目だということ

公開関数であるhoge()から内部一式全てを一人で管理するような小さなモジュールなら
goto版でも>>267でもどちらでも問題にならないだろう。
そうでない規模ならgoto版も>>267もどちらも簡単に破綻する

339 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:01:14 ]
意味不明なのは>>267のコードの
どの部分が処理本体でどの部分がリソース管理なのかが意味不明ということ

340 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:03:33 ]
>>339 それは296にしか答えられない質問では?

341 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:07:14 ]
>>338
つまり、巻き戻し処理のためにgotoのほうが遥かに便利という、
大元の>>199の引用元の主張は×ね。



342 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:08:15 ]
initしてrollbackするだけという、中身が何もない例題じゃあなあ

343 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:12:21 ]
// static void hoge_impl(void *p) {
#define return goto
  if (A_init() != 0) return A_FAILED;
  if (B_init() != 0) return B_FAILED;
  if (C_init() != 0) return C_FAILED;
  if (D_init() != 0) return D_FAILED;
#undef return
  return 0;
// }
// void hoge() {
// switch (hoge_impl(p)) {
#define case label
case D_FAILED:
  D_finish();
case C_FAILED:
  C_finish();
case B_FAILED:
  B_finish();
case A_FAILED:
  A_finish();
  return -1;
#undef case
// default:
//   return 0;
// }

344 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:14:32 ]
嫌goto厨は早く>>213の実例を全否定してまわる作業に戻るんだ

345 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:17:04 ]
>>336
あちこちのブロックから飛びまくるのはgotoを無秩序に使う結果

>>267で何かgotoの重要な欠点が解決されたと思う人は
343と267で何が違うのか考えてみればよい

346 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:21:27 ]
>>345
そうなんだよ。>>343の//で印(w)をつけてくれた部分が重要なんだよ。
あと、#defineの行もミソだね。

こんなつまらんgotoを使わなくても関数で出口を纏めることができるという好例だ。

347 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:22:29 ]
>>344
嫌goto厨?濫用を嫌う人は何人かいるみたいだけど、
gotoを全否定してる人はいないんじゃない?俺も含めて。

348 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:31:06 ]
そんなつまらん実装上の理由で関数分割をしなくとも
gotoさえ使えば綺麗にまとまる好例とも言えるな


349 名前:デフォルトの名無しさん [2008/02/11(月) 14:39:18 ]
最近関数内関数なるものの存在を知ったんだけど、
それがあれば「関数を勝手に作れないからgoto使う」って人も、gotoなしでいけるんじゃないかな。


350 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:44:26 ]
>>347
定石的な使い方すら絶対に許さないと必死になっているように見受けられるがw

351 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:52:36 ]
個人的にはgotoが全面禁止でない限り>>267のようなコードは絶対書かないけどな




352 名前:デフォルトの名無しさん [2008/02/11(月) 15:09:11 ]
適当に書いた。
関数化したくなければブロックで書けば。
処理続行可能フラグとか変かもしれないけど、
戻り値に成功と失敗を返すなら、それをそのままこのブロックの制御に使える。

>>351で参照

// 前処理
flg = true
while(flg){
if error{
flg = false;
break;
}
break;
}

// 主処理
while(flg){
if error{
flg = false;
break;
}
break;
}

// 後処理
return flg;


353 名前:デフォルトの名無しさん [2008/02/11(月) 15:10:22 ]
みす
>>352で参照。

まあ、専用ブラウザならレス番選択して右クリしたら見れる。


354 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 16:02:48 ]
なんか必死なgoto厨房ががんばってるな。
実装上の都合と設計上の都合の区別もつかないとは。

まあ俺も>>267みたいなコードはまず書かないけどなw

355 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 16:11:33 ]
>>352
breakの数が多いのはなんでなんだぜ

356 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 16:13:43 ]
必死な嫌goto厨オツw

357 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 16:29:18 ]
設計云々なら、俺ならgotoを使わないなら最低限こう書く。
hoge_impl()だけ切り出して巻き戻しがベタ書きというのは本能的に気持ちが悪い。

int hoge_init(); // 略
void hoge_process(); // 略
void hoge_rollback(int r) {
 switch(r) { // 略
 }
}

void hoge() {
 int ret = hoge_init();
 if (!ret) {
  hoge_process();
 } else {
  hoge_rollback(ret);
 }
}

でも実際goto使うよ。イディオムだろこんなの。


358 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 17:02:46 ]
>>357
>hoge_impl()だけ切り出して巻き戻しがベタ書きというのは本能的に気持ちが悪い。

まぁハゲドウw

359 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 17:05:54 ]
>>357
俺も
> hoge_impl()だけ切り出して巻き戻しがベタ書きというのは本能的に気持ちが悪い。
に禿同。

こんなつまらんことにgotoを使ったりはせんが。
2重breakには使うけどな。

360 名前:デフォルトの名無しさん [2008/02/11(月) 17:31:18 ]
>>355
whileを、breakで好きな段階で抜けられるブロックとして使うため、2度目の実行をしないためにループの最後にbreakを入れる。
これはgotoの代替として普通使ってると思うけど。
まあ、ループしないのにwhile使うのはおかしいって言う人もいるけど。

んで、while 1として無限ループにしたほうが、breakで抜けますよってのを明示できるけど、
flgを入れてみたのは、全体の流れを制御するflgだと明示しつつ、
最後にbreak入れ忘れた場合でも途中でリソース不足とか2度実行のエラーになれば抜けれて安全かなと。


361 名前:デフォルトの名無しさん [2008/02/11(月) 17:38:15 ]
エラー終了と正常終了を分ける場合は、主処理のブロックの最後で、breakじゃなくreturnするかな。
配列から探して何番目かを返すようなのは、エラーとNULLが逆になる。
基本だよね。

参照は
>>361

// 主処理
while(flg){
if error{
flg = false;
break;
}
return flg; // 常にtrueが返される。
}

// エラー処理
return flg; // エラーなのでfalseが返される。




362 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 17:46:24 ]
粘着同士のレベルの低い言い争い、おわった?

363 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 17:57:38 ]
>>360
なんで do { ... } while (false) にしないんだぜ?


364 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 18:00:24 ]
>>237
> CPUが java のバイトコードを直接実行していると勘違いしている人が多いですね。
> javac ⇒ バイトコード ⇒ インタプリタが実行

バイトコードを実行するのはインタプリタではなくてVM(仮想計算機)だ。
つまり、インタプリタじゃなくてエミュレータな。

365 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 18:01:48 ]
バカ亀乙

366 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 18:07:01 ]
大域脱出に限りgotoを使うという人はgotoの宛先は常にループ直後?

367 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 18:19:53 ]
while (condition)
 while (condition)
  if (something_wrong)
   goto A_FAILURE;
  else something;

while (condition)
 while (condition)
  if (something_wrong)
   goto B_FAILURE;
  else something;

return 0;

B_FAILURE: something;
A_FAILURE: something; return -1;

368 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 18:23:45 ]
大域脱出のときだけgoto使うよ派が書くとこうなる?

result = 0;
while (condition)
 while (condition)
  if (something_wrong)
   result = A_FAILURE; goto END_OF_A;
  else something;
END_OF_A:

if (result == 0)
 while (condition)
  while (condition)
   if (something_wrong)
    result = B_FAILURE; goto END_OF_B;
   else something;
END_OF_B:

switch (result)
case B_FAILURE: something;
case A_FAILURE: something; return -1;
default: return 0;

369 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 18:32:13 ]
またコイツか・・・いいかげんウザ

370 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 18:43:16 ]
コミュニケーション能力より技術力の方が大切だと思うので
こういう議論で野次馬からウザいと思われるかどうかは気にしませんw

371 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 18:56:38 ]
>>363
ああそんなのもあったっけ。
doではじめるとwhileに書き換えられたことがあった。

それはともかく、
前処理に失敗したら主処理を飛び越して後処理ってするとき、
処理する前に判断しないとだめだろ。

それに、break忘れのリスクもあるが、戻り値の初期化忘れっていうミスを防ぐ効果もある。
どちらかというと正常か異常かを錯誤するほうが重大なミスだから
whileよりdoがよいということはないと思う。

あと、エラーなら抜けるっていうまったく同じ目的のためのブロックだから、
前処理も主処理も同じ構文使ったほうがわかりやすいしミスしにくい。

とにかく頭使わずにミスなく書くのが目的だから。




372 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 19:00:40 ]
>>371
>とにかく頭使わずにミスなく書くのが目的だから。

そか。俺は頭使わずにミスなく読めるコードを書くのが目的だから
gotoで書く方が読み易い場面ではgotoを使うんだぜ

373 名前:デフォルトの名無しさん [2008/02/11(月) 19:11:03 ]
大域脱出の場合、pythonなら、breakでの脱出とfor文の判断での終了かが
はっきり分けられてるから簡単だよ。

UWSCってマクロならbreak 2っていう、2重ループ脱出命令がある。

結局自分で工夫しないといけない言語と、想定された言語があるんだよね。
そもそも、breakは内部はjmpつまりgotoなんだから受け側をswitchみたいに
自動で分けてくれてれば余計なif文でスペック落としたり、
スペックあげるためにアセンブラ使ったりしなくてすむのにな。

結局、どの言語でも共通の設計でいけるように最小限の文法にしてしまったから使いにくいんだよな。

>>372
それはいいけど>>285みたいなことされても困るんだよ。
あれは関数内でどうせリソースが有効かどうか判断する必要あるだろ。
if hoge { free(hoge); hoge = NULL }
とかな
だったらとび先は
FAILED_INIT_HOGE_INPUT:
FAILED_INIT_HOGE_AUDIO:
FAILED_INIT_HOGE_GRAPHICS:
とか全部いらなくて
FAILED: 一つで足りるんだよ。

飛び先が一つなのは分かりやすいだろ。
そもそも、gotoが分かりにくくなる理由は、飛び元と飛び先に同じラベル名が出てきてどっちからどっちに飛んでるかいちいち確認が必要だからだよ。


374 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 19:17:57 ]
>>364
少なくともGNUはインタプリタと呼んでいるようだ。

gcc.gnu.org/onlinedocs/gcj/Invoking-gij.html
>gij is a Java bytecode interpreter included with libgcj.

375 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 19:18:04 ]
>そもそも、gotoが分かりにくくなる理由は、飛び元と飛び先に同じラベル名が出てきてどっちからどっちに飛んでるかいちいち確認が必要だからだよ。

これは凄い

376 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 19:20:54 ]
>>361
こんなコード書くやつがいたら、殴ってしまうかもしれない。ペシペシ

377 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 19:22:58 ]
このスレってFizzBuzzすらパスしない奴がごろごろいそう・・・

378 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 19:25:23 ]
中身のないコードで空虚な議論
お前らヒマだな

379 名前:デフォルトの名無しさん [2008/02/11(月) 19:27:03 ]
>>263をちょっと書き換え

  if (A_init() != 0) goto A_FAILED;
  if (B_init() != 0) 80+0; B_FAILED:
  if (C_init() != 0) goto C_FAILED;
  if (D_init() != 0) goto B_FAILED;

こっそりこういういたずらをしていく人がいるんだ。世の中には。
そういうやつと一緒に仕事しなかった人は幸せもん。

携帯開発の軍曹の話は有名らしいが、
あの戦場を生み出すのがこういうことをする人間なんだ。
本当に単なるミスであの地獄が生まれるとか思ってないよな?
ああいうのをやるやつっていうのは、
周りを引きずりおろすことで自分を立派に見せてのし上がろうとする暴力主義のやつら。特に福岡県出身のやつら。


380 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 19:30:26 ]
goto肯定論者の俺でもこのスレのgoto厨には賛成できない

381 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 19:31:09 ]
流れを読まずに横レス。

GOTO 使わず関数使えというのは、太古の昔、非構造化プログラミングから
構造化プログラミングへのパラダイムシフトが現在進行形だった時代の
いわば「スローガン」だと思います。

時代は移り、今は構造化プログラミングが当たり前の時代です。
そのような現在のプログラマが、私たちの先祖が使っていた GOTO 730 と
関数内部での goto FAILED; を同列に論じてしまうことに
私はいささかの疑問を感じるのです。




382 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 19:33:42 ]
> 周りを引きずりおろすことで自分を立派に見せてのし上がろうとする暴力主義のやつら。特に福岡県出身のやつら。

なんだそのビ妙〜な私怨はw

383 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 19:35:12 ]
こっそりって。コミットログすら書かないのか携帯の開発は。

384 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 19:38:12 ]
>>381
小さい関数ならいいが、ブクブク太った巨大関数の中でホイホイと飛ばれると
読むほうは疲れるんだよ。多重breakとか限定された状況ならまだ許せるけどな。
特に考えもせずにgoto多様する馬鹿にかぎって巨大な神関数をつくりたがる。

385 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 19:38:40 ]
>>379
そういうやつと仕事したことないけど、そのコードだとコンパイラ警告
でるんじゃないか?B_FAILEDの行が意味を成していないとか何とか。
擬似コードにつっこむのもあれだが。

386 名前:デフォルトの名無しさん [2008/02/11(月) 19:39:47 ]
>>381
飛び先が一箇所ならいいと思うよ。
>>379みたいないたずらされても、ループするか飛ばすかのどっちかしかないから。
goto FAILED;とかは関数につき1回だし普通は最後に飛ぶだけだし問題になることはないからね。

>>383
証拠が残せるようなシステム使ってないから。

>>382
福岡はそういう地域なんだよ。
完成品チェックって横槍いれて完成してたら強奪。奪ったらパソコン初期化して証拠隠滅。
毎度毎度そればっかり。

完成してたら強奪→正社員
奪われるばっかりの人→派遣社員

いや、別に比喩してるわけじゃなくてね。
社員同士でもそうなんだよ。


387 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 19:41:27 ]
それはgoto以前の問題だし因果関係が明らかに逆。

適切に関数分割できない馬鹿だから
巨大関数の中をgotoで飛び回るコードになる。

そういう馬鹿に言うべきは「処理のまとまりごとに関数に分けろ」であって
そいつに「gotoを使うな」と言ったところで
今度は巨大なネストをフラグで引き回すコードを書くだけ。

388 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 19:42:12 ]
>>385
B_FAILED の後ろがセミコロンからコロンになっているのに注意。
君はだまされる方だな。

389 名前:デフォルトの名無しさん [2008/02/11(月) 19:45:08 ]
馬鹿?

390 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 19:52:16 ]
>>388
きづかなかった・・・w

もしかしてあなたは、そういういたずらをチョコチョコやっているのではな
いかと、疑いたくなってきたなw

391 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 19:52:52 ]
朱に交われば、なんとやら・・w



392 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 19:55:23 ]
>>387
でもこのスレで出てきてるコード読むと、
神関数つくりそうな勢いのコードが目につくんだけど。

393 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 19:56:28 ]
昔一緒に仕事したひとで、
「1関数にreturnは1つしか書かない」
という信念を曲げない人がいた。
その人の書いた関数は、最後にラベルがたくさんあってgotoの山盛りだった・・・

ってあれ?デスマーチスレじゃないのか、ここ。

394 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 20:02:25 ]
>>393
そいつってオレジャネ?

395 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 20:12:00 ]
まさかの運命の再会

396 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 20:29:31 ]
でもさ、数行の排他を必要とする関数で

  lock();
  if (arg == NULL) {
    unlock();
    return E_PARAM;
  }
...
  unlock();

よりも下のほうが好みだなぁ。lock()とunlock()内を関数に分離するのも馬鹿馬鹿しい
ほどの小ささだと

  lock();
  if (arg == NULL) {
    result = E_PARAM;
    goto END_FUNC;;
  }
...
END_FUNC:
  unlock();
  return result;


397 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 20:38:38 ]
一方、俺はfinallyを使った。

398 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 20:45:37 ]
>>397
Cなんだよ、バーヤバーヤ

399 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 21:48:02 ]
某スレより

569 名前:デフォルトの名無しさん [sage]: 2008/02/09(土) 16:46:29
>>566
try finallyは例外を捕まえるための機構であって、ファンクション
トレースのための機構ではない。

デストラクタでロギングするほうがよっぽどスマート。try finally
に依存したロギングよりも。そしてアスペクト指向のほうが
デストラクタロギングよりももっとスマートだといっているのだよ。


400 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 21:53:30 ]
finallyって例外つかまえるための機構?
例外以外にもreturnとかでも呼ばれるんじゃないの?

401 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 21:57:43 ]
C++厨かよ



402 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 21:59:16 ]
gotoはダメだって言っているやつって、
ループ内break、continue、関数の途中のreturnとかもダメだと思ってるの?

403 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 22:01:34 ]
>>402
少なくともこのスレではそんな主張をしているレスは見あたらないね。
で、それがどうしたの?

404 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 22:02:58 ]
そもそもgotoはダメだという主張自体が見当たらないのだが。
できるだけ避けろ、とか、濫用するな、ってのはあるようだがな。

405 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 22:10:13 ]
>402は脳内敵をプロファイリング中でーす

406 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 22:14:51 ]
gotoを書く奴はスパゲティコードを書くという前時代の妄想で脳内敵を作り上げているのはどっちだか

407 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 22:15:56 ]
重要なのはgotoを使うか使わないかじゃなくて
ちゃんとコードレビューしろよってことだ

408 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 22:21:14 ]
>>400
> 例外以外にもreturnとかでも呼ばれるんじゃないの?

正確には、フレームが巻き戻されるのをトラップする機能。
それを利用して、例外のハンドリング(catch)や、後始末の処理(finally)の機構が
実装されている、という表現が正確。

409 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 22:24:36 ]
その「できるだけ」とはどこまでなのかという議論をしていたんじゃ?



410 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 22:24:46 ]
>>407
修正箇所だけのコードレビューとかなら確かにうまくいくけどさ、
何万行のソースコードをレビューで全部網羅するって、
全然うまくいったことがないな。みんなどうしてるのだろ。
ペアプロとかのがよさそうだけど、やったことないや。

411 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 22:28:34 ]
ルール:gotoを使っている関数はコードレビューの対象とする




412 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 22:31:56 ]
>>411
ごめん、俺「関数のreturnは必ず一箇所でやる」ポリシーもってるから、
全部レビュー対象となる^^

413 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 22:33:39 ]
>>412
^^と書いているが俺が去年やってたプロジェクトだと笑い事じゃなくて実際そうなる。

414 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 22:36:42 ]
具体的に言うと、gotoを使っている関数は
フローチャートおよび詳細な動作説明をドキュメントとして準備してコードレビュー。
もちろんそういうドキュメントを用意してレビュー会で説明するのは実装者。
承認となった場合もドキュメントは保管。

なので濫用する奴なんか自然といなくなる。
誰も濫用しないから何万行のレビューなんてのも実際は発生しない。
無問題。

415 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 22:41:30 ]
goto使ってる関数だけって、、、
あほらし。

416 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 22:45:08 ]
if と if and only if の区別も付かない奴か。

417 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 22:49:57 ]
>>414
それだけだとgoto濫用防止だけだけど、ホカにはどんなルールをきめてるん?

418 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 22:52:23 ]
>>414
それとさ、組み込み系だとファンクショントレース機能があるICEとか
結構効果なのだけどさ、それも全開発者に配布?

419 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 22:52:57 ]
結構効果なのだけどさ→結構高価なのだけどさ

420 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 22:55:55 ]
>>417
あれこれ言ったら個人特定されるでしょ

単純なのは、一関数が一定の行数を超えたらとか
for文で()の中に書く内容が「普通じゃない」とか

ちなみに>>412の理由だけでgotoを使った場合はレビューで却下だよ。


421 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 22:58:23 ]
>>420
世の中にドレダケぷろじぇくとまねーじゃが存在しているのか考えれば、
あなたがやっていることと同じようなことをやっている人は無数にいるから、
特定なんてされないと思うぞw



422 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 22:59:17 ]
>>421
じゃあ先に君の関わったプロジェクトで採用されていたルールを教えてくれ

423 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 22:59:32 ]
>>420
「普通じゃない」とかの基準で、資料作成させられて説明させられる
プログラマかわいそすwww

もうちょいまともな基準作ったほうがイインジャナイ?

424 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:00:47 ]
んーとね。いちいち説明しないとわからんかな。

何が「普通」かは実際には定義されているの。ここでは書かないけど。
簡単に言えばループ変数の初期化、終了条件、増分を普通に書くのが普通

425 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:01:39 ]
>>423
説明するのが手間になるようなコードを書くほうが悪いと思うが。

426 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:01:56 ]
>>424
「なにが普通か」の基準をきめるための努力は世の中に一杯あって、
基準めいたものもあるんじゃない?

427 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:02:46 ]
>>425
え〜だって、俺様基準で「普通じゃないから」っていわれて、「フローチャート」
まで用意させられるのだぜw

428 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:06:57 ]
>>427
フローチャートはgotoの場合じゃないの?
forの場合には何かトリッキーな式を書いた場合に
そのトリッキーな式がなぜ必要なのかを説明する
ドキュメント+プレゼンとかそんな感じだと思うが。

429 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:07:59 ]
>>427
俺様標準じゃなくて、一応条件が示されてるらしいぞ。
まあ俺には関係ない話だからどうでもいいと言えばどうでもいいが。

430 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:08:47 ]
gotoに拘る人間に100k行以上の開発蓄積のある人間はいない。

431 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:10:11 ]
1m行ならわからんでもないがさすがに100k行くらいは新人以外誰でも書いてるだろ



432 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:10:18 ]
好意のは時代を超えて無内容さが変わらないものだな

433 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:10:29 ]
>>430
goto厨のコードを読めば、それは明らかだな。

434 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:12:43 ]
>>431
1本の開発で一人100k行、の間違いじゃねーの?

435 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:13:56 ]
そかも

436 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:16:18 ]
goto使ったら詳細資料を用意しなければならないって、
使いたいとこでも使えないじゃねぇか。開発効率悪そう。

437 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:18:36 ]
>>436
goto使うだけの理由があればそれを書けばいいんじゃないの?
処理の流れをちゃんと把握できていればフローチャートだって
簡単に書けるし。

それとも実装ドキュメントの類いを一切書かない人?

438 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:19:10 ]
>>429
いやさ、その根拠が多くの開発者が納得いくものであればいいが、
「goto使ったら、フローチャート描かせて、説明させる。」っていってる
ようなやつが、まともな基準を示せるとは到底思えないのよね。

439 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:20:17 ]
フローチャート書ける程度のショボイ処理ならgotoいらないだろ

440 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:22:47 ]
>>436
わかって使っている人にとってはその通り。
ただし、こういうレビューの目的の半分は、
将来そのコードの面倒を見る他社のために実装資料を残すこと。
それが、大人のマナー

441 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:24:07 ]
>>437
だからさ、goto使うだけでフローチャート書けっていってるのは、
基準が曖昧すぎるといってるのよ。別にgotoが適切な場合もあるし、
そうでない場合もある。whileが適切でない場合もあるし、そうで
ない場合もある。

そんなこといってたら、すべてのプログラムにたいして全部
フローチャート書けという事になるわけで。



442 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:24:44 ]
フローチャート(笑)

443 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:26:59 ]
他社とは限らないな。自社の別チームでも何でも。
要するに、今の実装チームが未来永劫メンテするわけじゃないということ

444 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:29:30 ]
>>443
せめてさ、世の中に「メンテナンス性が高いプログラム」を判別しようとする
努力があって、そのための基準が研究されている事実くらい勉強した上で
そういうこといったほうがいいんじゃない?

goto使ったらコードレビューだ!とかじゃなくてさ。

445 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:30:09 ]
可読性の定量化なぞ不可能さ。
管理面でどうしても何かしたいならば。
goto使用許可を出せる権限を
誰かに付与すればイイんじゃね?

446 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:34:14 ]
>>441
gotoは他の構文要素と比較して、適切に使われない場合が多いという
共通認識があるからこそ、このスレも成立していると思うんだが。

適切なgotoもそうでないgotoもあり、適切なwhileもそうでないwhileもある。
だから全部やるか何もやらないかどちらかにしろ・・・では物は作れない。
現実的な判断として、かけるコストを回収できる効果があるかどうか。

というのが常識として書いていたが、考えてみればここはマ板でなく
ム板だから学生や研究者も当然いるのか。


447 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:38:10 ]
>>446
いや、あなたがいままで言ったような判断基準より、ましな判定基準を
提供するツールはあるし(商用、フリーかかわらず)、そのことすら
知らないまま、ぷろじぇくとまねぇじゃぁをやるのは周囲を不幸にするよ、
といってるだけだけど。

448 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:38:10 ]
>>444
浅学にして知らなかった。ポインタを示してもらえるかな。
研究者ではないので、俺はそういう勉強は足りないと自分でも思う。


449 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:40:22 ]
ところで、俺はそういうプロジェクトに開発者として関わっていたのだが
どこからプロジェクトマネージャという誤解が発生しているのかな

450 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:40:51 ]
コードレビューするのは結構なことだが、
くだらない決まり作って、くだらない作業させるようなプロジェクトは、
メンバのモチベーションも低いだろ。

451 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:50:07 ]
>>448
とりあえず「複雑度」でぐぐってこいw



452 名前:デフォルトの名無しさん [2008/02/11(月) 23:51:32 ]
人の意見に文句だけいって自分は何も提供しない人って周囲のモチベーションさげるよねw
他の人、自分のかかわってたプロジェクトではどうだったのさ。
最低限そのくらい言ったら?

453 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 23:55:58 ]
>>452
お前は、ナニサマナンダ

454 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 00:01:22 ]
>>451
情報感謝。そういえば、そういうのも何か使ったことはあった。
ただ、そのプロジェクトだと単にビルド時に出していただけで、
それがどう使われていたのか知らない。値が高くても低くても特に何もなかった。

その値に適当な閾値を決めてレビューとかやればいいのか?
実際にプロジェクトでどういう運用がされていて、効果がどうだったのかとか、
そういう感想もあれば是非

455 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 00:05:25 ]
これ以上ないくらいスレ違いだな

456 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 00:07:52 ]
>>454
閾値はあるていどキビシ目にきめたほうがいいが、実際にレビューするか
どうかは、閾値が異常な値を示しているコードがバグを良く出すとか、
新規作成のものであるかとかいう事情を加味して考慮したほうがいい。

安定して動作しているモジュールを閾値より外れているから、といって
リファクタリングしたところで新たな不具合を生み出すだけ。
目的を見失わないようにしながら、やればいい。

しかし複雑度の計測もマダマダであって、あくまで一つの参考にしか
ならないが。

457 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 00:45:08 ]
こないだ、goto文が使われているコードを
昔作ったものから持ってった。 キー入力の評価だから
これ以上重たくしたくもない・・・というところ。

select 文二重+if文の底から出るのに breakを掛けるのは・・・

458 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 00:48:03 ]
世の中のプロジェクトは、まだまだ、リーダーとかマネージャとか上司とかの
「コーディング規約」(訳:俺の理解できない しんきのう は使うな)
が支配的なのな。

459 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 00:53:03 ]
分野によるが、多人数が関る(新人やアホが混じりやすい)プロジェクトでは必須
MISRA-Cとか

460 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 00:59:27 ]
MISRA-Cってどの程度使われてるのかね

それはさておき、MISRA-Cを適用するような分野に
新人やアホが混じってるというのはガクブルだな

461 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 01:18:15 ]
MISRA-Cは、新人やアホがまじらないための基準という意味では
まぁ有効だが、そういうやつがいない現場にとっては、無駄な
足かせにしかなっていないという矛盾がある。そして、そういうやつ
が混じらないようにする努力というのは経営陣の仕事であって、現場の
規約を固めるのはあまり意味がない。

ミスを防ぐための基準が、よけいに複雑なコードを生み出して、
逆にミスを生み出してしまうような矛盾が今のMISRA-Cにはある。



462 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 01:56:39 ]
そういうやつがいない現場の数のほうが少ない

463 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 07:33:58 ]
結局、まじめに処理構造を見直すのがマンドクセからgoto使うんでしょ。
gotoマンセ君は多人数での開発経験がないんじゃねーの?

464 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 08:11:19 ]
C覚えて2-3年程度のアマチュアが「goto、ヤベーw」とはしゃいでるだけ。

465 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 11:30:23 ]
>>463
gotoを使ったほうが可読性が高い場合に遭遇したことが無いね?

466 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 12:30:26 ]
基本文献はクヌースのStructured Programming with go to Statementsですかね。
あと、このへんで、
ttp://www.cmagazine.jp/src/kinjite/c/coding.html#index32
gotoと同じくらいダメとされている手を、gotoを避けるためだけに
使ってないか? というのは良い指標かと思う。

467 名前:463じゃないが mailto:sage [2008/02/12(火) 17:17:23 ]
>>465
もちろんあるけど、しっかり考えれば考えるほど少なくなっていくよ。

468 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 17:37:19 ]
>>466
break, continueがだめって書いてあるやつ、
使わなかったとしたらどう書く?
ちょっと想像つかない。


469 名前:デフォルトの名無しさん [2008/02/12(火) 17:41:08 ]
ちなみにこういうやつ書いたんです。
エラーはエラーなんだけどエラーの種類によって動作を変えるってやつ。
コードの参照は>>469


for i = 0 to 2
IE.navigate(str)
REPEAT; sleep(0.1); UNTIL !IE.busy AND IE.readystate = 4

// エラーページチェック
errortitles[4] = Status(ID, ST_TITLE)
for e = 0 to 4
ifb 1 <= Pos(errortitles[e], errortitles[4]) Then
select e
case 4 // エラーがなければ続行する。
break 2
case 0 // 接続エラーなら規定回数試行する。
sleep(2)
continue 2
default // その他エラーならエラー終了する。
SendSTR( メモ帳, errortitles[e] + "<#CR>", 1, false, false )
IE.navigate("about:blank")
result = false
exit
selend
endif
next
// ここには来ないはず
msgbox("エラー判定ミス")
exitexit
next

470 名前:デフォルトの名無しさん [2008/02/12(火) 17:43:44 ]
ちなみに>>469のエラーチェックを関数化したやつもあるけど、
エラーの種類ごとに動作を変えるとしたら、
結局呼び出し元でswitchでそれぞれの動作をしないといけない。


471 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 17:50:14 ]
>>468
breakやcontinueの乱用がだめという話で、
きちんと制御構造がわけるような書き方なら問題ないのでは。
実際List37の例はひどいものだし。



472 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 19:13:37 ]
>>461
ベテランプログラマだけのユートピアを作るのが経営陣の仕事だぁ?

アホか。

473 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 21:57:54 ]
アセンブラ上がりのPGだが、JMP系述語+スタック使わないで
処理できて速い方法とか、日々そんなことばかり考えてる。
メンテナンス性以前に、論理的整合性が失われて美しくないから
なんて話は、俺の頭には何のことかさっぱりわからない。

474 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 22:26:11 ]
ルール:ソースは美しくなければならない

475 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 22:35:59 ]
美しくなくとも。簡潔で軽妙ならば

476 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:14:11 ]
>>472
新人は情報学科出身で、かつ優秀じゃなきゃイラネ

477 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:38:18 ]
>>469
何段抜けるかを数字で書く多段breakって糞じゃね?

478 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:46:47 ]
>>469
こんなソースを新人が書いたら、確実に書き直させるな。

479 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:55:08 ]
まずもって文法が意味不明なのでとりあえず C 風に書き下してみた。

for (int i = 0; i < 2) {
 IE.navigate(str);
 do {
  sleep(0.1);
 } while (IE.busy || IE.readystate != 4);
 errortitles[4] = Status(ID, ST_TITLE);
 for (int e = 0; e < 4; e++) {
  if (1 <= Pos(errortitles[e], errortitles[4])) {
   switch (e) {
   case 4:
    goto BREAK;
   case 0:
    sleep(2);
    goto CONTINUE;
   default:
    SendSTR(メモ帳, errortitles[4] + "<#CR>", 1, false, false);
    IE.navigate("about:blank");
    result = false;
    exit;
   }
  }
 }
 msgbox("エラー判定ミス");
 exitexit;
CONTINUE:
}
BREAK:


480 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:01:50 ]
>>479
途中で、読む気がうせた

481 名前:デフォルトの名無しさん [2008/02/13(水) 00:03:19 ]
VBでもないし何かと思ったらUWSCって何だ
厨房スクリプト言語?



482 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:19:17 ]
ひとまずコード*だけ*読んで、前提条件あんま読んでないけど

>for (int i = 0; i < 2) {
「2回」ループする意図が良くワカラン。下のコード読めばわかるかと思って、
読もうとしたが、途中で挫折。

> IE.navigate(str);
> do {
>  sleep(0.1);
> } while (IE.busy || IE.readystate != 4);
IE.readystate==4だけじゃだめなのかな。IE.busyじゃないときだけ、readystate
が有効になるのか。ならIE.readystateが-1ならbusyとかしたほうが、
"while(IE.readystate!=4)"だけですむしわかりやすい。

> errortitles[4] = Status(ID, ST_TITLE);
errortitles配列の、5番目にいきなり代入してるのが、なんじゃらほい。0〜4番目は、
どうなったのだろう?

> for (int e = 0; e < 4; e++) {
>  if (1 <= Pos(errortitles[e], errortitles[4])) {
このへんと、下をちょっと見た段階でギブアップ

483 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:22:21 ]
余計なものを全部省いて構造だけ残すと、たぶんこう。

void f() {
 while (some_condition()) {
  something();
  for (int e = 0; e <= 4; e++) {
   if (some_condition(e)) {
    switch (e) {
    case 4:
     goto BREAK;
    case 0:
     goto CONTINUE;
    default:
     return;
    }
   }
  }
  exit(-1);
CONTINUE:
 }
BREAK:
 something();
}

484 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:30:02 ]
>>483
やっぱりだめだ・・・こういう感覚を説明して理解してもらえるかわからないが、
そのコードは「普通」じゃない。読むのがすごいシンドイ。

485 名前:483 mailto:sage [2008/02/13(水) 00:32:42 ]
で、俺ならこう書く。
頭の中でしか動かしていないので合ってるかどうかは自信ないが。

void f() {
 int state = 0;
 while (state == 0 && some_condition()) {
  something();
  state = check_state();
 }
 if (state == 4) {
  something();
 }
}

int check_state() {
 for (int e = 0; e <= 4; e++) {
  if (some_condition(e)) {
   return e;
  }
 }
 exit(-1); // not reached
}

486 名前:デフォルトの名無しさん [2008/02/13(水) 00:35:50 ]
まだ、java はインタプリタじゃ無い、って言ってるヤツがいるみたいだけど。
中には、インタプリタじゃ無い、ヴァーチャルマシンだ、とか
もっとひどいのになると、エミュレータだ、とか、もうメチャクチャ言いたい放題・・・
ちょっと呆れたな。
これって、「モモヒキじゃ無い、スパッツだよ!」って言ってるオバサンと同じじゃん。

487 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:38:14 ]
>>485
あぁなんとか理解できる。サンクスw

488 名前:483 mailto:sage [2008/02/13(水) 00:52:25 ]
せっかくだから俺からも一つネタ投下。
>>485 のf()と下のコードはどっちが良いと思う?

void f() {
 while (some_condition()) {
  something();
  switch (check_state()) {
  case 0:
   break;
  case 4:
   goto END_WHILE;
  default:
   return;
  }
 }
END_WHILE:
 something();
}

489 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:57:07 ]
>>488
俺は>>488のほうがわかりやすいw

490 名前:デフォルトの名無しさん [2008/02/13(水) 01:40:46 ]
>>488
case 4:でsomething呼び出して
returnしてしまえばもっと見やすいと思うが。

491 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 01:44:51 ]
(ノ∀`) アチャー

977 デフォルトの名無しさん[sage] 2008/02/13(水) 00:31:00
forループのネスト構造(2重)から一気に脱出したい時に、breakだと1重しか脱出できないので困ってます。
PHPではbreak 2;みたいに書くと2重のループから脱出できるみたいなんですが、C++で同じことができる方法はありますか?
goto文はなるべく使いたくないので……。

980 デフォルトの名無しさん[sage] 2008/02/13(水) 00:50:26
>>978
ググった時に「大域脱出するとき例外処理で〜」とか書いてあるのを見たのですが、それでしょうか。

>>979
表を描くために座標をネスト構造で回しているのですが、
描画する要素がなくなったら外に出すっていうようにしたいんです。
大人しくflagにしたほうが良いですね……。ありがとうございました。



492 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 01:50:32 ]
>>491
コピペもウザイが、意図もよくわからんぞw

493 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 02:05:31 ]
(ノ∀`) アチャー

984 名前:デフォルトの名無しさん[sage] 投稿日:2008/02/13(水) 01:55:45
>>981
後で困りそうですがもっと単純に解決させました。
ループ部分だけクラス内で別のメンバ関数にして飛ばして、抜けたい所でreturnさせました……。

494 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 02:36:14 ]
>>479
× for (int e = 0; e < 4; e++) {
○ for (int e = 0; e < 5; e++) {

>>482
> 「2回」ループする意図
ADSLで瞬間的に切断される場合、数秒後に再度アクセスしたら接続される場合があるので。

>IE.readystate==4だけじゃだめなのかな。
やり方をググってまねしただけなんで。

>5番目にいきなり代入してるのが、なんじゃらほい。
終了フラグです。
まあいいやり方じゃないけどエラーを拾う判定がちゃんと働くかテストにもなるしと入れてみた。
代入してるのはウィンドウタイトル。
あと、ループはループだけ、判断は一箇所にすると、制御が単純でわかりやすいなと思ったんだけど、
forを抜けて「ここには来ないはず」と書いた場所でbreakすればいいだけだった。

もともとが長いスクリプトだったからdefaultをexitで抜けてなかったんで
そんときのループ構造が頭にあって。
やっとすっきりしたと思ったんだけど見直せばもっとシンプルになるもんだね。


495 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 06:20:53 ]
>>486
釣りいいかげんうざい。
あのね、じゃあ具体的にあんたが主張するBASICのようなコードを
JavaVMのバイトコードで示してみやがれっての。できなきゃ去れ。
二度と来るな。

496 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 07:13:52 ]
>>486
せめてJavaVM実装の書籍を1冊でいいから読破してから言え、マヌケ。

497 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 07:30:44 ]
まあ多重break/continueは可読性を落とすね。gotoのほうがナンボかマシ。
多重break/continueもgotoも無いのがベストつーか常識だけどw

498 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 07:53:56 ]
>>494
> やり方をググってまねしただけなんで。

やっぱりね…
そういう姿勢だからbreakでもgotoでも汚ないコードになるんだよ。

499 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 07:55:56 ]
JavaVMのハードウェア実装を知らないんだろうな、>486は。

500 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 08:11:16 ]
JVMについて盛り上がっている人がいるようだが、
どのJVMのことだ?sunか?

501 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 08:12:39 ]
>>500
特定の実装の話じゃないと思うが。つーか、吊りか?



502 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 08:30:34 ]
ハードウェア実装?

503 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 08:43:59 ]
荒らしはスルーで > 兵共

504 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 08:53:16 ]
picoJava のことじゃまいか<ハードウェア実装

505 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 08:58:45 ]
Jazelleとか。
一部ソフトウエアで実行するけど。

506 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 09:05:28 ]
いずれにせよBASICインタプリタとは大分違う罠

507 名前:デフォルトの名無しさん [2008/02/13(水) 09:16:38 ]
>>498
勝手な思い込みで変更する馬鹿よりましだよ。

ぐぐったら出てくるけど、作業をしているか通信をしているかをチェックするんだって。
通信が完了してから作業をするだろうけど、作業が新しい通信を要求するかもしれないだろ。
どんな流れになるかはWebサイトの作り次第だし、テストするには通信帯域を制限したり・・・

コードの流用するならそれが確かに動くかテストするべきだが、
自分でテストできないなら基本的には信用することが必要だ。


508 名前:デフォルトの名無しさん [2008/02/13(水) 09:25:01 ]
busyだけだとフレームのページで途中で抜けちゃうって話がどっかにあった。
まあレイアウトが自由にできる今はフレームなんか使ってないだろうけど。
ReadyStateだけの場合は↓。
つまり両方のチェックが必要。

hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi?print+200510/05100089.txt
IEオブジェクトで読み込み完了まで待たせるのに以下のコードで待たせてますが、
ちゃんと読み込み完了まで待ってくれません。

どのようにすれば確実に待たすことができますか?

Do While IE.ReadyState <> READYSTATE_COMPLETE
DoEvents
Sleep 1
Loop

これならうまくいきました。
Do While IE.Busy = True Or IE.ReadyState <> READYSTATE_COMPLETE
DoEvents
Sleep 1
Loop


509 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 10:21:31 ]
>>507
> コードの流用するならそれが確かに動くかテストするべきだが、
> 自分でテストできないなら基本的には信用することが必要だ。

唖然・・・
おまえみたいのはgotoを絶対に使うべきじゃないし、
そもそもプログラミングをするべきじゃない。

510 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 10:24:35 ]
同意

511 名前:デフォルトの名無しさん [2008/02/13(水) 10:25:49 ]
>>509
なに俺様は完璧とか言ってんの?



512 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 10:58:49 ]
そもそもコードは、誰が書いたものでも信用できない。

513 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 11:10:41 ]
自分自身が書いたコードすら信用できないorz


514 名前:デフォルトの名無しさん [2008/02/13(水) 14:29:42 ]
「try 〜 catch」 を使おうが、「for/while 〜 break ラベル」 を使おうが、
汚いスパゲッティ・コードはいくらでも書ける。
たとえば、フラグ変数作って、break break break break 連発するヤツがいい例。
goto 使うやつに比べれば、「do 〜 while (false)」 や 「switch 〜 break」 を使うなど、
トリッキーなコード書いて得意満面になってるキチガイよりよっぽどマシだ。

要するに、「コードの美しさ・汚さ」と、「goto 使うな」 論は無関係。プログラミングの芸術的センスの問題だよ。
java、php、ruby そのた、言語によって大域脱出の仕方が違うのは
どの方法が正しい・優れているという基準が無いからで、どの言語作者も頭を悩ませている問題なんだろう。

goto の何が問題なのかと言えば、インタプリタやコンパイラの内部処理の都合上、
パフォーマンスを低下させる要因になっているから。
特に while(・・・) {・・・} みたいに { } ブロックを多用する言語は、goto で ”あらぬ方向” へ脱出される事を極端に嫌う。
これは { } によって確保したスタックの管理がくずれるから。
ここらへんは実際に目には見えない部分なので、なかなか理解が難しいと思う。
自分でインタプリタやコンパイラを作ってみれば経験できる事なのだが、いまどき、そこまでするヤツはおっとまた
字数制限がうざいなもっと長文書ければいくらでも語れるんだが続きはまた暇なときにでも。うんこちんちん!

515 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 14:33:20 ]
長文とかどうでもいいからベンチの結果ひとつでも(張|貼)ってくれ

516 名前:デフォルトの名無しさん [2008/02/13(水) 14:39:27 ]
無茶言うなよ。java と basic と php とベンチで比べて何の意味がある?

517 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 14:43:13 ]
>>514
> これは { } によって確保したスタックの管理がくずれるから。

今時、そんなソースコードにべたべたのインタプリタなんて珍しいわ。

コンパイラや、ソースコードを一回全部なめて、内部構造に
するようなインタプリタなら、ローカル変数のアクセスのために、
処理系はスタックの現在のオフセットを常にわかっている必要がある。

だから、ジャンプ元とジャンプ先でスタックのオフセットがずれるなら、
そのぶんをジャンプの直前か直後に調整して終わり。難しい話じゃない。

Javaのバイトコードを示していただきたいなぁあなたにも。

(あ、Rubyのブロックはクロージャだから別物ね)

518 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 14:47:17 ]
gotoでforループの中に飛び込もうとするコードを
はじめて見たときはびっくりしたわ

519 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 14:51:06 ]
というかスタックの奴等こっちでやれ。goto関係ないし。
pc11.2ch.net/test/read.cgi/tech/1188688416/l50

520 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 15:05:50 ]
>>514はN88BASICでブイブイ言わせているビルゲイツ

521 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 15:10:52 ]
MS-DOS版N88日本語BASIC(86)コンパイラー

ナゲー



522 名前:デフォルトの名無しさん [2008/02/13(水) 17:02:48 ]
このすれは「どうして1たす1は2なの?どうして?どうして?」って言いそうな連中ばかりだな。

523 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 17:07:13 ]
コンピュータの気持ちになってみると 1 + 1 は 10 です

524 名前:デフォルトの名無しさん [2008/02/13(水) 17:15:51 ]
>>523

ここでコンピューターの気持ちで会話してきてください。
できれば↓のスレの書き込みの翻訳してくれるとありがたい。

1101011 1100001 1101001 1110111 1100001
pc11.2ch.net/test/read.cgi/prog/1201423463/


525 名前:デフォルトの名無しさん [2008/02/13(水) 17:56:17 ]
goto師はどこいった

526 名前:デフォルトの名無しさん [2008/02/13(水) 18:30:05 ]
回線の問題というか、pingでtimeoutでまくり

527 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 19:08:23 ]
>>518
コーヒーふいたじゃねーかw

どんなコードかちょっと気になるw

528 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 19:25:24 ]
直接gotoを使ってはいないが、
ループの中にswitch-caseで飛び込むコードって奴があるな。
Duff's device でググると出てくる。
(CGの人ならPorter-Duff operatorのDuff氏とか言うと、へーとか思うはず)

529 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 19:40:41 ]
do {             /* count > 0 と仮定 */
 *to = *from++;       /* to がインクリメントされていないことに注意 */
} while (--count > 0);

これを、下のようにして最適化か。こう書いてコンパイル通る
ことすら知らなかったわw

しかし昔memcpy実装させられたとき、条件判定へらす努力したり
ワード単位でコピーしたりしたんだが、標準で用意されて
いたARMのlibcに速度が遠くおよばなくて愕然とした記憶があるなw

switch (count % 8)  /* count > 0 とする */
{
 case 0:     do { *to = *from++;
 case 7:        *to = *from++;
 case 6:        *to = *from++;
 case 5:        *to = *from++;
 case 4:        *to = *from++;
 case 3:        *to = *from++;
 case 2:        *to = *from++;
 case 1:        *to = *from++;
         } while ((count -= 8) > 0);
}

530 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 20:15:51 ]
どのみち、天才の考えることは凡人には理解できないのでメンテ不可ですわ。

531 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 20:21:51 ]
>>514
いいからJavaVMの実装本を読めって。
自分がどんなに時代遅れな発言をしているか
よーくわかるから。



532 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 20:34:59 ]
>>514
> goto 使うやつに比べれば、「do 〜 while (false)」 や 「switch 〜 break」 を使うなど、
> トリッキーなコード書いて得意満面になってるキチガイよりよっぽどマシだ。

日本語に訳すと、
1+1を3と言うやつに比べれば、2+3を6と言う奴や3+1を2と言って得意満面に
なっているキチガイよりよっぽどマシだ。

といったところか。そんな>>514に良い言葉を教えてあげよう。
目糞鼻糞、どっちも糞。

533 名前:デフォルトの名無しさん [2008/02/13(水) 20:50:16 ]
今老舗特集やってるけど、昔からの技術をそのまま受け継いで応用することで普通の工業機械では作れないものを作れてるってさ。
確かに技術は進歩してるし、クソなコードは多いが、よい結果を出しているものはよい方法かもしれない。

紙すきのでやってたけど、手作業を機械でやることで品質の安定したものを大量に低コストにやってるが、
技術の開発は道具こそ工夫するものの人間が手でやっている。

プログラミングで自動化機械といえば、ソースコードのコンパイルとかスクリプトでの作業。
機械設備はコーディングをサポートしてくれる開発環境とかライブラリ。
そういうのを駆使して効率よく新しいものを作るのがプログラマの仕事。

決まりきったやり方が正しいのか最適なのかたまには見直してみるのもいいが、
基本はそれをまねしてやることだ。

何もかも完璧に分かってないといけないとか言ってたら時代の波に飲まれておしまいだ。


534 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 20:59:14 ]
>>533
先人のコードをまねることは大切だ。
だが、自分のプログラムに応用する時には
そのコードをしっかり読んで動作を理解してから。
これができない奴はプログラムを書くべきではない。

535 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 21:00:03 ]
つーか、>>494、かなり必死だなw

536 名前:デフォルトの名無しさん [2008/02/13(水) 21:04:10 ]
>>534
習うより慣れろだ。
正しいか間違ってるかは、うまくいくかいかないかで判断しろ。


537 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 21:08:24 ]
ひょっとして、>>469がうまくいってる例だと思ってる? まさかな。

まあ、少なくとも元のコードの動作を理解できるまでは、
それを使ったコードを人様に見せるのは止めたほうがいい。

538 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 21:09:18 ]
>>536
> 習うより慣れろだ。
> 正しいか間違ってるかは、うまくいくかいかないかで判断しろ。

仕様に照らして、な。
「実は実装依存」なコードを量産されるよ?

539 名前:デフォルトの名無しさん [2008/02/13(水) 21:09:43 ]
>>529
そりゃmemcpyがコンパイラに組み込まれてたんじゃね?
そういう場合、libcのmemcpyは関数ポインタ取るためだけに用意されている。

540 名前:デフォルトの名無しさん [2008/02/13(水) 21:18:43 ]
>>537
しっかり動いてますが何か。
テスト済みですが何か。

541 名前:デフォルトの名無しさん [2008/02/13(水) 21:29:23 ]
論破されて窮地に追い込まれると、
「関係ない話は別のスレでやれ」 とか
「〜の本を読め」 とか言って相手を囲いの外に追いやろうとする
典型的な厨房の集うスレはここですか?



542 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 21:46:36 ]
>>539
コピーするサイズに応じて、最適なコードをそれ専用に生成するってこと?

543 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 21:56:02 ]
>>540
動けばいいと公言する奴のコードに限って実は動かないんだよ。
どうせ自分で何回か使ってみただけなんでしょ?
これだから、ゆとり世代は・・・

544 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 21:58:53 ]
>>540
まさかとは思ったが、本気で>>469がうまくいってる例だと思ってるのか。
このスレのgotoを恐れずに使う兵共にとっても>>469は糞コードだぞ。

545 名前:デフォルトの名無しさん [2008/02/13(水) 22:00:21 ]
>>543
「動く」と胸を張っていえるからリリースするもんだろ。
それが動かなくなるのがバグだろ。
バグに遭遇したことないやつが存在するんなら確かにそういえるかも知れんな。

546 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 22:05:31 ]
gotoの弊害はむしろ保守性の低さだろ

自分だけが使う書き捨てのプログラムなら別に>>469の糞コードでも良し

547 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 22:07:59 ]
>>545
それがさあ、「動けばいい」って奴はロクなテストやってないのが相場なの。
大抵、自分の手元の環境で数回から数十回動かしてエラーが出なきゃOKって程度のテスト。

特に最近のゆとり君は適当にググってきたコードをコピペするからひどい。
何故動くのか理解しないまま数回動かしただけで「動きました」とか言い出す。
もうアフォかと。

548 名前:デフォルトの名無しさん [2008/02/13(水) 22:30:31 ]
>>547
テストしてないのを問題視するのはいいとして、テストもせずに駄目出しするのもどうかと思うが。

549 名前:デフォルトの名無しさん [2008/02/13(水) 22:32:06 ]
>>547
テストしてないのを問題視するのはいいとして、テストもせずに駄目出しするのもどうかと思うが。

550 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 22:35:55 ]
>>548 テストしていないものは駄目出しされて当然だろう

551 名前:デフォルトの名無しさん [2008/02/13(水) 22:38:01 ]
>>550
テスト済みと書いてる字が読めないならプログラム組むな



552 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 22:42:02 ]
>>551
へー、どんなテストしたの?
ちゃんと異常系までテストした?

553 名前:デフォルトの名無しさん [2008/02/13(水) 22:44:15 ]
>>552
どんな異常だよ

554 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 22:47:37 ]
例えば
>>494
> > 「2回」ループする意図
> ADSLで瞬間的に切断される場合、数秒後に再度アクセスしたら接続される場合があるので。

のあたり、実際に切断された場合の回復処理で正常にアクセスできたことを
切断時間などを変えながら複数の状況でテストしたのかい?
切断された後、一旦回復してすぐまた切断される状況は?

555 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 22:51:54 ]
>>469って、「多重continue、ヤベッーw」なワナビー風味だね

556 名前:デフォルトの名無しさん [2008/02/13(水) 22:58:51 ]
>>554
再表示で接続できることは経験的に知っているし、
規定回数全部で接続できなかった場合でもエラーで中断するし、
中断した場合も呼び出し元からやり直すだけだし。

回復して切断したらって話だが、
REPEAT; sleep(0.1); UNTIL !IE.busy AND IE.readystate = 4
これを実行した後には、接続できたかできなかったかのどちらかしかない。
もちろん不完全な取得を完了とした場合、その先で実行できないってだけだが、
実行できなかった場合も呼び出し元で再チャレンジするし。


557 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:00:25 ]
>>556
つまりテストしてないわけね。よくわかった。

558 名前:デフォルトの名無しさん [2008/02/13(水) 23:07:59 ]
>>557
自分で切断はしてないけど切断があったことはログでチェックしてるよ。
 

559 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:09:48 ]
>>558 切断時間はちゃんとカバーされてるのか?

560 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:12:55 ]
おまえら、テストしたかどうか以前に>>469は一見して糞。以上おわり。

561 名前:デフォルトの名無しさん [2008/02/13(水) 23:14:31 ]
>>559
2回続けて失敗する現象はなかった。
昨日だったか2ch鯖にアクセスできなくなってたが、その場合そもそもここまで処理が回ってこないし。

>>560が手本を見せてくれるそうです。




562 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:18:13 ]
>>556
結局わけわからん部分は「呼び出し元で再チャレンジするから」なわけね。
だったら2回ループ回さなきゃいいのに。中途半端なことするから可読性が落ちる。

563 名前:デフォルトの名無しさん [2008/02/13(水) 23:24:55 ]
>>562
前の処理がせっかくうまくいってるのにそれを無駄にすることはないだろ。
接続エラーになったからって前の処理をやり直したら、そっちまで接続エラーになるかもしれないだろ。
これは普通にブラウザ使ってたら分かる話だ。
試行回数とインターバルは経験的に、感覚的にだ。


564 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:27:09 ]
>>563
つまり自分が使っていた環境のことしか考えていないし、
テストも自分の普段の環境から出ていないってことね。
なるほどね。

565 名前:デフォルトの名無しさん [2008/02/13(水) 23:30:13 ]
>>542
・インライン化の恩恵を受けられる。
・人手で最適化されたコードを吐いてくれる可能性がある。
・ポインタの型によって(intptr_t)pの値が最初から
ワードの倍数になっていることを保証できる場合がある。

566 名前:デフォルトの名無しさん [2008/02/13(水) 23:44:24 ]
>>564
待ち時間は秒数で指定してあるし。
IE使ってる時点で使用環境は固定されてるし。


567 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:45:36 ]
しかしつまらんスレだな

568 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:46:10 ]
もういいから
gotoの話じゃないならよそでやれ

569 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 00:10:38 ]
direct threaded code


570 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 01:24:26 ]
gotoを一行足りと書かなくても、
容易にクラッシュしてデバッグすらできない環境があって・・・。
助けてくれ orz.

571 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 01:25:27 ]
>>570
それははたして環境のせいなのか?



572 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 02:50:12 ]
異常系のテストは、まずは、そういう状況をわざわざ作り出して確認するもんだ。


573 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 06:49:41 ]
>>566
> IE使ってる時点で使用環境は固定されてるし。

回線まで固定されるわけじゃなかろう

574 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 07:27:53 ]
>>568
このスレはgotoを語るスレではなくて
finallyや多重breakを語るスレなのでは。

575 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 07:31:57 ]
>>563
> 試行回数とインターバルは経験的に、感覚的にだ。

ひでえ根拠だなwww
うちに配属になった新人がこんなコード書いたら
即刻今のコードを完デリさせて最初から書きなおしだ。

576 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 08:23:43 ]
インマルサット・インテルサットに積む電話交換機屋からブラウザアプリ屋まで
入り乱れての乱戦になっておりますw

577 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 09:01:44 ]
キャプテンも忘れないであげてください

578 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 16:13:06 ]
「テスト済み」なんて堂々と言うからだ。
テストっていうのがどんな物かわかってたら簡単に言えないもんだ。
そういう意味では「ポインタは理解してる」に似てるな。

と、釣りっぽくまとめてみる也。

579 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 18:26:21 ]
ポインタのややこしいのは、ポインタじゃなくて宣言の方だからな。

580 名前:デフォルトの名無しさん [2008/02/14(木) 18:41:46 ]
一応鯖に負荷のかかる土日流しっぱなしにして想定した全部のパターンでうまくいくのは確認してるし
自動でかかる連続投稿規制とアクセス規制と、さらに管理者からのアクセス規制を受けるまでやって、
そーゆー規制食らった場合にも適切に処理できるのは確認済み。

んでえらそうに語ってくれる人がどういう方法でどこまでのテストを要求してるのか知らんが、
サーバーまで自分で作ってるわけじゃないって事を分かっているのかいないのか・・・。
自分でできる範囲ってのは回線を切断したり接続したりだ。

ちなみに、ほとんどの場合は回線の異常じゃなくて、2ch鯖がただシカトしてただけだった。
自分のプロバイダまでのpingは30msで失敗しないけど2ch鯖は120msくらいかかってそのうち1回くらい失敗しまくり。

あと、エラー判定が実は正常なのを異常と判断する場合があるのは最初から分かってる。
完璧に自動で判断することができないんだからしょーがない。


581 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 18:57:51 ]
>>565
あぁ・・・そりゃ勝てなくて当たり前かw
トンクスw



582 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 19:58:15 ]
後出しの多いやつだな・・・

583 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 20:02:05 ]
単体テストと運用時のつなぐ相手のテストとの違いを
子供に理解させるのは無理だろう。

584 名前:デフォルトの名無しさん [2008/02/14(木) 20:27:38 ]
ほうほう。
単体テストってのは1行1行テストすることを言うんですかそうですか。

585 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 20:28:28 ]
な。
無理だろw

586 名前:デフォルトの名無しさん [2008/02/14(木) 20:30:44 ]
あんな短いコードをあれ以上どう分割しろと

587 名前:デフォルトの名無しさん [2008/02/14(木) 20:37:15 ]
「単体テスト」でググレカス

588 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 20:40:00 ]
>>580
結局は自分の環境でしかテストしてないと。
しかも普通に使っていただけで積極的に
様々な状況を設定したわけでもなし。

そういうのはテストとは言わないんだよ。

589 名前:デフォルトの名無しさん [2008/02/14(木) 20:52:16 ]
自分で設定しなくても実際にすべての場合で実行して結果を出してるんだからテストされてるだろ。

単体テストしろとかすべての環境でテストしろとかお前ら馬鹿かと。
たかだか数行のコードテストするために何十個もパソコン用意しろって?


590 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 20:53:36 ]
>>584
ワロタ

591 名前:デフォルトの名無しさん [2008/02/14(木) 21:04:11 ]
だから一度「単体テスト」でググってから物言えカス



592 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 21:19:19 ]
単体テストもせずに「テスト済み」かよ…こりゃダメだ。

593 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 21:21:29 ]
新たな爆弾発言が出ました。
>>589
> 実際にすべての場合で実行して結果を出してるんだから

すべての場合だってさ・・・意味わかって言ってんのかね。んなわきゃないか。

594 名前:デフォルトの名無しさん [2008/02/14(木) 21:22:28 ]
レオン最高
マチルダかわいい

595 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 21:23:49 ]
>>586>>587が自分に言ってる事もわかってないに100ガパス。

596 名前:デフォルトの名無しさん [2008/02/14(木) 21:37:26 ]
IEを単体でテストできると思ってる馬鹿が多いな

597 名前:デフォルトの名無しさん [2008/02/14(木) 21:40:16 ]
ちなみに
+offsetが抜けてデータ構造が変わっていたやつは単体テストで出てきそうなもんだが、
実際には総合テストしないと出てこなかったな。
pc11.2ch.net/test/read.cgi/prog/1192192069/

598 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 21:44:38 ]
>>596
単体テスト用のサーバ立ち上げて、
サーバ側でわざと切断したりレスポンスを変えたり、
外部仕様のカバレッジや実行パスのカバレッジが得られるような
パターンでレスポンスさせるもんじゃないの?

599 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 21:44:40 ]
単体テストにIEは関係ないだろ・・・

600 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 21:48:41 ]
>>596
テストする対象はIEじゃなくて糞スクリプトなんですが。

601 名前:デフォルトの名無しさん [2008/02/14(木) 21:50:36 ]
つまりIEと同じメソッドを持つダミーのオブジェクトでテストしろってことね。




602 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 21:51:05 ]
>>598
そのテスト環境は既に結合テストの範疇だな。
サーバーつないだら単体テストにならないだろ?

結論:「テスト済み」なんて簡単に言うなってこった。

603 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 21:53:00 ]
>>602
いや、結合テストは実稼働のサーバとの接続でやるものでしょ。
実サービスではなく糞スクリプトのテストのためのレスポンスをする
サーバにつなげるのなら単体テストの範疇と思われ。
まあ、スタブを使うようなもんだ。

604 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 21:53:51 ]
>>602
> 結論:「テスト済み」なんて簡単に言うなってこった。

同意。

605 名前:デフォルトの名無しさん [2008/02/14(木) 21:54:48 ]
それにしてもマチルダかわいい。

昔、うちに監禁してた少女は死んじゃったから代わりが欲しいな・・・(冗談)

それはそうと、ぼろいビルの屋上でスナイプの練習してるけど、
周りはもっと高層なビルがたくさん・・・
ライフルが丸見えです。
僕も屋上セックスしてたら隣のビルの専門学校から丸見えでばればれだった。


606 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 21:56:55 ]
>>603
ああ、そういう意味なら納得。
つまりそのサーバーはテスト用に設定した動作をするってことね。

607 名前:デフォルトの名無しさん [2008/02/14(木) 22:23:14 ]
49日連続稼動しないとバグが発覚しない某アレの例もあるからねぇ・・・

608 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 22:32:18 ]
>>400付近の遠いレスだけど、おまえらそもそもデストラクタロギングが
どんなのかしってるのか。

class TRACE {
  TRACE(char *funcnamne, ...) { cout << log... <<endl; }
  ~TRACE() { cout << log.. <<endl; }
}

とかよういしといて、関数に下のように書くだけだぞ。tryもfinallyも
いらない。スコープぬけるときにデストラクタが呼ばれて、
かってにロギングしてくれるから。

void func {
  TRACE trace("func", ...);
  ...実体...
}

609 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 22:36:14 ]
>>608
クロージャがエスケープした時にはどうすんの?
finallyならクロージャがエスケープしようが例外が発生しようが
ちゃんとロギングできるわけだが。

610 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 22:39:45 ]
>>608
それは言語依存でしょ。
フルGCな言語や処理系だとスコープ抜けた直後にデストラクタが叩かれる保証はない。

611 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 22:43:45 ]
>>609
てか、そもそもC++にクロージャなんてものあったけか



612 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 22:45:06 ]
>>611
ないけど、このスレはC++限定じゃないでしょ?

613 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 22:47:06 ]
じゃぁtryもfinallyも前提に出来ないだろ、すべてコード上にログを
書くしかない。ならgotoまんせーだな、ファンクショントレースには。

614 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 22:49:20 ]
>>613
C++限定じゃないがC限定でもない。
JavaでもPythonでもJavaScriptでもModule-3でもアリじゃないの?

615 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 22:50:15 ]
CとC++のみが漢の言語

616 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 22:55:27 ]
>>614
わかった。じゃぁまずは、「デストラクタロギングさん、馬鹿にしてすいません。
tryとfinallyを使ったロギングなんてクソです」といえwww

617 名前:デフォルトの名無しさん [2008/02/14(木) 22:56:32 ]
そういえばC言語のswitchはbreakで抜けるブロックだったな。
他の言語ではifの拡張だから普通にbreakでループが抜けれるから
>>469みたいなselect breakはおかしく見えちゃうんだな。


618 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 22:56:33 ]
デストラクタでロギングできる言語よりも
finallyでロギングできる言語のほうが多いだろうな

そもそもfinallyに比べてデストラクタでロギングする
メリットが見えないのだが

619 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 23:00:09 ]
>>616 ワケワカランwww

620 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 23:34:48 ]
C++厨がファビョりました

621 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 00:55:51 ]
>>618
>そもそもfinallyに比べてデストラクタでロギングする
>メリットが見えないのだが

おまえバカだろ?



622 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:16:59 ]
C++にfinallyが無い理由を考えろ

623 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:18:43 ]
finallyロギングは使うたびにfinallyブロックごとコピペする必要がある。
デストラクタロギングなら変数宣言だけコピペすればよいので、
finallyロギングよりコピペ量が少なくて済む。
その点ではC#/VB.NETのusingも次点でまあ使えると俺は思う。

ロギング以外にも言えることだけど。



624 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:40:34 ]
aspect 最強説

625 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:41:27 ]
粘着アスペルガー最狂

626 名前:デフォルトの名無しさん [2008/02/15(金) 04:38:51 ]
うちのご近所さんたちが次から次にご近所さんを殺しまくったのは、
多分年金を全部懐に入れてて、いざ受け取ろうとしたら一円も受け取れなかったから、
「ばれたら仕方がない」って殺しまくったんだろうな。


627 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 06:41:34 ]
>>623
その程度の利点かよ・・・
finallyだってマクロ一発じゃん・・・アフォらし・・・

628 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 07:23:28 ]
>>613
なんだそりゃギャハwwwwwwww
オマエ、もうちょっと色々な言語、できれば現代的な言語を勉強しろよwww

629 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 08:31:18 ]
Aspect指向なんてどうでもいい。
CLOSのbefore-afterさえあれば十分。

630 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 08:50:21 ]
おまえら朝っぱらから元気だな。
で、俺も>>623以外のデストラクタロギングのメリットを知りたい。

デストラクタロギングはどうも間接的すぎて気持ち悪い。
つーか、そのうちオブジェクト解放のタイミングが変わったら
とたんに使えなくなるような。
トリッキーではないが正道でもない方法に見える。

631 名前:デフォルトの名無しさん [2008/02/15(金) 13:28:19 ]
スクリプト厨の次はデストラクタ厨かよ
勘弁してくれ



632 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 15:51:00 ]
急激に誰もいなくなった。
決算期前の需要で皆忙しいのかな。

633 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 16:56:03 ]
>>627
マクロが使えるなんていい環境ですね。

634 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 17:36:29 ]
とりあえず、仕様の表明の不十分なコード片を書くのはやめてもらいたい。
読まされるほうはたまったものではない。

635 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 17:49:12 ]
>>634
読まなければ、いいじゃねーかw

636 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 17:59:15 ]
たしかにw

637 名前:デフォルトの名無しさん [2008/02/15(金) 18:02:53 ]
>>529
このコーディングがC言語が生まれて10年後くらいに発見されたとかwikiに書いてあるけど、
C言語作るときにこの書き方を想定して作ったからC言語ではswitchをbreakで抜ける仕様になってるって分かる人いるかな。


638 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 18:05:50 ]
>>637
全く意味がわからないな。
switch を break で抜けられる全部の言語で >>529 が書けるなら信じてあげるよ。

639 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 18:16:29 ]
>>638

>>637の言う
> switchをbreakで抜ける仕様
って、fall throughのことで、
ttp://www.catb.org/jargon//html/F/fall-through.html

breakが無いと、次のcaseが現れても抜けない仕様、という
ほうが正確かな。

複数のcaseをうまく利用することができる、という特性を生かす趣旨が
ある仕様ということはわかるけど、ループと組み合わせるという技は
発見された、としてもいいんじゃないかと思うけど。

640 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 19:00:57 ]
>>633
君のところじゃboostも使えないのかい?そりゃ可哀想に。

641 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 19:46:19 ]
むしろ開発者の一存で、boostが使えることが少ない



642 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 19:49:36 ]
デストラクタでログ取ると、ローカル変数のトレースを取れないんだよね。

643 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 20:23:45 ]
>>642
トレースしたいローカル変数より後にロギング用の変数を宣言するのはダメ?
リリース版でログを取るのでなければ、boost::formatとか使わなくても
printfベースの実装で十分だと思うし。

644 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 20:41:48 ]
>>643
トレースの対象がオブジェクト(またはその属性)の場合は?

645 名前:デフォルトの名無しさん [2008/02/15(金) 20:45:03 ]
昔、
goto aho:
...
{
int baka;
...
aho:
...(bakaを使う)
}

ってやったら、bakaを確保せずにいきなりahoに飛ぶコードを吐かれた(MS-Cかな?)。
それ以来gotoは完全封印


646 名前:638 mailto:sage [2008/02/15(金) 21:24:01 ]
>>639
fall through だけじゃダメだと思う。
「case は switch 直下に無くても文法的に正しい」 って仕様が含まれている必要がある。

C は case 〜 をそれ以外の単なるラベルと同列に扱うという仕様になっているから、
>>529 のように switch 直下ではなく while の中に case を書いても正しく動く」
ということが後になって発見(正確には”確認”)されたんじゃないかと。


ところで、ふと java の仕様見たら
www.y-adagio.com/public/standards/tr_javalang/14.doc.htm#35518
思いっきり >>529 が書いてあるし。

647 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:35:04 ]
>>640
え、C++だったの?
627でfinallyって言っているからC++はないと思っていたんだけど。

648 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:52:40 ]
>>644
テンプレートで超がんがる。
DebugLogger d("%d %d\n", &var, std::make_pair(obj, &A::func));

649 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 10:08:37 ]
>>645
そんな入れ子の外から飛び込むのは、どんな言語の場合でも
自殺行為に近いだろ。 入れ子の外で定義が終わってれば
別だがね。

650 名前:デフォルトの名無しさん [2008/02/16(土) 12:03:37 ]
Doで始まるループなんだけど最初の1回だけ途中までは飛ばしたいときってあるよね。
多分そういうときに使ってるんだと思うけど、
普通はなんとかする。


651 名前:デフォルトの名無しさん [2008/02/16(土) 12:29:19 ]
goto使いたがる厨房は局所的な制御ばかり見て全体的な構造の見直しをしない、と、燃料注入w



652 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:31:14 ]
C言語の仕様としては>>645みたいなのはどうなってるのか、詳しい人教えてよ

653 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:35:43 ]
少なくとも変数の場所は確保されてるべき。
(最適化でレジスタに割り当てられると見た目じゃわかんないけど)

goto foo;
{
 int bar = 44;
foo:
 printf("%d\n", bar);
}

で 44 が表示されるべきだったかどうだったか調べてみる...

654 名前:デフォルトの名無しさん [2008/02/16(土) 12:49:41 ]
647はfinallyの処理系依存実装を見たことないのかと

655 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:40:44 ]
>>652
同じ関数内のループに飛び込んでるだけだろ

656 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 15:39:42 ]
>>652
普通の実装ならブロックローカルな変数も関数呼び出した時点で
スタックに領域確保するんじゃねーの?

657 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 15:51:47 ]
>>651
gotoは「局所的な制御」にしか使わないから。
そして「構造」は「常に全体が対象」だ。

燃料としては不足だ。

658 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:03:24 ]
>>657
> gotoは「局所的な制御」にしか使わないから。
> そして「構造」は「常に全体が対象」だ。

もちろん>>651はそれが前提で書いていると思うが?
全体を見ずに局所だけを見ているからgotoを使いたがる
というのが>>651の趣旨だと思うが。

659 名前:657 mailto:sage [2008/02/16(土) 17:02:23 ]
>>658 んじゃ。
全体を見て局所も見ていればgotoを使いたがらない。
という命題は正しいのかい?

660 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 17:15:16 ]
>>659
それは言語の設計思想によるんじゃないかな。
goto前提な言語なら自然とgoto使うことになるし、
goto原則使わないのが前提な言語を使っていて、
かつ、全体の構造を考える習慣がついていれば、
gotoが必要っぽい状況になったら自然と全体の
構造を疑う方向に目が向くと思うよ。


661 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 17:57:34 ]
gotoを使いたくないだけの理由で構造を変えるのは、本末転倒にならないように気をつけないとな。



662 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:21:23 ]
gotoが必要になるのは全体の構造がおかしい兆候なのではと疑うのと、
gotoを使わないだけの理由で全体の構造を変えることとでは
天と地ほどの差があるけどな。

663 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:07:13 ]
紙一重だろw
構造を見直したい程gotoが気になるなら、まず
設計に対する姿勢から疑わないと。


664 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:09:49 ]
かわいそうな>>663には見直すことと疑うことの違いがわからないらしい。

665 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:13:47 ]
初心者向けの指標としては有りだろう。

666 名前:デフォルトの名無しさん [2008/02/16(土) 19:14:42 ]
>>664 無駄だって、相手はgotoを使いたいという結論が先にある人なんだから。

667 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:16:31 ]
>>664は見直したら必ず変更しなくちゃ行けないと思ってるらしい。

668 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:17:27 ]
わかりやすい自作自演をみた。

669 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:32:20 ]
>>665
> 初心者向けの指標としては有りだろう。

gotoを使いたがるのは初心者が多いという意味で賛成だ。

670 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:34:40 ]
>>667
そんな君の発言「紙一重」wwwwwwwwwwwww

671 名前:デフォルトの名無しさん [2008/02/16(土) 19:39:57 ]
疑うことと構造を変えることを紙一重と言っちゃってるからねえ
かなり苦しいんじゃないの?



672 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:46:22 ]
燃料に引火しちゃったようで、ナイーブなgoto厨さんwwwwwwwwwwwwwww

673 名前:665 mailto:sage [2008/02/16(土) 19:56:31 ]
>>669
そういう意味での賛成は遠慮させていただく。

「どうしてもgotoが必要な場面になったら、構造を見直してみよう」
のようなアドバイスは、初心者向けにはいいかもしれない。
終端条件やデータ構造を見直したら、もっといい方法がみつかるかもしれない。
けれど、そのgotoが適切だと思うなら、見直す必要もない。
gotoはあくまでもきっかけとして、である。

クロージャとかlambdaが欲しいな、と思いながらgotoを書く事もある。
goto(と飛び先のラベル)の場所が適切なら、問題ない。


674 名前:665 mailto:sage [2008/02/16(土) 19:57:15 ]
自演醜ス・・・

675 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:58:19 ]
なんでgotoについて語るのに構造のことまで持ち出すんだかが
全然わかんない。論争根源の論文の
www.cs.utexas.edu/users/EWD/ewd02xx/EWD215.PDF
と同様なネガティヴキャンペーンにしか見えないぞ。

676 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 20:00:06 ]
問題ないと言ってgoto乱発する馬鹿は
他人のgotoまみれコードを保守した経験がない
ビギナーさん

677 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 20:06:45 ]
>>676 ぐちならマ板行でな。

678 名前:デフォルトの名無しさん [2008/02/16(土) 20:12:36 ]
自演認定したがる奴が自演常習者

679 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 20:15:42 ]
↓次はsageで同意、と。

680 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 20:15:59 ]
まさか「gotoを使う人間は使いたいから使う」などと思っている人はいないよね?
gotoつかう人は「goto使ったほうが良い」と判断しているから使うんだけど。
gotoを使わずに簡潔に書けるならば、好き好んで使ったりはしないよ。

681 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 20:16:45 ]
ちぃ、はずしたか。



682 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 20:20:09 ]
>>680
> gotoつかう人は「goto使ったほうが良い」と判断しているから使うんだけど。

その判断が狭すぎるという話じゃなかったのか?

683 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 20:35:45 ]
goto厨は視野狭窄ということがプログラミングだけでなく議論においてもそうだということが証明されましたな

684 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 20:43:02 ]
存在しない相手に対して勝利宣言か・・・

685 名前:680 mailto:sage [2008/02/16(土) 20:48:32 ]
>>680
ああそうさ。必要も無いのにgoto使うというのはたしかに判断が狭いということだ。
これは開発担当のスキルの不足を反映しているのに過ぎない。
この問題の根源は開発担当に対するスキル管理の不足/欠如だよ。
悪いのはgotoやgotoを使ったプログラムやgoto使った人間では無いことを確認したいわけよ。

だけどgotoの使用判断は開発担当の職掌さ。
どのようなロジックにおいてもgotoを使わないほうが優れているという証明が出来ない限り、
goto禁止ルール自体は不当なルールだと言いたいね。

686 名前:680 mailto:sage [2008/02/16(土) 20:49:45 ]
>>682
だた。失礼

687 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 20:51:54 ]
プログラミング言語を作るときには、
徹底的にgotoを使わなくて済むようにしてほしいね。
多重breakをできるようにしたり、try-catch-finallyにデストラクタを用意したり。

688 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 20:53:44 ]
それはJavaだ

689 名前:デフォルトの名無しさん [2008/02/16(土) 20:54:14 ]
美しいgoto文だって書けるのに。
汚いgoto文を見ただけで、「goto禁止」は、まりにも短絡的すぎ。
for〜continue〜break文にせよ、do〜while文にせよ、if文にせよ、try〜catchにせよ、
ネストしまくりでワケワカラン汚いコードを書くヤツは、そこらへんにウヨウヨいる。
いったいどうやったら、構造化言語をここまで汚く書けるのか、もう信じられんほど。
なのになぜ、goto「だけ」がこれほどまでに差別されなければならないのか。
・・・ま、そこらへを書くと、またキチガイが湧くんでホドホドにしとくが。
美しく書けばgotoは害では無い。これは確か。

690 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 20:56:25 ]
>>685
とりあえず、モチツケ。
無条件goto禁止、については合理的な理由の説明は無かったはずだ。

691 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 20:56:46 ]
それはわかるけど、現実は汚いgotoを書く奴が9割9分。
goto禁止したところで、そのうち9割くらいはフラグ付きwhileとか結局スパゲティを書く気がするけど。



692 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 21:02:41 ]
>>689
gotoには「最後の手段」の側面もあるからね。
gotoとラベルの置き場所の自由さっぷりは両刃の剣なわけで。


693 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 21:04:39 ]
で、自由奔放にgotoを使いまくってるコードを最後にみたのは何時なんだ?
なんかもう脳内事例で語ってるようにしか見えないんだが。

694 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 21:06:34 ]
例えば、Linux kernel ではエラー処理に飛ぶためのgotoをいっぱい使ってるけど
全然読みづらくない。こういうgotoは全く問題にならないし、
Cで綺麗にエラー処理を書こうとしたらああならざるを得ないと思うけどな。

>>691
人格攻撃は生産的じゃない。もっと実になる議論をしようや。

695 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 21:08:16 ]
g○ヒo きたないgoto

696 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 21:14:12 ]
肯定派
多重ループからの抜け出し、エラー処理、リソースの開放で定型的に使うならありだろ。
gotoを避けるというのを関数分割のタイミングにするのは馬鹿らしいし。
大体goto使ったが為のスパゲッティコードなんて大昔の非構造化BASIC以来見たことないぞ。

否定派
goto駄目。絶対。goto使う奴はコードが汚く低能!

697 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 21:24:22 ]
>>696を読んでいるとgoto厨の視野の狭さがよくわかるという罠www

698 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 21:26:41 ]
Linux kernelのソースクオリティを高いなんていう香具師の言うことは、
その程度の扱いを受けて当然だな。

699 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 21:28:11 ]
構造を見直してもっといい設計にすれば使わずにすむgotoがあるという話と
gotoを自由奔放に使いまくるという話の間にはずいぶんと開きがあることに
>>693が気付く時は来るのだろうか。。。(遠い目

700 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 21:34:55 ]
そもそもgoto絶対禁止なんて主張してる香具師、このスレにはいないと思うが(藁

701 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 21:35:50 ]
%sのソースクオリティを高いなんていう香具師の言うことは、
その程度の扱いを受けて当然だな。



702 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 21:37:07 ]
絶対禁止はないよな。
ただ現存する用法すべてに盲目的にケチつける奴がいるだけでw

703 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 21:39:47 ]
>>702 そんな香具師いるか?
つーか、そもそも現存する用法すべてのリスト、このスレに挙がってるのか?

704 名前:デフォルトの名無しさん [2008/02/16(土) 21:46:24 ]
setjump, longjump だって綺麗に書きさえすればいい。

705 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 21:48:28 ]
poor man's continuationか。
まあ使えばいいんじゃない?

706 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 21:50:22 ]
goto厨は、なんかもう脳内事例で語ってるようにしか見えないんだが。

707 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 21:53:43 ]
>>698
まぁまともな会社で、まともな品質のプログラムがかけるプログラマでも
Linuxのソースクオリティで書けるプログラマなんて少ないけどな。

708 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 21:54:10 ]
>>704
ナイ、ナイ

709 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 21:56:40 ]
時代は変わったな。
Linuxカーネルの可読性の低さはBSDハッカーの格好の標的だったのに。
今じゃLinuxカーネルが高品質と言われるようになったか。。。(遠い目

710 名前:デフォルトの名無しさん [2008/02/16(土) 21:59:19 ]
具体例には例外なく難癖つけるくせに
そう指摘されるといや、そんなことないよとごまかす嫌goto厨。
もう年相応の趣味を持てずただリアルでの孤独を癒す為に宗教論争スレに常駐してるだけみたいだね。

711 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 22:00:11 ]
>>708
Cのマクロで例外処理を実装するような使い方はきれいなsetjmpの使い方だと思う。



712 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 22:00:19 ]
>>710 goto厨は、なんかもう脳内事例で語ってるようにしか見えないんだが。

713 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 22:01:45 ]
>>705
なるほど、poor man's continuationね。確かにそうかも。

714 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 22:05:48 ]
まぁ継続なんて、使わんよ。

715 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 22:07:12 ]
>>711
Cで例外つっても、単にジャンプすればいいだけじゃなくて、それ以外にも
C++でいうデストラクタの処理とか色々必要になるわけで。setjmpはつかわないわ。

716 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 22:07:50 ]
Linuxカーネルでのgotoの使い方の話なのに、Linuxカーネルのコードの
クオリティの高さに話を逸らしてるお馬鹿さんがいますね


717 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 22:26:19 ]
Linuxカーネルの可読性の低さの話なのに
無関係だということにしたい人がいますね

718 名前:デフォルトの名無しさん [2008/02/16(土) 22:27:27 ]
>>715
どうせマクロなんだからfinally実装しちゃえばいいじゃない。
NSAutoreleasePoolみたいに「暇なとき始末してね」と予約しておいて、
早めに開放したい資源(ファイルディスクリプタとか)を利用した後や、
イベントループのように定期的に戻ってくる場所で開放する手もある。

719 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 22:33:20 ]
>>718
そんな難しいことできるわけないだろ
お前実装してみろよ

720 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 22:33:49 ]
だいたいgotoダメって行ってるやつは、
3年目くらいで、やっとできるとまわりから認められ、
ちょっと自信が付いてきたやつ。
後輩に教える機会も増えて、得意になって、よく分からんくせに
中途半端な知識でものを語ってるんだろ。
gotoの話なんて、もう十何年も繰り返されてるのに。

721 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 22:35:04 ]
もう十何年も繰り返されていてもまだgotoにしがみついてる厨房がいるねえ



722 名前:デフォルトの名無しさん [2008/02/16(土) 22:37:11 ]
3年目の先輩に頭ごなしに教えられて反発してるビギナー君の登場です

723 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 22:40:58 ]
これまでの傾向

-嫌goto厨の主張はいつも抽象論の域をでない
-抽象論でgotoを否定するだけで、「おえらいさんが言ってただろ?だから従え」
 という傲慢な主張しかない
-goto肯定派の具体的な例に関しては、「構造的に考えれば、とか、構造を再度
 検討しなおせば」とか、これまた抽象論でしか返さない。

要するに、嫌goto厨の主張なぞその辺の学者のタワゴトにしかすぎず、
なんら実務面の利点を示しているわけではない。

724 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 22:41:48 ]
スパゲッティコードは絶滅したと思っている人必見。>>469
こんなコードを書く香具師がgotoを使ったらどんな恐しいことになることか。

725 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 22:43:00 ]
>>723
goto厨の提示したソース、どうにも実務的なのはないのだが。
あるというのならアンカーで示してくれ。

726 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 22:46:13 ]
これまでの傾向

-goto厨の主張はいつも抽象論の域をでない
-抽象論でgotoを肯定するだけで、「おえらいさんが言ってただろ?だから従え」
 という傲慢な主張しかない
-goto否定派の具体的な例に関しては、「実用的ではない、とか、
gotoでも害がなければ」とか、これまた抽象論でしか返さない。

要するに、goto厨の主張なぞその辺のワナビーのタワゴトにしかすぎず、
なんら実務面の利点を示しているわけではない。

727 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 22:48:49 ]
>>723にも>>726にも禿同
ようするに目糞鼻糞

728 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 22:50:36 ]
GOTO 1

729 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 22:59:31 ]
goto厨ってなんだよ。
goto使ったらダメとにかくダメって言ういかれぽんちに、
んなわけねーだろって言ってるだけだろ。

730 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:02:24 ]
>>729
せいかい^^

731 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:31:19 ]
ごとーさんがお怒りですよ



732 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:35:00 ]
>>731
だれ?

733 名前:GOTO mailto:sage [2008/02/16(土) 23:56:15 ]


734 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:18:43 ]
見やすかったらどっちでもいいよ

735 名前:デフォルトの名無しさん [2008/02/17(日) 03:32:45 ]
>>719 でけた。TRY〜END_TRYの中からreturn出来ないけど。
typedef struct ex_handler_rec_ ex_handler_rec_;
struct ex_handler_rec_ {
    ex_handler_rec_ *volatile prev_;
    jmp_buf jbuf_;
    const char *volatile ex_type_;
    void *volatile ex_data_;
};
ex_handler_rec_ *volatile current_handler_ = NULL;

#define EX_ABBREV(x) x
#define TRY { \
ex_handler_rec_ EX_ABBREV(ex_handler_); \
int EX_ABBREV(need_rethrow_) = 0; \
if (0) BREAK_TRY; /* mandate finally clause */ \
EX_ABBREV(ex_handler_).prev_ = current_handler_; \
current_handler_ = &EX_ABBREV(ex_handler_); \
if (setjmp(EX_ABBREV(ex_handler_).jbuf_) == 0) {

#define BREAK_TRY goto EX_ABBREV(break_entry_)
#define RETHROW goto EX_ABBREV(rethrow_entry_)

#define CATCH(extype) \
} else if (!extype || !strcmp(extype, EX_ABBREV(ex_handler_).ex_type_)) { \
   void *EX_ABBREV(ex_data) = EX_ABBREV(ex_handler_).ex_data_;
#define CATCH_ALL \
} else if (1) { \
   void *EX_ABBREV(ex_data) = EX_ABBREV(ex_handler_).ex_data_;

736 名前:デフォルトの名無しさん [2008/02/17(日) 03:33:37 ]
#define FINALLY \
} else { \
   if (0) goto EX_ABBREV(rethrow_entry_); /* supress warning */ \
EX_ABBREV(rethrow_entry_): \
   EX_ABBREV(need_rethrow_) = 1; \
} \
EX_ABBREV(break_entry_):; \
if (current_handler_ == &EX_ABBREV(ex_handler_)) /* no exception */ \
   current_handler_ = EX_ABBREV(ex_handler_).prev_; \
{

#define END_TRY } \
if (EX_ABBREV(need_rethrow_)) \
   throw_exception(EX_ABBREV(ex_handler_).ex_type_, EX_ABBREV(ex_handler_).ex_data_); \
    }

void throw_exception(const char *ex_type, void *ex_data) {
    ex_handler_rec_ *handler = current_handler_;
    current_handler_ = handler->prev_;
    handler->ex_type_ = ex_type;
    handler->ex_data_ = ex_data;
    printf("throw_exception %s\n", ex_type);
    longjmp(handler->jbuf_, 1);
}

737 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 03:40:13 ]
こういう風に使う。EX_ABBREVマクロを再定義することでTRYのネストができる。
TRY {
#undef EX_ABBREV
#define EX_ABBREV(x) a_##x
    TRY {
        if (cond)
            BREAK_TRY;
        throw_exception("hoge", cond2 ? "abc" : NULL);
    } CATCH("fuga") {
        if (a_ex_data) /* throw_exceptionの第二引数はEX_ABBREV(ex_data)に入る */
            printf("%s fuga\n", (char *)a_ex_data);
        else
            RETHROW;
    } FINALLY {
        printf("inner finally\n");
    } END_TRY;
#undef EX_ABBREV
#define EX_ABBREV(x) x
} CATCH("fuga") {
    printf("fuga %s\n", ex_data);
} FINALLY {
    printf("outer finally\n");
} END_TRY;

738 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 03:46:42 ]
きめぇぇぇぇ

739 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 04:21:39 ]
具体例なんて、普及しているオープンソースのコードを引っ張ってきて
grep goto すりゃ見つかるだろ。


740 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 04:25:13 ]
return 時に実行してくれない finallyに何の意味がある?
あと、for,whileなどのループ内では、このマクロは使えないね。
(BREAK_TRY のあと、ループ脱出条件を再度判定してbreak文を実行しなきゃならない:二度手間)

741 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 04:47:21 ]
>>725
2chは行数制限があるから実用されているコードを貼るのは無理だね。
アンカーではなくポインタは示すので、あとは自分で調べて。
# apache が実務的なコードでないという奴はいないよな?

$ grep -r -n goto httpd-2.2.8/server
httpd-2.2.8/server/vhost.c:717: goto bad;
httpd-2.2.8/server/vhost.c:747: goto bad;
httpd-2.2.8/server/vhost.c:754: goto bad;
httpd-2.2.8/server/vhost.c:904: goto found;
httpd-2.2.8/server/vhost.c:916: goto found;
httpd-2.2.8/server/mpm/netware/mpm_netware.c:421: goto got_listener;
httpd-2.2.8/server/mpm/winnt/child.c:954: goto shutdown;
httpd-2.2.8/server/mpm/winnt/mpm_winnt.c:871: goto die_now;
httpd-2.2.8/server/mpm/experimental/event/event.c:1140: goto worker_pop;
httpd-2.2.8/server/mpm/worker/worker.c:882: goto worker_pop;
httpd-2.2.8/server/mpm/prefork/prefork.c:614: goto got_fd;
httpd-2.2.8/server/mpm/beos/beos.c:560: goto got_a_black_spot;
httpd-2.2.8/server/mpm/beos/beos.c:562: goto got_fd;
httpd-2.2.8/server/util_xml.c:58: goto read_error;
httpd-2.2.8/server/util_xml.c:79: goto read_error;
httpd-2.2.8/server/util_xml.c:88: goto read_error;
httpd-2.2.8/server/util_xml.c:93: goto parser_error;




742 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 06:54:58 ]
>>741
おいおい、今さら提示しても遅いって。>>723
> -goto肯定派の具体的な例に関しては、「構造的に考えれば、とか、構造を再度
とか
> なんら実務面の利点を示しているわけではない。
とか書いた時点で、じゃあgotoの実用的かつ正しい使い方というのは
どんな具体例があったんだよって話なんだから。

743 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 06:55:01 ]
goto肯定派曰く「何も考えずにgotoを使う奴などいない」
goto否定派曰く「全てのgotoが駄目だという奴などいない」

であれば、肯定派否定派など互いにレッテルを貼っているだけで不毛な言い合いだな。
「どういう場合にgotoを使うのか、使わないのか」という具体的な議論にこそ意味があると思うが。


744 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 06:59:38 ]
>>742
linuxカーネルの話は723よりも前に出ている。

ま、くだらない貶しあいには興味がないので具体例で。
vhost.cの最初の3つはこういう構造。

static void fix_hostname(request_rec *r) {
 ...
 if (rv != APR_SUCCESS || scope_id) { goto bad; }
 ...
 if (r->hostname[0] != '[') {
  for (dst = host; *dst; dst++) {
   if (apr_islower(*dst)) { ... }
   else if (*dst == '.') { ...; goto bad; }
   else ...
  }
 }
 ...
 return;
bad:
 ...
 return;
}


745 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 07:03:07 ]
自分は>>744のgotoの使い方は特に問題がないと思う。見やすい。

gotoを使わずにより良いコードを書ける人は代案をよろしく。
「744のように端折られると詳細がわからないから書けない」という言い訳はなしな。

「本物」のコードへのポインタは>>741にある。必要なら本物を見てくれ。


746 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 07:05:30 ]
それから、一つだけ。

抽象的な言い合いの間は散々吠えておいて、
こういう流れにされると何もいえなくなる人へ。

「お前はgotoを使うな」

747 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 07:22:04 ]
vhost.cの下2つ(L904, L916)はこの関数。

static void check_hostalias(request_rec *r) {
 処理
 for (ループ条件) {
  処理 // この部分に、条件を満たしたらcontinueというコードがある
  if (判定条件) goto found;
  処理 // この部分に、条件を満たしたらcontinueというコードがある
  if (判定条件) goto found;
 }
 return;
found:
 r->server = s; // この一文のみ
}

これはごく単純なgotoの例。多重ループでも何でもないが、使わない人フラグを立ててbreak?
r->server=s; return;を二箇所に書くという書き方も、二箇所程度ならありかもね。

748 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 07:24:39 ]
>>744
bad:
...
return;
な部分をマクロにしちゃえばgotoなんて使う必要ないんじゃ?

749 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 07:27:08 ]
mpm_netware.cでの使われ方

for (ループ条件) {
処理
do {
処理
if (条件) goto got_listener;
処理
} while (ループ条件);
continue;
got_listener:
処理
}


750 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 07:32:07 ]
>>749
goto got_listenerが一箇所なら
if (条件) {処理; break;}で済む問題だな。
複数箇所なら処理をstatic関数にすればいい。
そもそも「処理」ってくくれるぐらいまとまってるんだろ?

751 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 07:33:27 ]
ちなみにこうやって具体的なコード片で議論しても
全体の構造うんぬんの話の検証にはならない。
というか、むしろ局所的な制御しか考えてないと
goto慎重派に言われても仕方ないことになるが。



752 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 07:37:26 ]
このパターンは条件がどんどん後付けされるのでは?
過去何度かあったろ。いいかげん気付け。

753 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 07:41:45 ]
今度のパターンは条件を後付けする必要ありません。
次から次へのgrep gotoした結果がタレ流されるパターンです。
1つの例にレスがついたらその議論を先にするのが礼儀というものだが
このスレのgoto厨は無視してひたすらgrepを続けます。
それがgotoクオリティ。

754 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 07:41:58 ]
>>750
>そもそも「処理」ってくくれるぐらいまとまってるんだろ?

いや。got_listenerの後の処理は長い。
do whileで条件を満たせなかった場合はcontinueするという意図のコード。

>>751
そうか。

>>752
ならばコードを読め。>>741参照。

755 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 07:49:46 ]
>>748
マクロは意図するところが十分に明確で、かつ処理が短い場合は良いアイデア。
今回の実際のコードではreturnを入れて3文なので悪くはないかも。
(r->statusに代入、ログ吐き、return)

ただしマクロの濫用もコードの可読性を落とすので避けるべき。
vhost.cはマクロについては単純なものしか使っていないので、ポリシーの違いだろうね。

756 名前:デフォルトの名無しさん [2008/02/17(日) 07:52:51 ]
正解は753でしたw

757 名前:デフォルトの名無しさん [2008/02/17(日) 07:54:54 ]
バカが浮き彫り

758 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 07:55:28 ]
>>754
いや、俺が言ってる「まとまってる」のは長さじゃなくて、
使う変数の依存関係が閉じた傾向にあるという意味。


759 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 07:58:17 ]
goto肯定派は実用的なコードから
「ここはこうgotoを使えばもっと綺麗になるのに」
という例を出すつもりはないのかね。

いつでもgoto慎重派にコードを書かせるのは
フェアじゃないと思うのだが?

760 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 08:04:27 ]
今、>>759 が良い事を言った!
さあ「gotoを恐れずに使う兵共」の腕の見せ所だ!

761 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 08:23:27 ]
>>758
そうか。閉じた傾向とか何ともいえないのでソースを読んで。

>>759
それこそ全然フェアじゃない。
・「Cで書かれた実用的なプログラムでgotoを一切使っていないもの」が一つも出されていない。
・「ここはこう」の「ここ」を見つけるために、相手にそのプログラム全体を全て読めと?

相手にコードを書かせようと思うなら、題材くらい自分で出せ。




762 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 08:26:54 ]
ていうか、プログラマとして非常にガッカリなのは、

情報として>>741が出されて、それを題材にしているにも関わらず、
実際にhttpdのソースをダウンロードして自分でソースを追ってみた人が、
ここで議論している人の中に誰もいなそうってところだな。

コードリーディングしない人には、コードを語る資格も能力もないよ。

763 名前:デフォルトの名無しさん [2008/02/17(日) 08:40:57 ]
具体論になると机上の空論と違って盛り上がらないねえ

764 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 08:43:08 ]
>>762>>748>>750は無視ということか。

grep するだけなら楽でいいもんな。プ

765 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 08:46:32 ]
>>764
750は明らかに749しか読んでいないと思われ。

実際のコードに当たったらこんな発言が疑問形で出るわけがない。

>そもそも「処理」ってくくれるぐらいまとまってるんだろ?

そこに気付かない>>764自身も、他人を煽るだけで自分はコードを読んでいない。


766 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 08:47:34 ]
強調するが、ここが重要ね。

  そこに気付かない>>764自身も、他人を煽るだけで自分はコードを読んでいない。


767 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 08:48:47 ]
そういう>>765は手あたり次第grepしただけ。
そうじゃないと言うのなら、
「ここはこうgotoを使えばもっと綺麗になるのに」
という例があるはずだから、それを提示しろ。

できないなら、コード読まない厨認定な。

768 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 08:49:28 ]
煽ったり議論したりする暇はあるんだから、ついでにちょっとコードも読めばいいのにね。

と思うよ俺は。


769 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 08:50:04 ]
>>763
一方的に「コード読め」「改善策を出せ」と言うばかりの香具師がいるからな

770 名前:デフォルトの名無しさん [2008/02/17(日) 08:50:15 ]
悪魔の証明を知らない人w

771 名前:デフォルトの名無しさん [2008/02/17(日) 08:50:37 ]
>>768 オマエガナー wwwwwwwwwwwwwwwwwwwwwwwwww



772 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 08:52:10 ]
>>770
そうそう。grep厨はコードの断片を見せるだけで
議論は永遠に続くことになるんだよな。アフォらし。

773 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 09:02:40 ]
強調するが、ここが重要ね。

  そこに気付かない>>766自身も、他人を煽るだけで自分はコードを読んでいない。



774 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 09:08:42 ]
こういうスレを読んでいると感じるけど
2chって「馬鹿しか得るものがない」場所だよね。

何の知識もない教えて君が相手を煽りながらタダで一方的に情報を得る。
教える側は何故か相手に罵倒されながら一方的に情報を提供して自分は何一つ得るものがない。

なので普通の人は嫌になってすぐに去り
2chに残るのは自己犠牲精神に満ち溢れた聖人と馬鹿だけ。

775 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 09:24:50 ]
>>774
> 何の知識もない教えて君が相手を煽りながらタダで一方的に情報を得る。

goto厨のことだね。
goto慎重派はちゃんと改善例を提示しているのに
goto厨は文句を言うばかりで何の改善例も提示しない。

776 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 09:33:40 ]
>>774
たかがgrepしただけでそこまで上から目線で言える根性が気に入った。

>>775
goto肯定派もコード出してるよ。>>469とか。目が腐りそうな糞コードだけど。
ちなみに>>469>>485という形でgotoを使わずに可読性が上がったね。

777 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 09:35:56 ]
485=774=grepした人=744以降でコード断片を出した人=普通の人なので去ります

778 名前:デフォルトの名無しさん [2008/02/17(日) 09:38:20 ]
と言いつつキリ番ゲットした>>777、オメ。

779 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 09:56:30 ]
777が去った今このスレの運命は776の手腕にかかっている

780 名前:653 mailto:sage [2008/02/17(日) 10:11:45 ]
6.8
自動記憶域期間をもつオブジェクトの初期化子、(略)は、
文の場合と同じく実行中に宣言に到達するたびにこれを評価し、
値をそのオブジェクトに格納する。

とあるので、gotoで宣言(と初期化)をまたぎこしていると、
初期化はされないとすべきのようです。

また、C99では「可変修飾型をもつオブジェクトの宣言を飛び越しては
ならない」という制限が加わってますね。なるほど。

781 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 10:37:43 ]
>>776
goto否定派もコード出してるよ。>>267とか。目が腐りそうな糞コードだけど。
ちなみに>>267>>263という形でgotoを使って可読性が上がったね。




782 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 11:07:56 ]
一人で頑張ってる嫌goto厨。
後輩に得意になって言っちゃったの?
gotoは使うなって。

783 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 11:12:38 ]
異議あり!代案なーし!
異議あり!代案なーし!
異議あり!代案なーし!


784 名前:デフォルトの名無しさん [2008/02/17(日) 11:16:33 ]
>>263>>379で否定されたがね。

  if (A_init() != 0) goto FAILED;
  if (B_init() != 0) 80+0; FAILED:
  if (C_init() != 0) goto FAILED;
  if (D_init() != 0) goto FAlLED;

FAlLED:

しかしまいったね。
・・


785 名前:デフォルトの名無しさん [2008/02/17(日) 11:17:33 ]
アホなレス乞食ががんばっていますね

786 名前:デフォルトの名無しさん [2008/02/17(日) 11:18:12 ]
>>783
代案?
すべての法律がダメだけどそれを国会議員200人ぽっちで作れるわけないだろ。
社会保険庁ですら数万人いるのに。


787 名前:735 mailto:sage [2008/02/17(日) 11:18:51 ]
>>735-736はバグってた。
CATCH節の中でthrow_exceptionするとFINALLYが走らない。
こりゃ結構恥ずかしい。インデントも崩れてるし。

788 名前:デフォルトの名無しさん [2008/02/17(日) 11:19:23 ]
ほお。

あなたに悪意を持つプログラマが goto を 80+0 と書いて
嫌がらせをするかもしれないから goto を使うべきではない

と。

ヴァァァァァァァァァァァ
ァァァァァァァァァァァ
ァァァァァァァァァァァァァァァァァァァァァァ
ァァァァァァァァァァァカ
じゃねーの?wwwwwwwwwwwwwwwwwwwww

789 名前:デフォルトの名無しさん [2008/02/17(日) 11:20:41 ]
どうでもいいけどダイクストラが言ってから今年で40周年か

見事な釣り師だな

790 名前:デフォルトの名無しさん [2008/02/17(日) 11:23:18 ]
>>788
森田さんこんなところにいたんですか。

ちなみに80+0と書き換えた森田さんは日常的に2ch語を上司に向かって話す極めつけの2chネラで、
バカジャネーノってAA使いまくりな人。

生まれは九州は福岡のとある会社の社長の息子。


791 名前:デフォルトの名無しさん [2008/02/17(日) 11:23:28 ]
「gotoを使うな」の釣り糸一本で
40年間、たぶん何百万人という単位のプログラマを釣りあげてる
恐るべしダイクストラ




792 名前:デフォルトの名無しさん [2008/02/17(日) 11:25:34 ]
>>791
大工さんはWhileをgotoで書くなと言っただけじゃね?

goto使いだってwhile使えるところでgotoとか使わないだろ。


793 名前:デフォルトの名無しさん [2008/02/17(日) 11:28:53 ]
sage不可能な良スレ

794 名前:デフォルトの名無しさん [2008/02/17(日) 11:30:33 ]
>>790
『福岡人はgoto禁止』でいいんじゃね?

795 名前:デフォルトの名無しさん [2008/02/17(日) 11:31:49 ]
違うか。森田さんは80+0って書いただけでgotoは書いてないもんな。
『福岡人と仕事するときはgoto禁止』?
いや『福岡人は面接で落とせ』?

796 名前:デフォルトの名無しさん [2008/02/17(日) 11:32:40 ]
福岡禁止

797 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 13:05:02 ]
80+0なんてキーワードハイライトがあれば容易に見抜けないか?
あと、0に斜線が入ったフォント使うとか(0とoのような個別の事例にしか使えないけど)。

798 名前:デフォルトの名無しさん [2008/02/17(日) 13:26:42 ]
>>797
いやそれがね、うちの会社、ウィルスバスターが更新しないように、インストーラーに手を加えた上でウィルス感染させやがるんですよ。
イントラネット管理者の統括してる本人がやるから信用しちゃうでしょ。
福岡に本社のある東京一部上場企業なんだけど。

だからエディタにキーワード追加くらい簡単にやってのけるよ。


799 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 13:39:04 ]
もはや798が質の悪い吊りだと見抜く方が容易

800 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 13:41:59 ]
>>797
つうか字形が違いすぎてしばらく話の流れが全く理解できなかったよ

801 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 14:10:20 ]
じゃあ次、コンパイラで使われていないラベルに対して警告を出すようにする。



802 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 14:58:28 ]
>>798
電子計算機損壊等業務妨害 で告訴しろ。
(告訴状作って会社の法務部に送りつけるだけでも効果あるぞ)

803 名前:デフォルトの名無しさん [2008/02/17(日) 15:07:57 ]
>>802
人事部に電話したら、「会社の方針でお前を監視してるんだから逆らうな」って言われたから。
人事部長と直接話したいって言ったけど無視された。
会社クビにされるときに人事部長を名乗る人が来たけど、なんと創価学会の池田先生に瓜二つ。

804 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 15:16:56 ]
>>803
こちらへどうぞ
ttp://pc11.2ch.net/test/read.cgi/prog/1197192900/

805 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 15:26:19 ]
>>803
「他人にいたずらされている」という妄想を抱いて、「なら反撃で、いたずら
し返さなければ」とイタズラして、会社側から疑いをかけられて監視されて、
あげくのはてにイタズラしていたことがバレてクビになった。

としか、文章からは読み取れない。

806 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 15:58:23 ]
むしろメンヘル逝きをお勧めしたい。

807 名前:デフォルトの名無しさん [2008/02/17(日) 16:30:11 ]
結局大工は釣りだとかいう観念論しかできないんだねw

808 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 17:20:45 ]
いくら上げても技術要素0%のレスで火は起こせないか

809 名前:645 mailto:sage [2008/02/17(日) 20:42:55 ]
気になったので、gccでやってみた

void bar(int);
int func(int arg)
{
if(arg == 0)
goto foo;

{
int i;
i = arg*2;
foo:
bar(i);
}

}


810 名前:645 mailto:sage [2008/02/17(日) 20:43:39 ]
.file "gototest.cpp"
.text
.align 2
.globl __Z4funci
.def __Z4funci; .scl 2; .type 32; .endef
__Z4funci:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
cmpl $0, 8(%ebp)
jne L2
jmp L3
L2:
movl 8(%ebp), %eax
addl %eax, %eax
movl %eax, -4(%ebp)
L3:
movl -4(%ebp), %eax
movl %eax, (%esp)
call __Z3bari
leave
ret
.def __Z3bari; .scl 2; .type 32; .endef

こうなる。
やはりiは確保されません。

811 名前:デフォルトの名無しさん [2008/02/17(日) 20:48:02 ]
>>810
goto使うなっての以上に、ブロックで変数定義するなってのもある。


しかし、オブジェクトはその場所で作るしかないんだな。




812 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 21:33:13 ]
だからレジスタに割り当てられてるんじゃないの?

813 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 21:44:22 ]
>>812
たった4つの32ビットレジスタで計算しないといけないのにそんな無駄なことできないでしょ。
少なくとも何かをするとしたらレジスタを使う。
やるとしても小さいループのループカウンタくらいか。


814 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 21:47:27 ]
goto fooすりゃi=arg*2が実行されないのは当然ダロ
何を期待してんのかわからn

815 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 21:58:11 ]
>>813
内側のブロックで宣言できないとしたら、
外側のブロックで宣言するだけ。
実態としては何も変わらない。

816 名前:645 mailto:sage [2008/02/17(日) 22:02:54 ]
>>814
ああ、テキトーに作った例だから、実際の動作は気にしないでくれ。
問題は、ブロックの中で定義した変数の領域が確保されていないのに、関数呼び出しに使われてしまうという事実ね。
多分、foo: の後にi = i+argなんてやってもダメだと思う。

817 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:03:51 ]
>>816
ヒント: jne L2 が実行された場合は L2 のどこで「領域が確保」されていますか?


818 名前:645 mailto:sage [2008/02/17(日) 22:04:03 ]
809のiの定義の後でiに代入してるのはコンパイラにiの定義をスルーさせないように、それらしい仕事をさせたかったから。

819 名前:645 mailto:sage [2008/02/17(日) 22:04:41 ]
>>817
ああ、別にされてないね。


820 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:26:56 ]
データフロー解析ぐらいは最近のコンパイラなら当たり前だよ?
ガチガチにソースコードに対応するようなコードを吐いて欲しいなら
-O0 を付けるとか...してもそこまでガチガチなコードが出るかどうか。

821 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:28:40 ]
>>820
そういう問題じゃない。出ているコードは綺麗にソースに対応している



822 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:46:57 ]
スタックフレームが
>subl $8, %esp
で8バイト確保されていて
iが
>-4(%ebp)
なら、関数の先頭で「確保」されてるんじゃね?

823 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:48:59 ]
>>822
正解

824 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 02:57:19 ]
>>811
>goto使うなっての以上に、ブロックで変数定義するなってのもある。

いやこれはするだろ。
あれ、みんなしない派?

825 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 03:21:11 ]
俺は、近くで定義したい派。
ブロック内で変数定義することはある。
ただ、外の変数と名前がかぶらないほうがいいかなぁ〜、くらいは気を使う。

826 名前:デフォルトの名無しさん [2008/02/18(月) 08:18:56 ]
普通は最小スコープ(内側のスコープ)で定義するのが常識

827 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 09:06:07 ]
それ厳密に適用するととんでもないことに

828 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 09:25:19 ]
手続き的にやろうとするから、変数を外のスコープにひっぱり出すとかが
必要になる。関数的に、なんでも再帰あちこちでreturnな書き方をすれば
それでうまくいく。

829 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 12:26:48 ]
>なんでも再帰あちこちでreturn
吊り?

830 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 16:00:57 ]
>>813
そんな特定のアーキテクチャに依存した話を突然持ち出されてもねえ、、、

831 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 16:07:36 ]
>>829
> >なんでも再帰あちこちでreturn
> 吊り?

釣りでもなんでもない。ifやswitchが文でなく式なら、

return if (hoge) true else false;

みたいに書けるのに(3項演算子は可読性が低いから却下)、
そうでないから、

if (hoge) return true; else return false;

というように書かざるをえない、ってだけ。



832 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 17:15:50 ]
3項演算子に対する嫌悪感って goto のそれに似たものがあるな

833 名前:デフォルトの名無しさん mailto:晒すとするか [2008/02/20(水) 17:18:18 ]
3項演算子とgotoじゃ全然違うだろ・・・これだからgoto厨は・・・

834 名前:デフォルトの名無しさん [2008/02/20(水) 18:46:16 ]
3項演算子はネストしない限りif文よりも可読性高い場合もあるだろ
特に>>831のような単純な分岐の場合は。どうせ見た目で毛嫌いして
るだけだろうけど。

835 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 18:48:46 ]
>>834
ネストしたって適切なカッコさえつければ問題ないだろ。
特に>>831の場合には積極的に3項演算子を使うべき箇所と思われ。

836 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 18:56:34 ]
それは再帰とは呼ばない。
ということだけは覚えてほしい

837 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 18:59:35 ]
if 文のみで書こうとすると異常にネスティングが増えるケースについて
3項演算子をif文とともに使って、ネスティングを削減すると、コードがすっきりするので好きだ。

838 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 19:16:21 ]
例えばループで書くと

foo() {
 cond = true
 while (cond) {
  ・・・
   ・・・
    if (...) {
     cond = false
    }
   ・・・
  ・・・
 }
}

みたいな構造で、condのようなスコープの広い変数が
必要になるのが、再帰で処理するように書き直せば、

foo() {
 ・・・
  ・・・
   if (!...) {
    foo()
   }
  ・・・
 ・・・
}

で済む、かもしれない、ってこと。

839 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 19:19:27 ]
>>836
再帰かどうかが、returnがif文の中か3項演算子の外かで左右されるとでも?

840 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 19:33:38 ]
>>838
でっていう

841 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 19:48:45 ]
>>838
いや、皆が問題にしてるのはそういうことではなく
while (cond) {
  int i;
  ....
}
みたいなスタック操作の無駄のことと思われ。



842 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 21:19:37 ]
末尾再帰でもないのに、それは・・・

843 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:22:30 ]
>>838
foo() {
 cond = true;
 while (cond) {
  s1;s2;
    if (...) {cond = false}
  s3;s4;
 }
}
これは、condが2回目のループでfalseになるとすると、
s1,s2,s3,s4,s1,s2,s3,s4の順で実行される。
で、
foo() {
 s1;s2;
 if (!...) {foo();}
 s3;s4;
}
これは、2回目のループで(!...)がfalseになるとすると、
s1,s2,s1,s2,s3,s4,s3,s4で実行されるから順番が変わる。そこでs3;s4をifの前に持ってくるわけだ。
すると、
foo() {
_loop:
 s1;s2;s3;s4
 if(...) goto _loop;
}

みんな末尾再帰でgoto使う?


844 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:24:12 ]
末尾再帰をgotoにするのはコンパイラのお仕事。

845 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 02:28:28 ]
再帰使うならgotoはいらん。
(再帰を中断するときには使うかもしれん)

846 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 05:40:03 ]
つかそれはdo{}while(..);

847 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 07:36:46 ]
>>843が全然末尾再帰になっていない件について

848 名前:goto使わなければそれがいい派 mailto:sage [2008/02/21(木) 10:34:02 ]
>>751
まあ、そういうコードが含まれているプログラムの中には
脆弱性だのバグだのいっぱい含まれているものだ。

 セキュリティについて、潔癖で有名なDJBですら、結構gotoを
多くつかう。 まったく使わないで終わらせた作品としては
は、比較的私家版パッチの突っ込みが少ない publicfile くらい。
後は山のようにgoto文があってDJBは嫌いだという人間もいる。

849 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 10:37:28 ]
>>841
{} がつくと何でも変数スコープを狭く取りたがるつか、
同じ変数を使いまわしてもバグにならないというか、
単たる手抜きか。

850 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 14:08:08 ]
pascalみたいに手続きの最初で全部まとめて宣言しろ

851 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 15:58:33 ]
>>841
それも違うだろ。それくらい最適化でどうにでもできる。



852 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 20:22:54 ]
>>845
ハァ?再帰からgotoで抜けるだぁ?
これだからgoto厨は…

853 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:49:55 ]
再帰からgotoどころかlongjmpだってしちゃうぜ!

854 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:59:56 ]
よーし、俺はexitだ。

855 名前:デフォルトの名無しさん [2008/02/21(木) 22:41:57 ]
いいこと思いついた。
お前ら俺のプログラムのケツにストリームデータ流し込んで実行してみろ。


856 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:50:35 ]
>>855
えっ!お前のケツにすとりーむでーtlk;ghklj;

857 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 07:15:04 ]
>>851
そんな最適化をされたらデストラクタロギングが使えなくなるじゃないか!!

858 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:10:22 ]
>>857
コンストラクタ・デストラクタが呼ばれなくなるような最適化なんて行われるわけないだろ。
少なくともC++では。

859 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 19:14:27 ]
いずれ呼ばれるにしても、呼ばれるタイミングは変わるかもよ?

860 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 22:05:58 ]
>>859
どこの規格無視コンパイラだ?

861 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 23:47:10 ]
gotoを使う想定でロジックを組むなら、それを分かりやすく図示する方法を発明してから
にしてほしい。そうじゃないとレビューする気にもなれない。
ここで出たようなgotoを使った書き直しの例なら、gotoを使ってないロジックを例えば
NSチャートとかで書いた方が、とてもとても分かりやすくて人にも説明し安いだろう。

チームメイトにロジックを説明するようにお願いてフローチャートをもってこられたら、
とりあえずバケツもって廊下に立っててくれるようにお願いしちゃうな。
システムが使われなくなるまでその人が死なずに内容も忘れずに保守するってのが保証さ
れてたとしても、仕事ではそんなロジックは受け入れ難いな。

だいたい現実的にgotoを使った方が良い場合ってのが、想定しづらい。
リソースだのコードサイズだののためのためにgotoを使うってのは、やらないと用件が
満たせないからって理由で、設計とかコーディングとかのさらに後に最適化フェーズを
設けてそこでやるんなら認めなくもないが、元からgotoを使うのが正しい場合なんての
を考慮しながらロジックを考えるような人とは一緒に仕事はできないなぁと思う。

なんでそんな書き方になってるか説明するための資料も作んないといけないし、仕事が
増えるばっかりだ。段階的抽象化とか物事を整理するとかに興味がないかできない人な
んだなとしか思えない。

誰かが事故にあってもリカバリがきくような状態を維持しようと思ったら、少しくらい
冗長になっても、なるべくわかりやすい設計&実装にしたいって思うのは普通だと思う
んだがなぁ。




862 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 23:56:49 ]
わたしはソース読み力がありません。

まで読んだ。

863 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 06:15:25 ]
>>862>>861を読む力がありません

まで読んだ。

864 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 06:38:46 ]
resource *hoge(int arg) /*失敗でNULL、成功でリソース(p4)を返す*/
{
 resorce *p1 = NULL,*p2 = NULL,*p3 = NULL, *p4 = NULL;

 p1 = GetResource1(arg); /* GetResoruce*は失敗した時にNULLを返す */
 if(!p1) goto failed;
 処理1
 p2 = GetResource2(p1);
 if(!p2) goto failed;
 処理2
 p3 = GetResource3(p1,p2);
 if(!p3) goto failed;
 処理3
 p4 = GetResource4(p3);
 if(!p4) goto failed;
 処理4

 FreeResource(p3);
 FreeResource(p2);
 FreeResource(p1);
 return p4;
failed:
 if(p4) FreeResource4(p4);
 if(p3) FreeResource3(p3);
 if(p2) FreeResource2(p2);
 if(p1) FreeResource1(p1);
 return NULL;
}

これgoto使わないとどう書く?もちろんスマートポインタ、GC、例外は使用不可。

865 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 06:43:29 ]
>>864
もうそれ飽きた。いいかげん空気読め、アフォ。

866 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 06:45:43 ]
各GetResourceの前にifつけてやって、
処理4

867 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 06:52:11 ]
p1 = GetResource1(arg);
if(p1) {
 処理1
 p2 = GetResource2(p1);
 if(p2) {
  処理2
  p3 = GetResource3(p1,p2);
  if(p3) {
   処理3
   p4 = GetResource4(p3);
   if(p4) {
    処理4
   }
  }
 }
}
if (p3) FreeResource(p3);
if (p2) FreeResource(p2);
if (p1) FreeResource(p1);
return p4;


868 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 06:58:18 ]
俺の感覚だと、読んだだけで「ああ失敗なんだな」って分かる>>864のが好きなんだよね。
あとネストが深くならないのが。

869 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 07:02:22 ]
>>868
処理そのものがネスト構造になっているんだから、
コードもネストしたほうが実態がわかっていいんじゃねーの?

870 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 07:03:52 ]
>>863
なにがそんなに悔しいの?

871 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 07:05:33 ]
↓いつものgdgdな展開へ・・・



872 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 07:05:36 ]
>>869
なるほどねー。

>>870
いや別に。リソース確保でネストさせるのが嫌いだってだけで。

873 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 07:07:28 ]
自演シッパイ、オツwwww

874 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 07:08:19 ]
gdgdだな

875 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 07:08:50 ]
>>872
リソース確保の条件がネストしているのだから、
コードもネストしたほうが実態がわかっていいんじゃねーの?

876 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 07:09:53 ]
アンカー打ち間違える奴は、gotoでもラベル打ち間違えるに決まってる件について。

877 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 07:10:19 ]
>>875
なるほどねー。

878 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 07:11:50 ]
>>876
>>870>>863>>869に読み間違えてたわwww

879 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 07:12:06 ]
処理1〜3にもよるだろう。
短いならいいけど、長ければネストしたくないって人もいるだろう。
あと、エラーならその場で関数から抜けたいタイプのひともいるし、
あれだけじゃなんとも。

880 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 07:12:17 ]
あ、上の>>869>>868ねwwwww

881 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 07:13:09 ]
わざとだろwwww



882 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 07:14:03 ]
>>881
>>878>>880はねwwww読み間違えてたのはホント。

883 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 07:14:41 ]
gdgdだーwww

884 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 07:15:37 ]
>>879
ネストしたくなきゃ、
if (p1 && p2 && ...) {
とすればいいだけなんじゃ?

885 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 07:19:58 ]
>>879
たった3つの解放だけなんだから、解放をマクロにしちゃって
goto failedのかわりにFreeAll; return NULL;しちゃってもいいな。

いずれにせよ、このネタはもうイトフユだろ。

886 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 07:47:58 ]
ネストするなとか、あいかわらず後出しジャンケンなんだね、goto厨は…
まあその後出しジャンケンも>>885で残念賞なわけだがw

887 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 07:52:42 ]
↑と、ここまでいつものgdgdな展開ですた。

888 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 08:06:03 ]
嫌goto厨は「異議あり対案なし」であることが証明されました。

889 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 08:25:52 ]
>>882
リアルでアンカー読み違える香具師がgotoを使うのは

キ チ ガ イ に 刃 物

890 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 08:27:06 ]
>>888
gotoを使わない対案ならこの短い間に3つも出ましたが何か?

891 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 08:31:07 ]
「出る」と「出す」の違いくらいわかってもいいとおもうぞ。



892 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 08:47:16 ]
>>891
おいおい、>>888の主語は「嫌goto厨は」なんだから、
gotoを使わない対案が出ていればそれで十分に反証になるだろw

893 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 09:25:38 ]
自分の他人の区別さえつかないのか、かわいそうに。

894 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 09:32:55 ]
他人が書こうが誰が書こうがgotoを使わない対案であることに何の変わりもないが?

895 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 09:37:31 ]
嫌goto厨は「異議あり対案なし」であることが証明されました。

896 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 09:58:53 ]
>>895
gotoを使わない対案ならこの短い間に3つも出ましたが何か?

897 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 10:01:08 ]
それがなにか?

898 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 10:06:18 ]
いいよ〜gdgdいいよ〜

899 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 10:09:56 ]
864のgotoは不要ということで。

900 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 10:39:25 ]
俺の感覚だと、見た瞬間に 864>>>867 なんだがなあ。

えーとさ。FAILEDっていうラベルの存在自体が

「物凄くソースコードの見通しを良くする、これ以上無い最高のコメント」

だと思うんだよ。

901 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 10:51:29 ]
>>900=>>864 オツw



902 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 10:55:29 ]
>>901
goto派が一人しかいないと思ってるなら、
君はたった一人のgoto厨に向かって何を必死に反論しているのかしら?w


903 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 10:59:26 ]
goto派が一人しかいないなんて話、どこの脳内議論から降ってきたのだろうか・・・
脳ミソがスパゲッティになってるんじゃないの?

904 名前:デフォルトの名無しさん [2008/02/23(土) 11:00:48 ]
ラベルに適切な英語名を振れない低学歴が吠えてるだけ

905 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:02:13 ]
1000までgdgd

906 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:05:46 ]
>>900
FAILEDなんてラベル、>>864にはないんだけど・・・
ラベルも扱えない香具師がgotoを使うのは

キ チ ガ イ に 刃 物

907 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:06:50 ]
すげぇ、TYPOも許容しないほどの厳格な議論なのかと思ったら
ただの罵り合いじゃん。

908 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:08:20 ]
gotoを適切に使うことで見通しよく書けているコードなど
オープンソースソフトウェアを少し読めばいくらでも見つかるし
まともなプログラマならばgotoを使うべきコードパターンというのを
イディオムとして持っている



業務の中で頭の固い奴を説き伏せてまで良いコードを書こうとは
思わないので仕事では適当にwhileやifをネストさせてその場限りの
コードをぐちゃぐちゃに書く。保守性など知らない
とりあえず「見た目上構造化」しておけばよいのだからそれ以上
考えても無駄無駄無駄。所詮は仕事

909 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:11:14 ]
>>908
ifをネストさせない対案も複数出ているが?

さあ、今度はどんな条件を後出しするのかなwwwwwww

910 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:11:36 ]
という思想で書き散らかされたプログラムに
腐れUMLと自動生成された糞doc、スパイスとして捏造されたテスト報告書をくっつければ

ほら高品質ソフトウェアの出来上がりでござい

911 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:14:22 ]
if (p1 && p2 && ...) {
馬鹿馬鹿しく肥大化した分岐条件

goto failedのかわりにFreeAll; return NULL;
馬鹿が思いつきで定義する糞マクロ

イイヨイイヨー



912 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:26:33 ]
>>861
>誰かが事故にあってもリカバリがきくような状態を維持しようと思ったら、少しくらい
>冗長になっても、なるべくわかりやすい設計&実装にしたいって思うのは普通だと思う
>んだがなぁ。
設計については正しい。
だが
実装については正しくない。

そしてここは実装について話すスレだよ。

913 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:30:38 ]
goto厨のオナニースレなんだから、まともな論理は通用しないよ > goto自重派

914 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:31:51 ]
>>908
その場かぎりのgotoでグチャグチャになってる>>864にどんな保守性を期待してるのやら。
他人のコードレビュー受けたことないでしょ、君は。

915 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:33:01 ]
>>908
> まともなプログラマならばgotoを使うべきコードパターンというのを
> イディオムとして持っている

それが他人に読まれた時にどんな混乱をもたらすか
考えたこともないのがgoto厨クオリティ

916 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:36:59 ]
whileやifがネストしただけで混乱するようなプログラミング初心者がgotoを使うのは

キ チ ガ イ に 刃 物

917 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:38:50 ]
>>876
> 876 名前:デフォルトの名無しさん [sage]: 2008/02/23(土) 07:09:53
> アンカー打ち間違える奴は、gotoでもラベル打ち間違えるに決まってる件について。

> 900 名前:デフォルトの名無しさん [sage]: 2008/02/23(土) 10:39:25
> えーとさ。FAILEDっていうラベルの存在自体が

まさにご名答。先見の明がありますな。
どこぞの後出しジャンケンと大違い。

918 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:49:14 ]
だめだここはれべるがひくい

919 名前:デフォルトの名無しさん [2008/02/23(土) 11:50:45 ]
864 finally使え

920 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:53:47 ]
>>919 正解ですな。
finallyはスマートポインタ、GC、例外ではないからねえw

921 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:03:48 ]
大域脱出と例外処理には使うかな。
使わなくても書けるけど、特に宗教が無ければ使うよね普通。



922 名前:デフォルトの名無しさん [2008/02/23(土) 12:06:04 ]
>>864
p1からp3まで格納するオブジェクトをつくって、
デストラクタでp1からp3を解放しろ。

ところで
> failed:
> if (p4) FreeResource4(p4);
これは何の冗談だ?p4はNULLなはずだが?

923 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:07:23 ]
>>921 特に宗教が無ければそういうのを「例外処理」とは呼ばないよね普通。

924 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:07:24 ]
あさってのほうこうをむいているぞきみは

925 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:11:13 ]
>>283
そうやって評論家ばかり集まって何も生み出さないから日本は駄目なんだよ


926 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:11:33 ]
>>922
ほんと、>>867のように書いてみれば、failed:に来た場合p4はNULLだということに気付くはずなのに、
ツギハギだらけの思考で書いたんだろうな、>>864は。

927 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:11:39 ]
誤爆

928 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:13:43 ]
誤爆だが、このスレの実情を的確に表現した名文だ。

929 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:18:21 ]
goto乱用厨が出すコード例はほとんどgoto慎重派によって対案が出されている。
なのにgoto乱用厨は次から次へとほとんど同じようなコードを出してくる。
>>864のパターンはこのスレだけでも何度も出てきている。
いくら対案を出しても、
「オプソ探せばいくらでも例はあるモン、goto使ったほうがいいモン」
と言って駄々をこねる。

結論: goto乱用厨=ゆとり脳。

930 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:23:10 ]
その対案は改善でなく改悪だという意見が何度も出ていますが?

931 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:26:34 ]
tesu



932 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:28:14 ]
>>930
アンカー打ちまちがえたりラベル打ちまちがえたりする
オッチョコチョイさんからねwww

933 名前:デフォルトの名無しさん [2008/02/23(土) 12:28:46 ]
p4 = GetResource4(p3);
のあとlこ
if (p4) FreeResource(p4);
が書かれていない件


934 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:31:05 ]
>>933
へえお前はfreeしたポインタを返すのか。なかなか凄いな

935 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:32:28 ]
ここで結局932のような攻撃しかこないのが駄目
内容のある議論の入口にすら立てない

936 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:35:20 ]
相手の技量もわからず内容のある議論ができるわけもなし
933みたいな素人が知ったかぶりで自説を語るのが2ch

937 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:36:08 ]
ところで
> failed:
> if (p4) FreeResource4(p4);
これは何の冗談だ?p4はNULLなはずだが?


938 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:36:27 ]
まぁ、そんなスレもそろそろ終盤。
うめ。

939 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:36:52 ]
恥ずかしい間違いを指摘されても別人のふりで再登場だしな
実際このスレもせいぜい4,5人の素人が回してるだけだろ

940 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:36:52 ]
>>934
それがgoto厨クオリティ

941 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:39:03 ]
goto 禁止 とか適当なキーワードでぐぐれば
このスレを読む1%の労力でこのスレを読む100倍の内容が得られる



942 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:39:11 ]
>>930
finallyについては?
デストラクタについては?

さあ、finallyやデストラクタを使った方法が改悪だというレスへのアンカー示してみろよ。

943 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:40:19 ]
>>942
例外やスマートポインタやGC禁止って言ってるところで
finallyだのデストラクタだの、なぞなぞはお前のガキ相手にやってろ

944 名前:デフォルトの名無しさん [2008/02/23(土) 12:41:37 ]
>>930
余計なif (p4) FreeResource(p4);が消えた点だけでも
>>867>>864よりも優れているが?

945 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:42:34 ]
>>943
あのー、finallyは例外でもスマートポインタでもGCでもないんですがwww
君、プログラミング言語に関する知識が決定的に不足してるんじゃない?

946 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:44:24 ]
>>944
ありうる状態や制御の流れについての理解を促すというのも
構造化プログラミングの利点の1つだな。
簡単にgotoに逃げちまうと>>864のようなお粗末なコードになる。

947 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:44:47 ]
>>945
例外処理機構を備えていなくてfinallyだけ持っている言語を挙げよ

948 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:46:26 ]
>>943
アンカー示せないわけね。
まあ示してもどうせまた打ち間違えるだろうけど。

949 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:46:35 ]
945は947に対して逃げて次は別人のふり

950 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:47:20 ]
>>947
単に現代的な言語なら例外もfinallyも持ってるというだけの話だろ。
何をマヌケな事をぬかしているのやら…

951 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:48:12 ]
>>949 他人がみな自分と同じ行動を取るとは限らないのだよ、おマヌケさんw



952 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:48:53 ]
throwしなければ例外「は」使っていないからfinallyはいいじゃん

とかね。
finallyやデストラクタと言った奴は軽いネタだったと思うんだが
ネタがネタとして扱われない議論厨の厨っぷりに呆然

953 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:54:20 ]
>>952
finallyと例外機構は実装としてほとんど独立なんだけど…
実際、finally句が実行されるのは例外の時だけじゃないし。
try…catchとの類似で混同してる人が多いけど。

gotoたまに使う派として恥かしいんでROMやめてレスしてみた。

954 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:55:17 ]
>>951
そんなのはどうでもいいよ。
問題なのは945(か他の誰かでもいいけどさ)が
947 に正面から答えられるかどうかだけ。

だいたい、945がちゃんと知識を持って書いてるなら、
そういう言語をすぐに答えれば逆に俺が大恥を書くことになる。

実は何の知識も無いくせに知ったかぶりで煽ってるから
すぐにケツをまくって格好悪く逃るハメになるのさ。

955 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:55:59 ]
しかし、マジレスが浮かばれないスレなので、それも燃料にされてしまう悲しさ・・・
↓具体化してください、どーぞ。

956 名前:デフォルトの名無しさん [2008/02/23(土) 12:58:28 ]
次スレ
pc11.2ch.net/test/read.cgi/tech/1203658291/


957 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:58:42 ]
↑具が大きい

958 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:00:03 ]
>>954
まあ落ち着いて>>950でも読んでみたら?

959 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:00:38 ]
もう技術的な話は出尽くしていて後は
2chリロードするしか生きがいのないクズどもが
goto使う・使わない人間の人間性叩きしかやってないし
次はマ板でやれよ。

960 名前:デフォルトの名無しさん [2008/02/23(土) 13:01:57 ]
いろんな文法の変更を試している人がいるから、その中のひとつとして考えてみる

961 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:02:39 ]
tesu



962 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:03:11 ]
gotoは何も悪くない。
悪いのはラベルだ。

963 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:03:22 ]
>>958
「例外もfinallyも持っている言語で>>864のようなコードを書くこと」

について議論してたの?

964 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:03:59 ]
技術的な話はあめぞうが生まれる前から出尽くしているような気が。

965 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:04:03 ]
次スレ
pc11.2ch.net/test/read.cgi/tech/1123726695/


966 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:06:59 ]
>>963
わざわざ具体的な例を挙げて「使用不可」と断りを入れてるぐらいだから、
そこに挙げられていないものはデフォルト使用可なんじゃねーの?

いいかげんにしないとまた「条件後付け」と指摘されるぞw

967 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:08:31 ]
まあこのスレの大半の奴はgoto行番号でプログラムを書いた経験なんてないだろ?
構造化以前を実体験として知らない年代の人がgoto議論なんてするもんじゃないよ。
それは別にレベルの高い低いじゃなくて、時代が違うというだけ。

968 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:11:34 ]
代入を恐れず使う兵共が継続やモナドを語るスレきぼんぬ

969 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:12:46 ]
>>966
わざわざ例外だのGCだのと言うぐらいだから、
少なくともC限定の話だとは思えないよな。

970 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:15:05 ]
while文を恐れず使う兵共が再帰やgotoを語るスレきぼんぬ。

971 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:15:25 ]
forやwhileも十分見通しが悪い再帰で書け



972 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:15:53 ]
安易に破壊的代入を使う奴は素人

973 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:16:25 ]
忘れられたデストラクタたん、かわいそス

974 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:16:37 ]
ここはひとつmapで。

975 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:18:20 ]
急にム板らしくなってきた

976 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:25:26 ]
tes

977 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:26:34 ]
goto hell;

978 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:28:16 ]
hell:
goto heaven;

979 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:29:55 ]
>>963
スレタイ読め。
このスレは、finallyや多重breakを語るスレだ。
finallyを対案に使って何が悪い?

980 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:32:28 ]
てs

981 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:34:50 ]
g-gg-g-gg-g-gg-gg--



982 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:40:48 ]
>>979 それは正論だがもう遅い。皆帰ってしまったよ。

983 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:42:09 ]
goto jail

984 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:44:18 ]
goto mental_hospital;

985 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:45:59 ]
それは元ネタがわからん

986 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 14:16:01 ]
ってst

987 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 14:18:12 ]
>>967
あるよ。
でも「構造化以前に開発経験のある者」に限定するなら、レスの98%位が不合格だ。
今現在もコードを書いている人間が語るから面白いのさ。

988 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 14:22:40 ]
俺も行番号でgotoとか書いていたし、現在でもコードを書いているが、
このスレの99%のレスは落第だと思うな。

989 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 14:24:30 ]
生め

990 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 14:25:42 ]
関数って考えがなかったからな
サブルーチンはgotoかgosubでしか実装できなかったろ

991 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 14:31:29 ]
>>990
でもNEXT J, Iとかはあったな。うめ。



992 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 14:34:04 ]
gosubは理解するのに時間かかったな・・・

993 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 14:34:04 ]
test

994 名前: ◆.CzKQna1OU mailto:sage [2008/02/23(土) 14:34:33 ]
te

995 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 14:34:59 ]
俺は次すれでもthrowしまくるぜ

996 名前: ◆84g/KG3Nug mailto:sage [2008/02/23(土) 14:35:11 ]
st

997 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 14:35:17 ]
DEF FUNみたいのもあったな。方言か?うめ

998 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 14:35:41 ]
next

999 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 14:36:01 ]
.

1000 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 14:36:20 ]
goto 1

1001 名前:1001 [Over 1000 Thread]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。








[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前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