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

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






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

前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