Стиль кода = когда использовать значение сравнения первым в операторе if - PullRequest
2 голосов
/ 03 апреля 2011

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

if ( false === $testValue) {
    //do something
}

в отличие от более общего:

if ($testValue === false) {
    //do something
}

Очевидно, что это проблема стиля, и она не имеет отношения к результату, но мой вопрос: может ли кто-нибудь сказать, почему кто-то будет использовать этот стиль и откуда он взялся.

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

Ответы [ 4 ]

3 голосов
/ 03 апреля 2011

Это так, что если вы случайно напечатаете = (присваивание) вместо == (сравнение), компилятор пожалуется, что константу нельзя присвоить.

Сравните:

if (false = $testValue) {
    // does not compile, cannot assign to constant
}

до:

if ($testValue = false) {
    // assigns false to $testValue, never evaluates to true
}

Первый не компилируется, последний делает и имеет ошибку.

0 голосов
/ 03 апреля 2011

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

Это совершенно не нужно, если соблюдалась политика сборки «0 предупреждений, 0 ошибок»,и любой, кто использует этот стиль, вряд ли предоставит чистый строительный кодекс.

0 голосов
/ 03 апреля 2011

В чем-то вроде C ++ (я не уверен, какой язык вы используете там с ===), если у вас есть

if(x == 2), и вы пишете это if(x=2) (так что значениеему присваивается не проверенный на равенство), это не вызывает ошибку компилятора (большинство компиляторов сегодня предупреждают вас об этом), но если вы напишите if (2=x) вместо if(2==x), это определенно приведет к ошибке.

0 голосов
/ 03 апреля 2011

Раньше я видел такие проверки в C и C ++:

if (null == x)

Причиной этого было то, что опечатка = для == не имела бы смысла для компилятора, потому что присвоение нулюили константа будет ошибкой.

...