私はこれが重複している知っているが、こっちanwserは単に私を満たしていない:関数の入力が無効な場合、未定義またはエラーをスローしますか?
JS library best practice: Return undefined or throw error on bad function input?
私が指摘して何が私には不明であったいくつかのことについてお話したいと思います。
最初に、私が個人的にエラーを投げてからundefinedを返す例を示したいと思います。
function sum(a, b)
入力ボックスの直接値を渡し、エンドユーザーが数字以外の文字を入力したため、コンシューマが文字列を渡すとします。
私がsum
の著者として、文字列入力時に未定義を返した場合、デベロッパーがある時点で文字列を入力したとしても、何も起こりませんでした。しかし、この場合、私はエラーを投げてしまったのですが、デベロッパーは実際に処理しなければならなかった事実を認識していました。
だから、基本的に、devsは実際にエラーを投げてエッジケースを認識させるのはなぜですか?
これはかなりどの上記の質問にコメントした私が求めています正確に何ですが、誰もまだ返信:
「しかし、それは1余分な分を要するため、私はエラーを投げる代わりにするために暗黙のうちに死んでしまうと、ドキュメントを読む時間を取らなかった人たちの時間をデバッグするのに時間を節約できないでしょうか?」
上から受け入れanwserにあるもう一つのポイント:
は、「例外をキャッチすると、エラーがよく発生であれば、例外はなりますので、戻り値をテストするよりも多くの遅いですたくさんの遅い。
このqouteがどこに当てはまるかは、入力が常に正しい形式、例えば、ユーザーはそのIDで存在しません。
このような場合、私はエラーを投げるとプロセスが遅くなる理由を理解しています。しかし、純粋な同期関数のみで構成される数学ライブラリはどうでしょうか?
出力を確認する代わりに入力を確認する方が賢明ではありませんか?
私の混乱は実際には私がC#の世界から来て、実際にはライブラリを使うべきだと思っているからですとにかくそれが慈悲深く働いているのではなく、意図したとおりの正確な方法。
約束事が真剣に数学の機能などのように過度になるところはどうですか?また、C#のmaybesは素晴らしく見えます。私は彼らがキャッチすることを願っています – ThatBrianDude
@ ThatBrianDude Javaでは、C#は何かが間違っていたことを示すのに使用でき、何が間違っていたのかを示すことです。私は、JavaScriptで同期関数の 'Result'型を返すほうがよいと思います。' Maybe 'のようですが、 'Some'と' None'の代わりに 'Success'と' Failure'を持ちます。ここで 'Success'は実際の値です'Failure'はエラーです。 jsのサンプルはhttps://github.com/amsterdamharu/lib/blob/master/src/index.js#L36-L125で作業していますが、明日またはそれ以降に終了する必要があります。 – HMR