C言語とC#と例外機構

メモ.
http://d.hatena.ne.jp/pmoky/20060510#p1
http://d.hatena.ne.jp/pmoky/20060514#p6
他多数.

 あと、社長は当時C#が書けなかったので、C#を書くときにも、「Is○○のようなブール値を返すメソッドは例外として、それ以外のメソッドは戻り値で値を返すのではなく、C++式に引数で値を返して戻り値はエラーコードに使え」という命令が来た。なんというか…、もうなんでもいいや。過ぎたことだ。

昔はともかく,今はC++にも例外があるんじゃなかったっけ?*1

とするとこの部分は「(今の)C言語」又は「昔のC++言語」と記述すべきではないだろうか.

例外の使い分けのために、エラーとバグとを分ける発想とか。
ただ、その美しい小宇宙にこだわってこだわって、外に向かって無理やり広げようとあがくんではなしに、こだわりを持つならもっと高次の視点からにしてみてはどうか、と思うのです。

C#Javaの猿真似言語と言われるだけにこの辺りの設計思想は同じだと思うが,だとすると「例外的事象を例外を用いて返す」のは例外機構のある言語では『鉄則』です.とはいうものの例外機構はJavaプログラマーでも,C言語などの他の言語より移ってきて日が浅い者が共通して嵌るポイントでもある.

C#だからエラーは絶対に例外で返すべきと言う主張は間違っている。
それは仕事でのプログラミング経験がなさ杉です。
理想はそうなんだけど、現実はそうじゃないんです。

うーん,それっていかにも技術力の低い開発者が言い訳に使いそうなセリフだ....


たしかに「Javaだから/C#だから例外は『絶対に』例外で返すべきだ」というのは間違っている.正確には「Java(やC#)のような例外機構を持つ言語においては,例外事象は可能な限り例外機構を使って実装すべきだ.」というべきだろう.たしかにJavaのような言語においても実装上や組織上の制約により,例外的事象を例外機構を使って返すことが難しいこともある.ただ,そういう場合はあくまで例外的であり,よほどの理由がない限りは例外は例外機構を使って実現するのが基本だ.

例外を使わなかったにも関わらずその辺りの事情を説明していなかったとすれば,例外の使い方を理解していなかった,或いは例外の存在自体を知らなかったと思われても仕方あるまい.