トップページ⇒tech
405コメント110KB

ボボボーボ・ボクは例外処理が嫌いなんだな

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
他人が作ったクラスとかだと例外のキャッチし忘れ多過ぎ
何の例外が飛んでくるかわからないクラスなんて怖くて使えない

そもそも例外処理って大域ジャンプだろ、
そんなもの怖くて使えねーよ
0355デフォルトの名無しさん2005/06/19(日) 23:21:33
つーかよ、353は例外出た場合、
bool で true false 以外に unknown として例外を返す必要があるとは思わないのか?

OresamaFuncは正常に処理できた実行結果としてtrue falseを返す訳だから
そもそも処理自体が行えなかった場合にはunknown(処理できなかったよ)として
どういう理由で処理できなかったかの例外を関数の呼び出し元に飛ばすべきだろ。

例外発生時に「あぁ、このエラーは漏れの処理ではありうる事なんだYo」と、
呼び出し元が考えるか、「何じゃこりゃ?」と考えるかは
OresamaFancが判断すべき状況じゃないからとりあえず上に例外を投げるんだ。

そしたら、OresamaFancを呼び出した奴が例外を受け取ったときに
適切に判断してくれる(はず)ってのが例外のそもそもの考え方じゃねぇのか?
0356デフォルトの名無しさん2005/06/19(日) 23:29:17
まぁ、354が考えたように
処理が行えたらtrue で行えなかったら false っていうレベルの関数なら
無理に例外投げないで353の実装でもいいと思うけどな。
呼び出し元で

if (OresamaFunc()){
OredayoOre();
}else{
Shoboon();
}

っていう書き方できるし、そっちのほうが漏れ的には好みかな。
例外機構を使うと

try{
OresamaFunc();
OredayoOre();
}catch(OresamaError e){
Shoboonn();
}

見たいな感じで、if文を目の敵にしたのはいいが、
本質的に何も変わらないコードっつーのもなんだかなぁ。
0357デフォルトの名無しさん2005/06/21(火) 02:12:01
A「例外は工数短縮に有効だよなあ」
B「ミスも少ないですよね」
C「例外はタイピング早いですよね」
A「例外はタイピングしないよ。なあ?」
B「しませんよ、例外は」
0358デフォルトの名無しさん2005/06/26(日) 00:32:33
>>355
話になんねぇよ。Unknownって何だよ。意味わかんねぇ。
SQLやりすぎて頭おかしくなった糞コボラ?
BOOLは2値を返す。それが全て。
0359デフォルトの名無しさん2005/06/26(日) 00:39:31
>>358
失敗も含めると、結果が2値に収まらないのが問題なんだよ。
0360デフォルトの名無しさん2005/06/26(日) 00:43:06
>>1..359

C言語なみのバカだなw
0361デフォルトの名無しさん2005/06/26(日) 00:44:32
なぁなぁ、>>357の言ってる意味がさっぱりわからないんだけどどういうこと?
0362デフォルトの名無しさん2005/06/26(日) 01:00:10
明日10時に起きてサンデープロジェクト見ればわかる
0363デフォルトの名無しさん2005/06/26(日) 02:07:16
try
{
Mekuso();
Mimikuso();
Hanakuso();
}
catch
{
Apoon();
}
0364デフォルトの名無しさん2005/06/28(火) 03:10:19
例外好きくない!でも、他のPGが書いたコードが例外をthrowしたり、する可能性がある場合は
try..catchしとかないとなぁ
でもやっぱ自分はthrowはしないでつねー
0365デフォルトの名無しさん2005/07/04(月) 12:21:59
こんなプログラムでよければ例外って便利な気がする。

try{
処理1();
処理2();
処理3();
処理4();
処理5();
}catch(Exception e){
MessageBox("エラーが発生しました。ゴメンナサイ。理由は " + e);
}

基本処理と例外処理が分離されててみやすいし、例外を見落とすこともない。

でももっと厳密な例外処理が必要になると基本処理と例外処理が入り交じって逆にわかりづらくなるのかな。
経験ないからわからないんだけど。
0366デフォルトの名無しさん2005/07/04(月) 14:59:43
つかぬ事を聞くけどボーボボのアニメってどうなったの?
0367デフォルトの名無しさん2005/09/10(土) 13:46:22
そもそも例外なんてシステム無くても困らないだろ。

最初から必要の無いシステムを後からつけたんじゃないの?

例外を含んだコードなんてものは、
例えば、参照をコードの方でnullかどうかチェックして、
nullだったら例外を返すのではなく、引数を返して、
受け取った方で、上手く行かなかった場合のコードを書くようにしたらそれで良いんだろ。

