たかたです。

このスレッドを始めた張本人ですが、なんだか、目から鱗が落ちたようです。自分は
Rubyを使っている間も静的な言語の思考法に基づいて考えていたようで、皆さんのお
返事によって悟りを開くことができました。

まつもと ゆきひろさん:
> これは気分の問題だと認識しています。
>
> 「処理に責任がもてないことがある」という発想も理解できないこ
> とはないのですが、個人的には動的型のオブジェクト指向言語では
> どのようなメソッドを持っているか(シグナチャ)が重要なので、
> 型によるチェックを含めるべきではないと考えています。

僕は、型チェックをしないのが気分が悪かったのですが、これが、
それが「犬」 であることによってのみ、「犬」の動作が保証される。それが「猫」
であるならば、保証はできない。
のような、考え方で正当化していました。
一面正しいのですが、心の中の本当の理由は、
C/C++のオブジェクトとは構造体にちょっと手を加えただけのもの。
みたいな感覚であったような気がします。
「柔軟性や手軽さ」と「スピードや安全性」のトレードオフなのかもしれないです
が。
基本的には手軽さを享受して、必要なときのみ、must.rbのようなスクリプトを使う
のが正しいのかもしれないですね。

中村暁史さん:
> そういやRuby以外の幾つかの言語だと、nilは例外的に
> 他の型と常にコンパチであるとしている奴ありますね。
>
> ん?あれは「変数の」型の問題なのか?
> たしかにdelphiとかでnilにメッセージ投げると
> 例外出して落ちるもんなあ。同じ事か(^^;

確かにnilの問題は型の有無にかかわらず、ありうる問題のようですね。でも、nilを
他の型と互換として扱われるとかえって困ることもある様にも感じます。単なる入力
のし忘れが数字のゼロとして扱われて、あとで、困ったことになるとか。そういうメ
ソッドをつければ良いのかな?

石橋秀仁さん:
> 上では、返り値としてのStringとnilの違いを、型の違いとされていますが、
> 実際には、有効か無効かという違いではないでしょうか。つまり、返り値は、
> つねに「ある型の値」か「nil」であって、「ある型」とは違う型が返ることは
> ないとおもいます(というか、それを静的型の設計と呼びました)。

nilは、たくさんある型のうちの一つというよりも、ポインタの対象が存在しない状
態だと思うほうが正しいかもしれないですね。で、そうだとすると、UMLで設計して
もnilが帰ってくることがあるではないかというのは、筋違いですね。
このメールをもらったあとで、UMLで「StringあるいはArray」を返すメソッドとかの
ような物を定義できないことを確認しました。

#Objectを返すのなら、可能ですけど。

そういうわけで、UMLは言語の型の有無などに関係のない記述言語だというのは、そ
ういう面もあるけど、石橋さんのおっしゃるのが正しいかなと思いました。

#でも、Ruby使うと、細かいとこまでUMLで設計するくらいならコードかいたほうが早
いんだよなあ。

*** Hideaki Takata Profile ***
e-mail
 private : hideakit / d3.dion.ne.jp
 univ : u0601043 / ue.ipc.hiroshima-u.ac.jp
URL : http://www.jws.sis.co.jp/~alife