コンストラクタでの例外はあり?なし?

27
やねうらお @yaneuraoh

解決策求む!! → C#のvarとtry~catchが糞すぎる ||| http://d.hatena.ne.jp/yaneurao/20100929

2010-09-29 07:28:03
オスツ🍣 @alohakun

逆向きの型推論もできるようにして HogeClass hoge = NULL; hoge = new (...); とかできるようにすれば良さそうに思えるんだけど、何か問題あるのかしら。 http://d.hatena.ne.jp/yaneurao/20100929

2010-09-29 07:53:03
やねうらお @yaneuraoh

@alohakun 「逆向きの型推論もできるようにして」は、最初に明示的に型を書かないといけなくて、var x = hoge.XXX(); のようにして複雑な型名を受け取るケースにおいて困るのです。 型名は絶対に明示的には書きたくないのです。

2010-09-29 08:10:49
オスツ🍣 @alohakun

@yaneuraoh 次善の策(旧コードの互換性を保ちつつ C# の仕様を変更すること前提)のつもりで書きましたが、ご指摘の通り、new で生成する時の型名省略にしか使えないので、ほとんど役に立ちませんね… ありがとうございます。

2010-09-29 08:27:15
ぐるぐる系SQL @bleis

メソッドチェーンで・・・とか思ってしまう

2010-09-29 11:30:08
ぐるぐる系SQL @bleis

やっぱりC#でもコンストラクタで例外投げるべきじゃないよ。オープンが面倒とか、メソッドチェインさせて勝手に中で開かせればいいよ。

2010-09-29 11:31:19
ぐるぐる系SQL @bleis

とか思ってしまうわけです

2010-09-29 11:32:13
なかわんくま/nakawankuma/ @nakawankuma

@bleis コンストラクタと、Dispose()では例外投げないのは基本 =>今週末は福岡 http://j.mp/d08WKi

2010-09-29 11:32:59
otf @otf

@bleis 不変条件が満たされない場合は投げても大丈夫だよね!だよね!

2010-09-29 11:33:31
ぐるぐる系SQL @bleis

@otf そもそもDbCのサポートとして例外を使うべきかというのに自分の中でまだ答えが出てなません・・・

2010-09-29 11:35:42
ぐるぐる系SQL @bleis

GCに頼ってる言語こそコンストラクタで例外投げちゃだめだと思うんだ。C++はRAIIあるし

2010-09-29 11:37:30
普通のC++使い、銀天すばる @SubaruG

例外安全が正しく行われてない可能性を考えてコンストラクタでの例外送出を禁止するのは馬鹿げていると思う。

2010-09-29 11:40:04
otf @otf

@bleis でも例外以外のソリューションが思いつかないお。゚(゚´Д`゚)゚。

2010-09-29 11:40:37
普通のC++使い、銀天すばる @SubaruG

いや、もちろん、例外を投げる場合は、よっぽどの「異常事態」でない限り、事前に例外を投げないことをチェックできることを前提として、ですけどね。

2010-09-29 11:41:37
普通のC++使い、銀天すばる @SubaruG

assert で死ぬくらいなら例外投げたほうがいい。

2010-09-29 11:42:09
otf @otf

コンストラクタで例外をなげちゃいけないっていうルールについての議論をどっかで見た気がするけどなんだったか忘れた

2010-09-29 11:42:10
普通のC++使い、銀天すばる @SubaruG

っていうかバグがあるとき以外に assertion failed が起きるのは設計がおかしいと(ry

2010-09-29 11:42:40
otf @otf

@bleis RAIIとかGCってコンストラクタって関係ある?デストラクタとかだとなげちゃいけないと思うけど・・・

2010-09-29 11:44:11
mzp @mzp

@bleis コンストラクタで例外投げれなかったら,変な引数がコンストラクタに渡された場合はどうしたらいいの?

2010-09-29 11:44:58
普通のC++使い、銀天すばる @SubaruG

@nakawankuma コンストラクタで処理することが相応しいような処理を、例外を避けたいからという理由だけでコンストラクタ以外で行わせるのは馬鹿げてると思いません?

2010-09-29 11:45:46
ぐるぐる系SQL @bleis

んー、言い方が悪かったな。リソースを内部でごにょごにょするようなクラスのコンストラクタで、です

2010-09-29 11:46:49
普通のC++使い、銀天すばる @SubaruG

@nakawankuma 例外を避けるためだけに、コンストラクタでは初期化せず他の関数で明示的に初期化するようなクラスは、明らかに設計がおかしい…というレベルの話ですね。

2010-09-29 11:47:34
なぎせ ゆうき @nagise

Java使っててコンストラクタで例外が投げられたからって別に困ったことはないけどなあ。不良品がnewされても困ると思うんだけども @bleis GCに頼ってる言語こそコンストラクタで例外投げちゃだめだと思うんだ。

2010-09-29 11:47:37
1 ・・ 4 次へ