Есть ли лучший способ написать этот mutiple или условный? - PullRequest
2 голосов
/ 09 июня 2009

У меня есть следующий оператор IF в javascript:

if ( !(cmd === 'JustifyLeft' || cmd === 'JustifyRight' || cmd === 'JustifyCenter' || cmd === 'JustifyFull') )

Любые предложения о том, как это можно написать более чистым способом?

Спасибо

Ответы [ 4 ]

17 голосов
/ 09 июня 2009
if(!cmd.match(/^Justify(Left|Right|Center|Full)$/))

В ответ на несколько комментариев вы также можете имитировать строгое сравнение с небольшим редактированием:

if( typeof cmd != 'String' || !cmd.match(/^Justify(Left|Right|Center|Full)$/))

Это будет реагировать точно так же, как ваш текущий код, игнорируя все, что не является строкой.

Лично я думаю, что это вряд ли вам понадобится.

4 голосов
/ 09 июня 2009

Звучит как хорошая ситуация для использования переключателя. Просто помните, что коммутаторы выполняют только проверку на равенство (==), а не проверку личности (===), хотя это должно быть хорошо.

switch (cmd) {
    case "JustifyLeft" :
    case "JustifyRight" :
    case "JustifyCenter" :
    case "JustifyFull" :
        // do something
    break;
    case "somethingElse" :
    default:
        // do something else
    break;
}
1 голос
/ 09 июня 2009

Я хотел бы создать метод IsJustifyCommand (s) или создать абстрактный класс команды, в котором есть метод IsJustifyCommand (). Тогда код будет читаться как описание того, что он пытается сделать.

Использование регулярных выражений может быть опрятным, но приведет к проблемам с обслуживанием, если кто-то, кто не является программистом JavaScript, должен работать над кодом. Однако, если у вас есть много случаев, когда регулярное выражение является хорошим решением, используйте его, так как любой, кто посмотрит на код, скоро его подберет.

(Тем не менее, я программист на C #, а не программист на JavaScript, но, как и большинство программистов, мне приходится иногда просматривать / редактировать код JavaScript. Я думаю, что большинство JavaScript поддерживается ни одним программистом JavaScript.)

0 голосов
/ 10 июня 2009

Я ненавижу, когда что-то пишется так. Сначала я смотрю на код и думаю: «если cmd равен JustifyLeft или JustifyRight ..., затем инвертировать это и ... если это правда, делать то же самое ... так что это означает, что это JustifyLeft ...». Для меня это занимает много времени, и мне нужно перечитать строчку, чтобы убедиться, что я правильно понял.

Я думаю, что лучше написать.

if ((cmd !== 'JustifyLeft') && (cmd !== 'JustifyRight') && (cmd !== 'JustifyCenter') && (cmd !== 'JustifyFull'))

Это может быть немного более многословно, но мне легче следовать. Я читаю это как "cmd не может быть любой из строк Justify". Проверка длинного логического выражения с последующим инвертированием всего ответа раздражает.

Мне нравится решение от scragar, просто хотел высказать свои мысли по поводу обращения длинного логического выражения.

...