石橋秀仁です。

At Sat, 13 Nov 1999 18:14:31 +0900
  "Hideaki Takata" <hideakit / d3.dion.ne.jp> wrote:

(略)
> し、探しているStringがほぼ間違いなく、Hashに含まれていて、返り値は要素に含ま
> れたStringであるはずという思い込みがあれば、それを忘れて、その返り値を別の
> (Stringに対しての処理を前提にしている)メソッドに渡してしまう様なミスは、時々
> あるように感じます。
(略)
> 要するに、例外的なケースに対しての処理を忘れているだけなのですが、こういうば
> かばかしいミスがその瞬間には分からず、だいぶ後になって発覚することは、僕のよ
> うな粗忽な野郎でなくても起こるような気がします。

これは、ある型のデータを想定しているときに、nilが返ってくるという
話ですね。ここでは、例外、というか値無しを表すためにnilが使われて
いますよね。

> 変数の型が想定している型と違っているのにそれに気がつくのが遅れることがある、
> という問題を避けるためにはUMLで設計したということだけでは、不十分だと思うの
> ですが。

ということで、確かにそうですが、これは型の問題ではないように思います。
返り値の正当性チェックという例外処理の問題ではないでしょうか。

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

あるいは、普通の設計では、返り値の型が限定されている
(is-a関係の型は除き)ので、その型として有効な値ではないときに、
(Rubyでは)nilを使うのが自然だといえるのではないでしょうか。

# UMLに「複数の型を取り得る」ことを表す記法は無かったと思います。。。

これで答えになっているでしょうか。
---
Hideto ISHIBASHI <http://vip.cis.kurume-nct.ac.jp/%7Es34204/>
PGP key fingerprint = 09 46 62 9C 16 36 12 42  A3 AD 1D 40 A5 95 36 20