それとも、例外処理でなければ上手く処理しきれない場合ってあるのか?
知ってる人居たら教えてくれ。
0368デフォルトの名無しさん2005/09/10(土) 14:10:57
(゚д゚)ポカーン
0369デフォルトの名無しさん2005/09/10(土) 15:46:58
おれは関数呼び出しがいらないと思う
関数という単位で無理やり括るからプログラムが歪になるんだと思う
例外処理も変な制御になる

関数や分岐のネストじゃなくて
フリースタイルに地図のように表現すれば自然に記述できるんじゃないだろうか
おまえらがフローを紙に書くように、だ
0370デフォルトの名無しさん2005/09/10(土) 15:48:31
まずはメール欄にsageと入れてみよう
0371デフォルトの名無しさん2005/09/10(土) 16:00:06
>>367
A から B を、B から C を呼び出しているとすると
  B で C の戻り値をチェックし、A は B の戻り値をチェックする。
  エラーの詳細内容 (メッセージ等) はまた別の手段で得る。
というのと
  A で例外をキャッチしたら詳細内容も含めて入っている。
というのとでは、どっちが楽だと思う?

>>369
と思う人は、そうやって大盛りスパゲティ作ってればいいと思う。
>おまえらがフローを紙に書くように、だ
フローとてブレークダウンはしている。尤も、今時そんなもん書かないが。
0372デフォルトの名無しさん2005/09/10(土) 16:24:34
ExecutableUMLはどうなったのかなぁ・・・
0373デフォルトの名無しさん2005/09/10(土) 16:48:03
俺は.NETで例外はThrowせず、イベントで通知するように設計することがあるなあ。
例外の内容は例外オブジェクトをメンバにもつEventArgで通知。

これってやっぱり異端かなあ。
でも楽でいいんだよねえ。VB.NETだと特にイベント扱うの楽だから。
0374名無しさん@そうだ選挙に行こう2005/09/10(土) 17:25:01
>>369の皮肉にマジレスする>>371に萌え
0375名無しさん@そうだ選挙に行こう2005/09/11(日) 05:41:56
>>369
言いたいことはわかる。

グラフ構造で表現できればすっきりするだろうね。
0376マイク ◆yrBrqfF1Ew 2005/09/11(日) 06:49:25
>例外処理でなければ上手く処理しきれない場合ってあるのか?

無いな。
0377名無しさん@そうだ選挙に行こう2005/09/11(日) 12:12:26
ボボボボボボボボ
って方言でなんかエロい言葉なの?
0378名無しさん@そうだ選挙に行こう2005/09/11(日) 14:39:05
なんかのマンガのキャラらしい。
単に>1が消防なだけ。
0379名無しさん@そうだ選挙に行こう2005/09/11(日) 16:48:58
例外を、単なる別のエラー処理技法のように扱ってはいけません。
エラー コードを返したり、グローバル変数の設定したりすることと
同レベルだと思ってはいけません。例外は、それを取り巻くコードの
構造と意味を、根底から覆します。例外は、プログラムの実行時
セマンティックを一時的に繋ぎ変え、通常実行しているコードを迂回し、
こういう状況でなければ決して実行されないコードを動作させます。
例外は、エラー状態を認知させ、プログラムの死という罰則を用いて
その状態を改めようとします。

このように、例外には単純なエラー処理を超えた特性があります。
これらの特性を必要としない、理解しない、あるいは文書化したく
ないなら、例外をスローしてはいけません。
例外以外のエラー処理技法を探してください。
0380デフォルトの名無しさん2005/09/11(日) 23:53:57
>>378
山下清画伯だとおもうが
0381デフォルトの名無しさん2005/09/12(月) 14:02:47
>>377
福岡とか熊本あたりかな。
メメジョってのは鹿児島だっけ?
0382デフォルトの名無しさん2005/09/16(金) 02:48:28
>>377
↓のスレを読めばどんなに偉大な言葉か理解出来るかも。

http://comic6.2ch.net/test/read.cgi/csaloon/1122393817/l50
0383デフォルトの名無しさん2005/09/20(火) 20:52:02
結論。
例外は、無くても良いものを後から無駄につけただけ。
0384デフォルトの名無しさん2005/09/20(火) 20:57:34
ドキュメント書く習慣無い奴はC++の例外使うなってことかな。
特にC++の例外機構は欠陥だらけなので。
他の言語だったら大丈夫なケースはあるかと。
0385デフォルトの名無しさん2005/09/20(火) 22:28:29
>>383
だから例外をよく理解できない自分は悪くない、ということにしたいのですね。
0386マイク ◆yrBrqfF1Ew 2005/09/21(水) 02:54:51
>特にC++の例外機構は欠陥だらけなので。

