2014-11-25 3 views
4

Я помню, что мне сказали, что наличие инструкции if if(10 == $myVariable) - это плохая практика. Однако почему это плохая практика и как ее зовут? (Я могу смутно помнить, что у него есть определенное имя).Переключение if-утверждения вокруг плохой практики?

+7

Это «условия Йода». – DCoder

+4

На самом деле некоторые яростно думают, что это хорошая практика, если вы случайно наберете '(10 = $ myVariable)', так как это вызывает ошибку в отличие от '($ myVariable = 10)'. Этот вопрос, в первую очередь, основан на мнениях. – sjagr

+1

и его выполнение для предотвращения случайных присвоений, которые всегда возвращают true, если вы должны оставить один из '=' s. – sevenseacat

ответ

2

Согласно a post на блоге Джефф Этвуд Coding Horror, StackOverflow пользователя zneak называет это Состояние Yoda. Описание выглядит следующим образом:

Использование if(constant == variable) вместо if(variable == constant), как if(4 == foo). Потому что это похоже на высказывание «если синее небо» или «если высокий мужчина».

Это относится к персонажу Звездных войн Yoda, который always talks backwards.

В качестве exussum упоминаний в his answer, это иногда не считается плохой практикой, потому что он может избежать опечаток.

11

хорошая практика из-за случайных опечаток

if (10 = $myVariable) 

не скомпилируется, где в качестве

if ($myVariable = 10) 

волю, и если утверждение верно делают, а также установить $ MYVARIABLE на 10

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

http://en.wikipedia.org/wiki/Yoda_conditions

+0

Как вы можете сказать, что это хорошая практика? Если вы внимательно прочтете свою цитированную статью в вики, вы увидите также критику и недостатки. Так что это действительно основанный на мнениях ответ и не очень беспристрастный. –

+0

Я согласен, что это вариант, но большинство вопросов, связанных с «хорошей практикой», есть. Например, использование пробела при программировании добавляет ненужные байты в файл (критика и недостаток). Хотя я не знаю никакого поддерживаемого кода, который не использует пробелы. один человек хорошая практика всегда будет другой плохой практикой.Думайте о программистах с использованием пробелов, безусловно, является недостатком. – exussum

+0

Я согласен с вами, но разве вы не должны упоминать об этом тоже? Таким образом, каждый может принимать свои собственные решения, основываясь на фактах, а не на других мнениях? Просто предложение, потому что в вашем ответе я не вижу, что это просто мнение. Для меня, как читателя, я воспринимаю это как тяжелые факты, если критики не учитываются. –

4

Это также может быть хорошей практикой на языках, где доступ к null может привести к сбою, например, Java. Например, следующий безопасен, даже если MYVARIABLE является null:

if ("foo".equals(myVariable)) { 
    // Do something 
} 

Принимая во внимание следующие будут бросать NullPointerException:

if (myVariable.equals("foo")) { 
    // Do something 
} 

Если стандарты кодирования требуют, чтобы переменная приходит первым, ваш код сделал более подробное требование по нечетной проверке:

if (myVariable != null && myVariable.equals("foo")) { 
    // Do something 
} 
Смежные вопросы