卜部です。 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は良い仕様だと思っています。 > > 違和感とか、感覚とか、そういう話は結構同意できます。慣れの問題かも。