Почему вы должны избегать ключевого слова then в Ruby? - PullRequest
8 голосов
/ 14 апреля 2011

В нескольких руководствах по стилю Ruby упоминается, что вам следует «Никогда не использовать». Лично я думаю, что ключевое слово «then» позволяет сделать код более плотным, что, как правило, труднее читать. Есть ли другие обоснования для этой рекомендации?

Ответы [ 3 ]

11 голосов
/ 21 ноября 2014

Я почти никогда не использую ключевое слово then. Однако есть один случай, когда я считаю, что это значительно улучшает читабельность. Рассмотрим следующие мультиусловные операторы if.

Пример A

if customer.jobs.present? && customer.jobs.last.date.present? && (Date.today - customer.jobs.last.date) <= 90
  puts 'Customer had a job recently'
end

Слишком длинная линия. Трудно читать.

Пример B

if customer.jobs.present? &&
   customer.jobs.last.date.present? &&
   (Date.today - customer.jobs.last.date) <= 90
  puts 'Customer had a job recently'
end

Где кончаются условия и где начинается внутренний код. Согласно руководствам по стилю Ruby, у вас есть еще один пробел для условных выражений с несколькими строками, но я все еще не нахожу его легким для чтения.

Пример C

if customer.jobs.present? &&
   customer.jobs.last.date.present? &&
   (Date.today - customer.jobs.last.date) <= 90
then
  puts 'Customer had a job recently'
end

Для меня Пример C является наиболее очевидным. И именно использование then делает трюк.

6 голосов
/ 14 апреля 2011

Если я правильно помню, then - это только один из разделителей, отделяющих условие от истинной части (точка с запятой и новая строка - остальные)

, если у вас есть оператор if, который являетсяliner, вам придется использовать один из разделителей.

if (1==2) then puts "Math doesn't work" else puts "Math works!" end

для многострочных ifs, then необязательно (перевод строки работает)

if (1==2) 
    puts "Math doesn't work" 
else 
    puts "Math works!" 
end

Не могли бы вы опубликовать ссылку на один из упомянутых вами руководств по стилю ...

2 голосов
/ 14 апреля 2011

Я думаю, что "никогда не использовать then" неправильно.Использование слишком большого количества неалфавитных символов может сделать код таким же трудным для чтения, как perl или APL.Использование слова на естественном языке часто делает программиста более удобным.Это зависит от баланса между читабельностью и компактностью кода.Тернарный оператор иногда удобен, но уродлив при неправильном использовании.

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