Как лучше передать необязательные аргументы функции, которые почти всегда одинаковы - PullRequest
2 голосов
/ 20 января 2009

Как лучше всего передать необязательный аргумент, который почти всегда одинаков? В качестве примера можно привести функцию parseInt Javascript; второй аргумент для radix является необязательным, но во избежание того, чтобы строка, начинающаяся с нуля, рассматривалась как восьмеричное, обычно признается, что всегда следует указывать 10 в качестве второго аргумента. Справедливо, поэтому мне интересно, как лучше всего справиться с этой ситуацией; в частности, я должен создать вспомогательную функцию, такую ​​как parseBaseTenInt (str), которая просто возвращает parseInt (str, 10)? Я унаследовал один файл кода с примерно 10 вызовами parseInt без второго аргумента, и создание вспомогательной функции впоследствии позволит мне выполнить простую замену parseInt на parseBaseTenInt. Однако я могу представить себе недостатки функции удобства, особенно если она не используется другими разработчиками. Поскольку сейчас это всего лишь 1 файл, и я буду основным разработчиком, который будет двигаться вперед, было бы не слишком неудобно просто добавить второй аргумент во все вызовы функции parseInt.

Ответы [ 4 ]

1 голос
/ 20 января 2009

Вы можете проверить, сколько аргументов было передано, используя arguments.length внутри функции.
Или вы устанавливаете значения по умолчанию для каждой переменной с помощью оператора ||:

function foo(bar, baz) {
    bar = bar || "default";
    baz = baz || 0;
    return bar + ", " + baz;
}
foo();                 // "default, 0"
foo("some string");    // "some string, 0"
foo("some string", 1); // "some string, 1"
1 голос
/ 20 января 2009

Мы часто используем функции, которые применяют значение по умолчанию, если переданное значение равно нулю.

// base defaults to 10
function ParseInteger(str,base)
{
    if(base==null)
        base=10;
    return parseInt(str,base);
}
1 голос
/ 20 января 2009

Я бы пошел с вашим решением - оберните его в функцию с подходящим именем, сохраните его поведение / соглашение о вызовах в соответствии с библиотечной функцией и используйте функцию обертки.

0 голосов
/ 20 января 2009

В зависимости от количества параметров, которые вы, возможно, захотите Введите объект параметра вместе с удобной функцией. Затем вы можете установить значения по умолчанию для вашего объекта параметра и установить только те свойства, которые изменяются при использовании функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...