Да, прочитайте правильно. В последнее время я видел разные шаблоны проверки аргументов в JavaScript (функции) и задавался вопросом, какой из них будет наилучшим. Сначала я покажу два примера кода. Первый показывает (по моим словам) «немедленную» проверку аргумента / условия, а второй - «отложенную» проверку. Каждый из них по-разному влияет на внешний вид следующего кода. До сих пор я всегда использовал «немедленную» проверку. Но постепенно я начинаю сомневаться, разумно ли втиснуть весь следующий код в такие условные блоки. Пожалуйста, скажите мне, что вы думаете и что может быть «лучшим» шаблоном.
А как насчет места, где объявлены переменные? Несколько раз я читал, что ВСЕ переменные должны быть объявлены в методе, прежде чем они будут фактически использованы. Это правильно? Поскольку я думаю, что бесполезно объявлять переменные до того, как они точно будут использованы (возможно, недопустимые аргументы вызывают исключение), я переместил часть объявления переменной за часть проверки аргумента / условия. Желательно ли это?
Спасибо!
Первый пример:
if ( colorStops.constructor === Array
&& colorStops.length
&& colorStops.every(function(c) {
return c instanceof ColorStop
}))
{
var privateVar1 = "foo",
privateVar2 = "bar",
privateVar3 = "tutifrutti";
// here goes the code
}
else {
throw new TypeError("GradientCanvasFacade: cannot add Colors; " +
"invalid arguments received");
}
Второй пример:
if (cg instanceof ColorGradient) {
throw new TypeError("PresetManager: Cannot add preset; " +
"invalid arguments received");
}
var privateVar1 = "foo",
privateVar2 = "bar",
privateVar3 = "tutifrutti";
// here goes the code
// Here goes the code that get executed when no explicit
// return took place ==> all preconditions fulfilled