Я знаю, что Руби поддерживает суффикс if
как:Какова цель использования суффикса «if» в Ruby?
number = -42 if opposite
но какова цель этого? Почему он будет использоваться вместо инструкции if
?
Я знаю, что Руби поддерживает суффикс if
как:Какова цель использования суффикса «if» в Ruby?
number = -42 if opposite
но какова цель этого? Почему он будет использоваться вместо инструкции if
?
Это то же самое, что и префикс, но короче. Единственная причина - сохранить вертикальное пространство в текстовом редакторе.
Это может сделать код более удобным для чтения в некоторых случаях. Я считаю, что это особенно верно в случае unless
, где у вас есть какие-то действия вы обычно необходимо выполнить:
number = -42 unless some_unusual_circumstance_holds
После того как вы его unless
, для симметрии, имеет смысл поддерживать его if
также.
Не понимаю, почему вы упоминаете «если» только косвенно Если у вас есть 'если' для вещей, которые вы обычно хотите поддержать, то у вас есть' if' для вещей, которые вы в основном хотите поддержать. – sawa
number = -42 if opposite
такая же, как
if opposite
number = -42
end
Некоторые люди предпочитают одну гильзу для удобства понимания. Представьте себе такую строку, как:
process_payment if order_fulfilled?
Не так ли?
Суффикс стиле if
и unless
также может быть хорошо для "сторожевых пунктов", в виде:
return if ...
return unless ...
Вот пример:
# suffix-style
def save
return false if invalid?
# go for it
true
end
Versus:
# indented style
def save
if valid?
# go for it
true
else
false
end
end
Во втором примере вся реализация метода имеет t o сдвигаться на один отступ из-за проверки valid?
, и нам нужен дополнительный пункт else
. С типом суффикса проверка invalid?
считается краевым кейсом, который мы обрабатываем, а затем выходим из системы, а остальной части метода не требуется отступ или предложение else
.
Это иногда называется «оговоркой о защите» и является recommended Руководством по стилю Ruby.
@vgoff Я отредактировал свой ответ, чтобы было ясно, что примерный код должен возвращать разные значения для допустимых и недопустимых путей кода. –
Стиль Postfix не содержит раздел else
. Это полезно, когда вы только хотите что-то сделать с одним из двух случаев, деленное на условие, и не хотите связываться с другим случаем.
Я думаю, что эта форма «умного» назначения уродлива, но в других случаях это делает: 'raise some_exception if something_bad'. – user2864740
Ruby имеет это, потому что Perl имеет это, Perl имеет это, потому что (AFAIK) иногда он читает лучше. –
@ user2864740, я полностью согласен с вами. Я вспоминаю прочтение строки: «Все хорошо, если все кончается хорошо», и думая, насколько лучше это было бы «Если все кончается хорошо, все хорошо». –