web-dev-qa-db-ja.com

Java 8JavaScriptではオプション

オプション in Javaのアイデアが好きです。これを使用して、オブジェクトが使用可能かどうかを判断できます。

私は今JavaScriptを学んでいて、同等のものを見つけようとしたとき、 optional-js にしか出くわしませんでした。他の主要なフレームワークはそれを実装していないようです。

これは私に不思議に思いました、JavaScriptではそのような使用法は必要ありませんか?そのためのJavaScriptの代替手段はありますか?それは物事を行うことのJavaScript wayではありませんか?

1
Can't Tell

Javaをクリーンにサポートするために必要なすべてのものを手に入れるのに10年かかったので(つまり、Java 5)から追加; C#stillは、標準ライブラリに追加されていませんが、ほぼ同じくらい長い間追加できました;そしてこのアイデアは一般的に使用されています少なくとも70年代以降、(静的に型付けされた)関数型言語では、JavaScriptがトレンドをよりよく表していると言えます。

確かに、動的に型付けされた言語はこれについてもっと悪い傾向があります。この概念は、動的に型付けされた言語で確かに役立ち、実装は簡単ですが、「標準」ライブラリにあるものはほとんどありません。その理由の1つは、動的に型指定された言語ではいくつかの利点が失われることです。静的に型付けされた言語では、Optional型を使用すると、動的に型付けされた言語ではなく、「何もない」場合を処理する必要があります。

二重の苦痛であるもう1つの側面は、 "truthy" 値の概念の相対的な共通性です。一方では、Optionalのようなものを使用すると、サイレントに間違った動作をすることが非常に簡単になります。一方、Optionalがうまく処理できる特定のパターンは、真実性を使用することで実現できます。ユビキタス

var x = passedInValue || defaultValue;

それでも、上記がどのようにうまくいかないかを想像するのは難しいことではありません。 「passedInValue0またはfalse?または、nullにしたい場合はどうすればよいですか?値を提供しないこととnull値を明示的に提供することの違いを伝えるにはどうすればよいですか?」関数を使用すると、同様の問題が発生します。 JavaScriptでは、undefinedは(一見)これらの役割のいくつかを果たすことができますが、それは病気よりも悪い「解決策」であり、解決策でもありません。

この状況は、ほとんどの言語のnullまたはSQLのNULLに非常によく似ています。真実はnullの問題を増幅します。ほとんどの静的に型付けされた関数型言語がnullに相当するものを欠いていることは、この時点で驚くことではないかもしれません。何らかの理由で、数十年の存在の後、私はnullのようなものをaddすることを決定した静的に型付けされた関数型言語を知りません。言語の作成後。

ですから、確かに、答えはそれが物事を行う「JavaScriptの方法」ではないということですが、JavaScriptは物事を良い方法で行うことのリーダーではありませんでした。残念ながら、この特定の例では、JavaScriptだけではありません。どういうわけか、Optionalが10年前のJava)では役に立たなかったのではないかと思います。