Есть ли какая-то мудрость в использовании операторов «и» и «или» в Ruby?

StackOverflow https://stackoverflow.com/questions/1434842

Вопрос

Интересно, почему рубин дает and, or меньший приоритет, чем &&, || и назначить оператор?Есть ли причина?

Это было полезно?

Решение

Я предполагаю, что это прямой перенос из Perl.Операторы or и and были добавлены позже в Perl 5 для особых ситуаций, когда желателен более низкий приоритет.

Например, в Perl мы хотим, чтобы || имел более низкий приоритет, поэтому мы могли написать:

try to perform big long hairy complicated action     || die ;

и будьте уверены, что || не собирался сожрать часть акции.Представлен Perl 5 or, новая версия || который имеет низкий приоритет именно для этой цели.

Пример в Ruby, где вы могли бы использовать or но нет ||:

value = possibly_false or raise "foo"

Если вы использовали ||, это будет синтаксическая ошибка.

Другие советы

Разница в приоритете. ||, && имеют более высокий приоритет, чем =, но and, or есть ниже.Итак, пока вы можете сделать:

a = nil || 0

Вам нужно будет сделать:

a = (nil or 0)

чтобы получить тот же эффект.Если вы это сделаете:

a = nil or 0

Результатом выражения по-прежнему будет 0, но значение будет равно нулю.

Они имеют очень низкий приоритет, поэтому операнды не нужно заключать в круглые скобки, как это иногда бывает с && и ||.

Возможность контролировать приоритет операторов иногда бывает полезна, особенно если вас беспокоит читабельность — дополнительные круглые скобки в условных операторах иногда могут скрыть реальную логику.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top