卜部です。

SAITO Shukaku wrote:

>"恋するプログラム"からの受け売りですが、例えばString#indexで該当文字列が
>見付からなかった時にnilが返るので、部分文字列の有無だけを判定するのにnil
>が"偽"だと便利ではあります。
>  
>
String#indexがfalseを返したとしても成り立つ議論です。

>あとはArrayやHashで該当要素がないとnilが戻ると、やはりfalseとして有無の
>判定に利用できるとか。
>  
>
falseが戻ってきてもいいと思いませんか。

初期の頃、Hashにおいてnilは「値がない」ことを示すときに出現していたよう
ですが、現在ではHashの値としてnilを代入することは意味論上も実装上もハッ
シュオブジェクトに実際にnilを登録しているのであり、ハッシュ表の検索に失
敗した場合は別に指定したデフォルトのオブジェクト(または default_procを呼
んだ結果)が返ってくるわけです。現代的なHashにおいて、もはやnilは要素がな
いしるしではありません。

ところがこの変化に追従していないやつとかもいるわけで、代表格はENVと
PStoreですが、こいつらに値としてnilを持たせようとして
env_or_pstore["hoge"] = nil
とかやると、なんとキー"hoge"が消えてしまう。これは当初は非常に合理的な仕
様であったと思いますが、現在では驚き最小ではない仕様といえます。

このように、「該当要素がないとnil」という前提はすでに崩壊していて、しか
もへんにこの前提を捨て切れていないので、nilがかえるというのがあまり便利
であるとは思えません。

>trueとnilだと違和感があるし、前述のような場合にfalseが返るのも何だか妙な
>感じがしますので、現行のfalseとnilは良い仕様だと思っています。
>  
>
違和感とか、感覚とか、そういう話は結構同意できます。慣れの問題かも。