Как организовать операторы AS3 в одну строку? - PullRequest
1 голос
/ 26 января 2012

Привет! Я надеюсь выяснить, каков правильный синтаксис для лучшей организации операторов Case во Flash AS3. Так, например, ниже, вместо 3-х операторов, я не могу как-то организовать их в 1?

switch (refID) 
{
    case "TS_38":
        pgBool = true;
        break;
    case "TS_37":
        pgBool = true;
        break;
    case "TS_36":
        pgBool = true;
        break;
    default:
        pgBool = false;
        //break;
}

Я попробовал это, но в моем тесте это не сработало:

switch (refID) 
{
    case "TS_38", "TS_37", "TS_36":
        pgBool = true;
        break;
    default:
        pgBool = false;
        //break;
}

Ответы [ 5 ]

6 голосов
/ 26 января 2012

Попробуйте это:

 switch (refID) 
{
case "TS_38":
case "TS_21":
case "TS_21":
    pgBool = true;
    break;

default:
    pgBool = false;
    //break;

}

1 голос
/ 26 января 2012

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

if(refId.split("_")[0] == "TS"){
    pgBool = true;
}
else{
    pgBool = false;
}
1 голос
/ 26 января 2012

В этом примере не используйте регистр переключателя. Переключение регистров - не самый короткий способ написания кода, и часто оно побуждает вас писать избыточный код (ваш пример - «хороший пример плохого кода»).

То, что делает ваш код, могло быть написано так:

pgBool = ["TS_38", "TS_21"].indexOf(refID) > -1;

или

pgBool = refID in {"TS_38" : "", "TS_21" : ""};

(скорее всего, вы хотели бы повторно использовать массив / объект, если эта функция будет вызываться более одного раза).


Поскольку я видел, что этот ответ несколько раз подвергался сомнению, я чувствую, что он требует более подробного объяснения.

Прежде всего, почему использование хеш-таблицы предпочтительнее, чем switch-case.

  1. Масштабируется. Если вы храните хеш-таблицу вне функции, которая должна принять решение, вам не нужно менять функцию, которая принимает решение, вы добавляете или удаляете ключ из таблицы - что более гибко и позволяет более читабельно код. Он также позволяет изменять время выполнения, что невозможно при использовании коммутатора.

  2. Хеш-таблица называется так, потому что она хэширует ключи, гарантируя, что время доступа к значению, хранящемуся в таблице, является постоянным (и обычно очень маленьким). В то же время регистр переключения кодируется в AS3 как простая цепочка предложений if-else, что означает, что чем длиннее регистр переключения, тем больше времени потребуется функции для проверки каждого условия. Хотя switch-case дает вам определенный контроль над порядком, в котором тестируются условия, вы редко можете заранее сказать, какой из них будет срабатывать чаще. Хеш-таблица будет одинаково относиться ко всем условиям.

Это означает, что на практике никогда нет причины предпочитать switch-case хэш-таблице. Некоторые языки, например Python, даже не имеют этой конструкции по тем же причинам.

1 голос
/ 26 января 2012

Вы можете также использовать оператор if вместо switch, тогда вы можете использовать && и ||операторы:

if (refID == "TS_38" || refID == "TS_21" || refID == "TS_21") {
    pgBool = true;
} else {
    pgBool = false;
}

Не могу не заметить ... два ваших случая идентичны.

1 голос
/ 26 января 2012

вы можете сделать это:

switch (refID) 
{
    case "TS_38":
    case "TS_21":
    case "TS_21":
        pgBool = true;
        break;
    default:
        pgBool = false;
        //break;
}
...