Java エコシステムでおそらく最も使用されている 3 つの実装 (Java 8、Functional Java、および Guava) で、さまざまな Option/Optional セマンティクスの背後にある理由を理解しようとしています。
次の 3 つのスニペットを検討します。
java.util.Optional.of(100).map(i -> null)
になりますOptional.empty
。fj.data.Option.some(100).map(i -> null)
になりますSome(null)
。com.google.common.base.Optional.of(100).transform(i -> null)
結果NullPointerException
。
3つの選択の背後にある理由は何ですか? 該当する場合、関数型プログラミングの観点から最も「純粋」または「正しい」と考えられるものは何ですか? たとえば、Option
型をモナドと見なすという点では、何が最も正しいでしょうか。または、最も構成可能と見なすことができるものは何ですか? null を許可する関数型言語でこれがどのように処理されるかを知ることも興味深いでしょう。