И еще про синтаксис JavaScript

Кто о чем, а вшивый о бане я о синтаксе в 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.

7 комментариев to “И еще про синтаксис JavaScript”

  1. Он совершенен!

  2. Синтакс-то? Ага, совершенен :)

  3. Если бы можно было гарантировать, что весь код напишу я и буду поддерживать только я, то такие проверки можно и удалять. А для библиотечных функций, тем более, создаваемых с прицелом на то, чтобы отпустить их в «большой мир», такие проверки, имхо, must have.

  4. Да, «must have» спасибо не знал) Вообще не пользовался, т.к. не попадались такие штуки)

  5. Уж лучше эксепшн кинуть, чем возвращать не пойми что:

    if (!when || !byWhom) {
    throw new Error(«destroyTheWorld: required parameters 'when' and 'byWhom' are missing or undefined.»);
    }

    Так сразу будет понятно где и почему возникает проблема.

  6. В данном случае пост немножко не о том, как должен сообщать метод о
    недостаточном количестве параметров.
    Но если затрагивать такую тему, как общую культуру программирования, то вы,
    безусловно, правы.

  7. Я конечно, прошу прощения, но это всё не подходит. Есть другие варианты?

Оставить комментарий

Последние твиты