初耳です;)
0387デフォルトの名無しさん2005/09/21(水) 13:38:25
Deep C++ 例外処理では欠陥だらけと言ってるけど
0388デフォルトの名無しさん2005/09/21(水) 13:41:24
>筆者は EH の基本的デザインは非常にしっかりしていると信じていますが、
>その一方で EH でいくつかの意図的でない深刻な結果が生じるということも
>疑いません。しかし、筆者は C++ 規格の作成者らに先見の明がないと言っ
>て責めるのではなく、効果的な例外処理を設計して実装することがどれだけ
>難しいかということを心に留めています。

遠まわしに欠陥だらけと言ってる。
0389デフォルトの名無しさん2005/09/21(水) 14:11:51
具体的に挙げてみますか?

・型が弱い。関数プロトタイプに許容する例外クラス木を列挙指定できない。

>>388
C++にも欠陥はあるが、例外処理そのものが難しいことも忘れてはいけない。
と言っているように読める。
0390デフォルトの名無しさん2005/09/22(木) 04:02:43
>>389
> ・型が弱い。関数プロトタイプに許容する例外クラス木を列挙指定できない。

これは関数の例外仕様のこと? int f() throw exception; // ←コレ?
例外仕様が無いことは欠陥とは言い切れないよ。
0391デフォルトの名無しさん2005/09/22(木) 06:09:22
Javaのthrowsは欠陥仕様。
後発のC#では削除されている。
0392デフォルトの名無しさん2005/09/22(木) 07:35:26
>>391
どのあたりが欠陥なのか簡単に説明してくれるかな?
0393デフォルトの名無しさん2005/09/22(木) 08:52:54
>>369
そこでContinuation渡しですよ。
0394デフォルトの名無しさん2005/09/26(月) 21:41:54
>>393
実現イメージは出ないけど、continuationみたいなのは結構いいかもしんない
Javaのexceptionより、system call の返り値のerrnoを見るほうが好きな俺は
比較的賛成だ
うまく例外処理コードを通常処理コードと分離(隠蔽)出来るといいんだがなあ・・
0395デフォルトの名無しさん2005/10/23(日) 12:26:21
>>391
C#のthrows削除は欠陥仕様。
先発のJavaの利点を殺している。
0396デフォルトの名無しさん2005/10/23(日) 13:25:49
Java でも、RuntimeExceptionを継承して例外クラスを定義するようにして、
throwsを書かないようにするのが、今の流れだと思っていたが。
0397デフォルトの名無しさん2005/10/23(日) 14:08:38
というか、そういう記述もできるという事でしょ?
細かくチェックさせることもできる。
0398デフォルトの名無しさん2005/10/23(日) 18:49:49
>>396
意味ねーじゃんw
ちゃんと例外設計しろよw
03993962005/10/23(日) 20:47:20
Hibernate 2.x のスローする例外はchecked例外だったけど、
Hibernate 3.x からは unchecked例外になった。
Springの例外も、すべて RuntimeException を継承している。

詳しくは Expert One-On-One J2EE Design and Development を参照してくれ。
0400ハーピィ2005/10/23(日) 23:11:31
E・∇・ヨノシ <400ゲット♫
0401デフォルトの名無しさん2005/10/27(木) 00:45:02
RuntimeExceptionと「通常」のException
の違いが解っていない人多いよね
C++もこの違いを意識して書けば、これほど便利なものは無いのに
先ずはExceptionの設計をしないで使ってる事が問題
0402デフォルトの名無しさん2005/10/31(月) 14:53:59
どっちも一緒だ。例外は例外。両方とも平等に扱うべき。
0403デフォルトの名無しさん2005/11/01(火) 00:16:27
全部平等にException catch かよww
0404デフォルトの名無しさん2005/11/03(木) 00:24:15
両方一緒(ごちゃ混ぜ)にして、try〜catchのコードの山と
格闘してる開発部隊がいたの思い出した
テストとか見ていて、ちょっと気の毒だった
0405デフォルトの名無しさん2005/11/03(木) 02:55:06
例外的な事が起きても継続を続行しなくてはいけないアプリにとっては
無責任な例外送出は迷惑極まりない。>>379でほとんど言われてしまったけど。
■ このスレッドは過去ログ倉庫に格納されています