1 名前:デフォルトの名無しさん [2005/08/11(木) 11:18:15 ] 前スレ pc8.2ch.net/test/read.cgi/tech/1021364372/
237 名前:デフォルトの名無しさん [2008/02/09(土) 23:26:01 ] CPUが java のバイトコードを直接実行していると勘違いしている人が多いですね。 javac ⇒ バイトコード ⇒ インタプリタが実行
238 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 23:36:27 ] よくもまあこんな前世紀的話題を得々と・・・
239 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 23:37:55 ] 今のSunのJVMってJITコンパイルしてないの?
240 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 23:40:09 ] >>238 まぁ、新しくプログラミングの世界に入ってくる人たちが、そういう疑問を持つことは 当然というか、ソウであって欲しいものナわけで。「先人達が行ってたから」といって 自分の思考を停止して妄信するよりははるかに良い。
241 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 23:40:59 ] ていうか、釣りだろw 釣りとしか思えないよこのインタプリタ厨。
242 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 12:29:30 ] 釣りだ。 gotoのスレでパフォーマンスの話をして、釣れると思っているね
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 の日本語訳 意味上の結合を維持したまま、処理本体とリソース管理を分離できている。 メンテナンス性を向上させるリファクタリングの典型