ボボボーボ・ボクは例外処理が嫌いなんだな
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG何の例外が飛んでくるかわからないクラスなんて怖くて使えない
そもそも例外処理って大域ジャンプだろ、
そんなもの怖くて使えねーよ
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNG取りあえずJavaとC++では対策が既に成されてる。
0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNGRubyつかってるからわからないけど、なにかあるなら教えて。
0008デフォルトの名無しさん
NGNGメソッドに何が飛んでくる可能性があるか書いてあるだろが。
0009デフォルトの名無しさん
NGNG次スレです。
http://pc2.2ch.net/test/read.cgi/tech/1065535118/
0010デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNG頻繁に呼ぶもんじゃないし、いいんじゃないの。
0012デフォルトの名無しさん
NGNG例外とはめったに起こらないから例外なんだから遅くてもいいだろ
0013デフォルトの名無しさん
NGNG言語自体にも対策方法があるの?
0014デフォルトの名無しさん
NGNG本来は例外として分類されるべき処理はいくらでもありそうだが
0015デフォルトの名無しさん
NGNGそんなに速度が要求されるのに例外にされるべき処理って何?
0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
NGNGgoto先にまずまとめたりしない?
0020デフォルトの名無しさん
NGNGVBっていうと敬遠されるかもしれんけど(w
0021デフォルトの名無しさん
NGNG自然と正常系以外は全て例外扱いになるが。
00221
NGNG今仕事で修正しているプログラムはただでさえぐちゃぐちゃなのに
例外処理使われていて目も当てられない
その上、キャッチのし忘れも多過ぎ
百戦錬磨の俺でさえ逃げ出したくなる。もう例外キライ
本来、エラー処理の抜けをなくしたりシンプルに扱うための例外処理だった
はずなのに、実際は抜けは多くなるし流れも見えづらい
俺にはGOTO文より極悪に見えて仕方がない
0023デフォルトの名無しさん
NGNG途中スコープの外れるインスタンスのデストラクタを読んでくれたりかなり高機能ですけどね。
0024デフォルトの名無しさん
NGNGVBのそれにはまねできないわけだ。
0025デフォルトの名無しさん
NGNG一応、メンバ関数の宣言の後ろにthrowをつけれるけど、
あってもなくてもコンパイルできちゃうわけで。
0026デフォルトの名無しさん
NGNG付けてもVCはthrow() (例外を投げない宣言)以外は未実装警告だして
使えないしね・・。VC7.1のISO仕様残り2%のひとつだ。
0027デフォルトの名無しさん
NGNGオブジェクトの終了を通知するための手段として
例外を使ってるんだわさ。
で、例外を受け取った外側の処理でそのオブジェクトへの
参照を外すようにしてる。
こういう使い方ってしないほうがいいのかな・・・?
0028デフォルトの名無しさん
NGNG>そもそも例外処理って大域ジャンプだろ
例外処理を勘違いしてそんな書き方するやつがいるだけだ
0029デフォルトの名無しさん
NGNGへーそうなのか、C++はコンパイルとおっちゃうのか
そりゃあわけわからんプログラマが前工程やるとわけわからんくなるわな
0030デフォルトの名無しさん
NGNGそういう例外の使用法は、よく悪い例として取り上げられています
C#は詳しくないけど、デストラクタってありましたよね?
003127
NGNGデストラクタはありません。(ファイナライザはありますが…)
C#では基本的にGCがメモリの後処理をしてくれます。
やはり例外を通常処理として用いるのは良くないのですか?
0032デフォルトの名無しさん
NGNG0033デフォルトの名無しさん
NGNG>やはり例外を通常処理として用いるのは良くないのですか?
これは当たり前として。
003427
NGNGわかりました。bool値を返すように変更します。
0035デフォルトの名無しさん
NGNG0036デフォルトの名無しさん
NGNG使うというやつがいて困ったことがあるなぁ
呼べば、ほとんど確実に例外を投げるという・・・ カンベンしてくれ。
0037デフォルトの名無しさん
NGNG「ほとんど確実に例外を投げる」と言うのは、ちょっとおかしいと思うけど。
0038デフォルトの名無しさん
NGNG例外機構じゃなくて大域脱出機構にでもすればよかったんだよ。
0039デフォルトの名無しさん
NGNGこの世に使っているすべてのプログラマが統合開発環境を使っているとは限らないので
そういうものに頼る手法は却下
0040デフォルトの名無しさん
NGNGまたはそのサイトや書籍をおしえれ
0041デフォルトの名無しさん
NGNG0042デフォルトの名無しさん
NGNG例外に特化した本でなくてもいい。
なにかおすすめがいい。
鉄則本や落とし穴本でもいい
0043デフォルトの名無しさん
NGNG例外処理の手順について理解を深めろ。
0044デフォルトの名無しさん
NGNG生成して開放が必要なオブジェクトを廃棄し処理を停止させてるけどだめ?
0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNG例外とは関係ないけど,もしかしたら
"NullObject パターン" を挙げると喜ぶ?
0047デフォルトの名無しさん
NGNG投げるべき例外をしっかりとつかみちゃんと正しく例外が処理されるのか?
0048デフォルトの名無しさん
NGNGWindowsは知らんのだが、言語で処理するのは
あまり好きくなれん
0049デフォルトの名無しさん
NGNGそれは普通割り込みという
0051デフォルトの名無しさん
NGNG裸の大将じゃないの?
0052デフォルトの名無しさん
NGNG一般常識に疎いということはオタクだろ、お前。
0053デフォルトの名無しさん
NGNG0054デフォルトの名無しさん
NGNG純粋に若いだけかも。何年前だよ、裸の大将って
0055デフォルトの名無しさん
NGNG仮に例外処理以外の方法(エラーコードを戻り値で返したりグローバル変数に格納したり)
を採用したところでその環境じゃまともに機能しないだろ。
責任を例外処理に押し付けたところで何も問題は解決しない。
例外を投げるやつはドキュメントに明記しろ。
メソッドをコールする奴はドキュメントを嫁。ただそれだけ。
0056デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNG0059デフォルトの名無しさん
NGNG喜べるとはいえない。。もしそれが逆ならギャグいわれたってそれだけでは現実には何も進展がない。
Javaの鉄則に、「例外を隠さない」手法として
Vectorにcatchされた例外を詰め込んで最後に吐き出し表示するという技が
あった。
しかし汎用性が感じられなかったなあれは。
既存の数多くの例外クラスにそんな機能が最初から
そなわっていればあんなつかいかたも考慮したのだが・・・。
Throwableクラスのメソッドをどうにかして使えばいいのか・・?
0060デフォルトの名無しさん
NGNG0061デフォルトの名無しさん
NGNG逆にC#の例外書かなくてもコンパイル通っちゃうのは不安でいけない。
って書くとまた荒れる元になるかな。
0062デフォルトの名無しさん
NGNG0063デフォルトの名無しさん
NGNGああっ!!出ちゃう!!例外出ちゃいますぅぅぅぅぅぅ!!!!!!!
ということで
----------------------終了-----------------------
0064デフォルトの名無しさん
NGNG0065デフォルトの名無しさん
NGNGニャロメとケムンパスはいたと思ったが・・・。
0066デフォルトの名無しさん
NGNG何言ってんですか?
0067デフォルトの名無しさん
NGNGおそまつにもいるよ。ほうきをもったやつだろ
0068デフォルトの名無しさん
NGNGメンバにList<Exception>を持つExceptionサブクラス作ったら?
printStackTrace()とかオーバーライドしといて、あとListへの
Iteratorを返すメソッド追加しとけば、そこそこ便利じゃないかね。
つうか、俺がそういうの使ってる。
0069デフォルトの名無しさん
NGNGひとつ上への参照さえもてれば連鎖的に保存しておけるんだから。
つうか、MSがそういうの使ってる。
0070デフォルトの名無しさん
NGNG何が
List<Exception>
だよ。
おまえらそれで満足か?
0071デフォルトの名無しさん
NGNGええ、その後に数十回同じキャストを繰り返すよりは。
0072デフォルトの名無しさん
NGNG>List<Exception>
充分、きれいですが。
0073デフォルトの名無しさん
NGNG0074デフォルトの名無しさん
NGNG馬鹿やろ
破綻してるだろうが。
List<List<Exception>>
これでもうだめぽ(ゲラ
0075デフォルトの名無しさん
NGNGList<List<Exception> >
だと思われ。
0076デフォルトの名無しさん
NGNGだから>>74は破綻しているといっているのではなかろうか。
0077デフォルトの名無しさん
NGNGほっとけよ、XXXX房は。
唯一C++のtemplateに勝てる所なんだから。
そっとしておいてやっれって。
0078デフォルトの名無しさん
NGNG例外の利点でよくでるのがスタック等のオブジェクト
破棄や、コールスタックさかのぼっていけるって言うけど、
オブジェクトの破棄はされても関数呼び出しの効果が
自動的ににロールバックされるわけでもないし。
例外のせいで中途半端なところで関数呼び出しが終わってしまう
可能性を絶えず考慮してコーディングする労力のほうが便利さを
遥かに上回っているようなきがする。
例外的な状況のために全ての関数でとりあえずcatchして
ロールバック処理&再throwを書くのもめんどう。
0079デフォルトの名無しさん
NGNG初歩で陥るとこだ罠
0080デフォルトの名無しさん
NGNGルーティングの段階でロールバック。
ロールバックの必要な処理は型やメンバでフィルタリング。
try {
....
} catch (filter &e) {
rollback();
thorw;
}
0081デフォルトの名無しさん
NGNGお前のコードの中にfinallyってあるか?
無ければ独習シリーズでも読み直して出直せ。
0082デフォルトの名無しさん
NGNGtry {
foo();
} catch(...) {
//何もなし
}
というコードばっかりだよ。
いっそのことこう書こうかなw
try { foo(); } catch(...){}
0083デフォルトの名無しさん
NGNG0084デフォルトの名無しさん
NGNG0085デフォルトの名無しさん
NGNG0086デフォルトの名無しさん
NGNG>自動的ににロールバックされるわけでもないし。
されたら迷惑
0087デフォルトの名無しさん
NGNGスタックトレース位吐けやボケ。
0088デフォルトの名無しさん
NGNG禿道。例外発生したらスタックトレース。
決り文句。常にこう書くべし↓
try {
foo();
} catch (Exception e) {
e.printStackTrace();
}
例外発生時にも処理が続行されるがキニシナイ
0089デフォルトの名無しさん
NGNG0090デフォルトの名無しさん
NGNGくたばれ
0091デフォルトの名無しさん
NGNGfinallyなんてねえよ。あったらコンパイルとおらんし(w
>>86
>されたら迷惑
もちろんめいわくだ。何が正しいロールバックかなんて
機械的に決定されるものでもないと思うし。例外が自動で
やってくれることはたかが知れているじゃないかって意見。
本当に末端のライブラリが投げるんならまだ良いんだけど、
アプリケーション製作者が気軽に投げるもんでも無い気が
する。
0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNGtry {
foo();
} catch (...) {
throw;
}
これで決まりではないか。
0094デフォルトの名無しさん
NGNGあれだけゴチャゴチャした言語仕様なのに、finallyが無いってのは
けっこうビックリだよな。
最近じゃVB.NETにすら付いたのに。
0095デフォルトの名無しさん
NGNGデストラクタで各オブジェクトに後始末させるからいいんじゃないの
0096デフォルトの名無しさん
NGNGCでmallocやfree呼んでるのと実質変わらないよね。
reallocが無い時点でC++はゴミ。
例外機構なんてやめてlongjmp駆使した方が速いしわかりやすい。
longjmpでデストラクタ呼ばれないのはもうね、馬鹿(略
0097デフォルトの名無しさん
NGNGだな。
出口や入り口は少なければ少ないほど理解しやすくいいと言われてるのに、
例外処理はそれに完全に逆行してる
少なくてもC++では流行る気配すらないな
0098デフォルトの名無しさん
NGNG>出口や入り口は少なければ少ないほど理解しやすくいいと言われてるのに
気のせいです。
0099デフォルトの名無しさん
NGNG途中でリターンというのは、途中で一つの出口へのgotoと同じ事なのだよ。
int foo(void) {
int ret;
if(A) {ret=1; return ret;}
if(B) {ret=2; return ret;}
if(C) {ret=3; return ret;}
ret=0;
return ret;
}
↓
int foo(void) {
int ret;
if(A) {ret=1; goto end;}
if(B) {ret=2; goto end;}
if(C) {ret=3; goto end;}
ret=0;
end:
return ret;
}
関数の終わりの}の直前に飛んでいるだけなのさ。だから途中でreturnも出口は一つ。
0100デフォルトの名無しさん
NGNG0101デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています