Где лучше всего поставить константу при условии? - PullRequest
0 голосов
/ 19 января 2009

Где лучше всего поместить константу в условие? Левая сторона или Правая сторона?

Я лично использую в правой части:

if($value > 23)
{
}

Ответы [ 8 ]

5 голосов
/ 19 января 2009

Многие люди скажут LHS, потому что это мешает вам делать тонкие и вредные вещи, такие как if (foo = KBAR) (обратите внимание на отсутствие '=='), но я всегда нахожу это раздражение для удобства чтения.

4 голосов
/ 19 января 2009

Правая сторона. Левая сторона - это традиция в C / C ++, потому что люди иногда забывают и используют «=» вместо «==», а в этом случае константное значение слева приводит к ошибке компиляции.

2 голосов
/ 19 января 2009

зависит от:

если (23 <= i и i <= 40) </p>

но я бы предпочел правую сторону, это читается более естественно

1 голос
/ 19 января 2009

Ответ, как всегда, «это зависит». В большинстве случаев, это выглядит более естественно, чтобы поместить это правильно, как в примере OP. В других случаях, особенно в составных выражениях, которые проверяют, находится ли что-то в диапазоне (см. Пример Peter Miehle ), это может пойти в любую сторону. Я думаю, что вы должны использовать то, что делает это утверждение более понятным для любых будущих программистов, которые сталкиваются с вашим кодом. Если нет четкой разницы в читабельности, я рекомендую по умолчанию поставить его правильно, поскольку именно этого ожидает большинство людей (принцип наименьшего удивления). Как уже упоминалось многими, любой достойный компилятор в настоящее время предупредит вас, если вы попытаетесь выполнить присваивание внутри оператора if (обычно вы можете отключить это предупреждение, добавив дополнительный набор скобок вокруг присваивания). Кроме того, было упомянуто, что некоторые JIT или интерпретируемые языки могут затруднить поиск этой проблемы без уловки с константой слева, но IIRC, многие из них также выдадут предупреждение в этом случае, так что если вы запустите они с предупреждениями рассматриваются как ошибки, это поможет вам решить эту проблему.

1 голос
/ 19 января 2009

Это действительно имеет значение? Это может помочь вам, если вы соблюдаете соглашение a , но хотите ли вы сохранить константы с одной стороны или всегда использовать операторы <, <= и избегать>,> =; это действительно зависит от вас.

Это, безусловно, не имеет значения для компилятора / интерпретатора, и современные компиляторы должны выдавать четкое предупреждение, когда вы случайно пишете «установлено в» (=) вместо «делает ли это равным» (==), как указано в сообщение ocdecio .

1 голос
/ 19 января 2009

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

0 голосов
/ 19 января 2009

Всегда используйте <(и <=), никогда не используйте> (или> =) и избегайте языков, которые не могут различить присваивание и равенство.

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

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

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

Привет

0 голосов
/ 19 января 2009

Я предпочитаю левую сторону, так как она предотвращает случайные назначения, например, так:

// when using = instead of == this can result in accidental assignment
if ($value == null) {}

// $value cannot be accidentally assigned this way 
if (null === $value) {}

ПРИМЕЧАНИЕ: после прочтения другого ответа, который я понимаю при использовании скомпилированных языков, это может привести к неприятностям. Я все еще предпочитаю использовать это, так как мой основной язык - PHP. Для скомпилированных языков, пожалуйста, обратитесь к ответам, которые уже дали другие.

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