包括的なエラーをディッシュすることになると、可能性ごとにメッセージをディッシュすることなく、人々がどのように長いifステートメントを生成するのか興味があります。
次のようなものの利点:
if(typeof hello !== "undefined" && hello == 3){
}
両方の条件が必要ということです。次のようなifステートメントの配列とオブジェクトを使用して実験してみました。
var validate = [
(typeof hello !== "undefined"),
(hello == 3)
];
underscore
次に、の関数のようなものを使用してvs値_.without()
を取得し、エラーがあるかどうかを確認できます。上記のこの配列の問題は、helloが未定義の場合、エラーが発生することです。true
false
var validate = [
(typeof hello !== "undefined"),
(typeof hello !== "undefined" && hello == 3)
];
だから私はこれをしなければなりません、それは非常に繰り返しです。
これまでの例では、何の応答もありません。私はこれを思いついた。
var valid = [
(_.isObject(email)) ? false : "email is not object",
(dotty.exists(email, "event")) ? false : "event does not exist",
(email.event == "inbound") ? false : "event is not set to inbound",
(dotty.exists(email, "ts")) ? false : "ts does not exist"
];
var errors = _.without(valid, false);
if(errors.length == 0) // no errors
これははるかに進歩的です。
var valid = [
(_.isObject(email)) ? false : "email is not object",
(dotty.exists(email, "event")) ? false : "event does not exist",
(dotty.exists(email, "event") && email.event == "inbound") ? false : "event is not set to inbound",
(dotty.exists(email, "ts")) ? false : "ts does not exist"
];
var errors = _.without(valid, false);
if(errors.length == 0) // no errors
しかし、私はまだ冗長である必要があります。
これはすべて次のアイデアにつながります。
エラーを処理するために2つありました。
- エラーが表示された場合は、先に進む前にそのエラーに対処してください
- すべてのエラーを提示する
私は後者が好きです。
検証目的の複雑なifステートメントを支援するライブラリはありますか?
アップデート
次のステートメントは前のステートメントとは関係がないので、時々良いので、私はクレイジーなスロープで立ち往生しています。
これを防ぐ方法があるはずです...
typeof email !== "undefined"
typeof email !== "undefined" && _.isObject(email))
typeof email !== "undefined" && _.isObject(email)) && dotty.exists(email, "event"))
typeof email !== "undefined" && _.isObject(email)) && dotty.exists(email, "event")) && email.event == "inbound"
対読みやすさ
typeof email !== "undefined"
_.isObject(email))
dotty.exists(email, "event"))
email.event == "inbound"
これをもっとシンプルにして、傾斜を持たないようにしたいと思います。以下の例では、 email
isundefined
がcolor
isであり、それはに等しいとしましょうyellow
。次のエラーレポートを見たいです
(typeof email !== "undefined") ? false : "no email",
(_.isObject(email)) ? false : "email isn't object",
(dotty.exists(email, "event")) ? false : "event not present",
(email.event == "inbound") ? false : "event not inbound",
(typeof color !== "undefined") ? false : "no color",
(color == "yellow") ? false : "color not yellow",
[
"no email",
"email isn't object",
"event not present",
"event not inbound",
false,
false
]
つまり、有効な色なのでエラーとして返されないようにしたいのです。しかし、他のすべてのエラーを返したいです。
または私はただ必要ですか:
[
"no email",
false,
false
]
両方が未定義の場合color
、email
私は見たくないだけです:
[
"no email"
]
これは誤解を招く恐れがあります。少なくとも見たい
[
"no email",
"no color"
]
またはすべて
[
"no email",
"email isn't object",
"event not present",
"event not inbound",
"no color",
"color not yellow"
]
より傾斜した例:
var valid = [
(typeof email !== "undefined") ? false : "email is undefined", // halt the code
(typeof email !== "undefined" && _.isObject(email)) ? false : "email is not object",
(typeof email !== "undefined" && dotty.exists(email, "event")) ? false : "event does not exist",
(typeof email !== "undefined" && dotty.exists(email, "event") && email.event == "inbound") ? false : "event is not set to inbound",
(typeof email !== "undefined" && dotty.exists(email, "ts")) ? false : "ts does not exist"
];
var errors = _.without(valid, false);
if(errors.length == 0) // no errors