Как написать функцию, чтобы код отсутствовал, когда аргументы не определены? - PullRequest
0 голосов
/ 10 мая 2019

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

Итак, у меня была функция, которая в основном делала это:

function initializeApp(arg1,arg2,arg3,arg4)
{
    action1(arg1);
    action2(arg2);
    action3(arg3);
    action4(arg4);
}

Но допустим, что я не хотел выполнять действие 4, сейчас код, содержащийся в блоке "action4", не сможет обработать не входные данные для arg4 и будет аварийно завершать работу. Таким образом, я решил обойти эту проблему, создав несколько if и else if операторов, которые по существу пропускали бы различные блоки кода, если этот аргумент не был определен. Вот пример:

function testIES(configFile, recordFile, overwrite, scriptFile)
{
    if (arg1 == undefined)
    {
        action2(arg2);
        action3(arg3);
        action4(arg4);
    } else if (arg2 == undefined)
    {
        action1(arg1);
        action3(arg3);
        action4(arg4);
    } else if (arg3 == undefined)
    {
        action1(arg1);
        action2(arg2);
        action4(arg4);
    } else if (arg4 == undefined)
    {
        action1(arg1);
        action2(arg2);
        action3(arg3);
    }
}

Однако этот подход имеет очевидный недостаток в том, что мне нужно было бы придумывать каждую комбинацию «действий», если бы я хотел опустить более 1 аргумента. Также было бы не очень удобно для пользователя, если бы кто-то еще хотел сделать это, потому что он должен знать, чтобы не пропустить более одного аргумента. Так что мой лучший вариант - просто придумать все разные комбинации? Или есть лучший способ? Конечно, есть лучший способ.

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

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

function testIES(...args) {
    [action1, action2, action3, action4].forEach((fn, i) {
        if (args[i] === undefined) return;
        fn(args[i]);
    });
}
0 голосов
/ 10 мая 2019

это позволяет передавать неопределенные значения и значения Falsey:

function initializeApp(arg1,arg2,arg3,arg4)
{
   var len = arguments.length;
    if(len>0)action1(arg1);
    if(len>1)action2(arg2);
    if(len>2)action3(arg3);
    if(len>3)action4(arg4);
}

Если вы никогда не передадите ложное значение (0, ноль, false и т. Д.), Вы можете использовать более простую форму, например

if(arg1) action1(arg1);

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