'И' по сравнению с '&&' как оператор

У меня есть кодовая база, где разработчики решили использовать AND и OR вместо && и ||.

Я знаю, что существует различие в приоритете операторов (&& идет прежде and), но с данной платформой (PrestaShop, чтобы быть точным) это - ясно не причина.

Какую версию Вы используете? and более читаемый, чем &&? Или нет ли никакое различие?

284
задан Peter Mortensen 6 December 2015 в 00:41
поделиться

4 ответа

Если вы используете И и ИЛИ , вы в конечном итоге столкнетесь с чем-то вроде этого:

$this_one = true;
$that = false;

$truthiness = $this_one and $that;

Хотите угадать, чему равняется $ истинность ?

Если вы сказали ложь ... бзззт, извините, неверно!

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

($truthiness = $this_one) and $that

Если вы использовали && вместо и в первом примере кода, он будет работать так, как ожидалось, и будет ] ложь .

Как обсуждается в комментариях ниже, это также работает для получения правильного значения, поскольку скобки имеют более высокий приоритет, чем = :

$truthiness = ($this_one and $that)
639
ответ дан 23 November 2019 в 01:52
поделиться

В зависимости от того, как он используется, он может быть необходим и даже удобен. http://php.net/manual/en/language.operators.logical.php

// "||" has a greater precedence than "or"

// The result of the expression (false || true) is assigned to $e
// Acts like: ($e = (false || true))
$e = false || true;

// The constant false is assigned to $f and then true is ignored
// Acts like: (($f = false) or true)
$f = false or true;

Но в большинстве случаев это больше похоже на вкус разработчика, как и все подобные случаи, которые я видел в среде CodeIgniter, о которой упоминал @Sarfraz.

43
ответ дан 23 November 2019 в 01:52
поделиться

какую версию вы используете?

Если в стандартах кодирования для конкретной кодовой базы, для которой я пишу код, указано, какой оператор должен использоваться, я обязательно использую его. Если нет, и код диктует, какой оператор следует использовать (не часто, можно легко обойти), то я буду использовать его. Otherwise, probably &&.

Является ли 'and' более читабельным, чем '&&'?

Является ли оно более читабельным для вас. Ответ да и нет зависит от многих факторов, включая код вокруг оператора и человека, который его читает!

|| есть ~ разница?

Да. Смотрите логические операторы для || и битовые операторы для ~.

1
ответ дан 23 November 2019 в 01:52
поделиться

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

true && false || false; // returns false

true and false || false; // returns true

Следовательно, использование && и || безопаснее, поскольку они имеют наивысший приоритет. Что касается читабельности, я бы сказал, что эти операторы достаточно универсальны.

UPDATE: В комментариях говорится, что обе операции возвращают false... ну, на самом деле приведенный выше код ничего не возвращает, извините за двусмысленность. Поясню: поведение во втором случае зависит от того, как используется результат операции. Обратите внимание, как здесь вступает в игру старшинство операторов:

var_dump(true and false || false); // bool(false)

$a = true and false || false; var_dump($a); // bool(true)

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

0
ответ дан 23 November 2019 в 01:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: