Кто о чем, а вшивый о бане я о синтаксе в javascript.
Дело в том, что часто внутри функции нужно проверить, переданы ли правильные параметры и переданы ли вообще. Ну и вот один из самых коротких способов это сделать. Ничего фантастического тут нет, старый и проверенный способ. Кто может что сказать о достоинствах и недостатках этого метода?
function destroyTheWorld (when, byWhom) { if (!when||!byWhom) return 'fuck off'; };
Если кто не знает, оператор логического отрицания ! в JavaScript вернет true если ему передан false, '' (пустая строка), 0, null, undefined. Во всех остальных случаях оператор логического отрицания вернет false. На всякий случай, проиллюстрирую:
!0 === !'' === !null === !undefined === !false === true;
Таким образом, если мы не передали никакого объекта или передали null, то функция завершит свою работу и вернет в качестве результата нехорошее слово.
Внимательные люди могут спросить – а что, если передать true? Функция завершит работу при вполне валидном параметре?
Я могу на это ответить примерно так: если вы передаете в функцию булевую переменную, то почти наверняка эта переменная – рычаг, т.е. в зависимости от нее меняется поведение функции. И обработка аргументов, таким образом, будет вестить несколько другая. Скажем, такая:
function shouldWeDestroyTheWorld (acceptance) { if (acceptance) { World.getInstance().destroy(); } else { World.getInstance().armageddon = 'stopped'; World.getInstance().destructionTimer.stop(); } }
И если вы опустите этот аргумент, то по эффекту это будет равнозначно передачи false.
Он совершенен!
Синтакс-то? Ага, совершенен :)
Если бы можно было гарантировать, что весь код напишу я и буду поддерживать только я, то такие проверки можно и удалять. А для библиотечных функций, тем более, создаваемых с прицелом на то, чтобы отпустить их в «большой мир», такие проверки, имхо, must have.
Да, «must have» спасибо не знал) Вообще не пользовался, т.к. не попадались такие штуки)
Уж лучше эксепшн кинуть, чем возвращать не пойми что:
if (!when || !byWhom) {
throw new Error(«destroyTheWorld: required parameters 'when' and 'byWhom' are missing or undefined.»);
}
Так сразу будет понятно где и почему возникает проблема.
В данном случае пост немножко не о том, как должен сообщать метод о
недостаточном количестве параметров.
Но если затрагивать такую тему, как общую культуру программирования, то вы,
безусловно, правы.
Я конечно, прошу прощения, но это всё не подходит. Есть другие варианты?