Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么要在Ruby中避免then关键字?_Ruby_Coding Style - Fatal编程技术网

为什么要在Ruby中避免then关键字?

为什么要在Ruby中避免then关键字?,ruby,coding-style,Ruby,Coding Style,在一些Ruby风格的指南中提到,您应该“永远不要使用then”。就个人而言,我认为“then”关键字可以使代码更密集,这往往更难阅读。这个建议还有其他理由吗?如果我没记错的话,那么只是分隔条件和真实部分的分隔符之一(分号和换行符是其他的) 如果if语句是一行,则必须使用其中一个分隔符 if(1==2)则放入“数学不起作用”否则放入“数学起作用!”结束 对于多行ifs,则是可选的(换行操作) 你能发一个链接到你提到的某个风格指南吗…我认为“永远不要使用,那么”是错误的。使用太多的非字母字符会使代码

在一些Ruby风格的指南中提到,您应该“永远不要使用then”。就个人而言,我认为“then”关键字可以使代码更密集,这往往更难阅读。这个建议还有其他理由吗?

如果我没记错的话,
那么
只是分隔条件和真实部分的分隔符之一(分号和换行符是其他的)

如果if语句是一行,则必须使用其中一个分隔符

if(1==2)则放入“数学不起作用”否则放入“数学起作用!”结束

对于多行ifs,
是可选的(换行操作)


你能发一个链接到你提到的某个风格指南吗…

我认为“永远不要使用
,那么
”是错误的。使用太多的非字母字符会使代码像perl或APL一样难以阅读。使用一个自然语言单词通常会让程序员感到更舒服。这取决于代码的可读性和紧凑性之间的平衡。三元运算符有时很方便,但如果被误用,它会很难看。

我几乎从不使用
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

如果customer.jobs.present?&&customer.jobs.last.date.present?&&(Date.today-customer.jobs.last.Date)当然,我们通常(总是?)可以用三元运算符的用法替换一行,例如,
put'Math'+(1==2?“不起作用”:“起作用!”)
不一定要说我们应该这样做,请注意,只是它是一个选项三元运算符可以替代if/then/else语句。它不能代替if/then。@Mike-有趣的一点。我对三元运算符的唯一问题是,它有时会损害可读性(对于初学者来说,它们有点迟钝)。对于小的单行程序,我同意它可能是一个可行的替代方案,或者如果有人登录,
greet\u user的if修饰符方法
if customer.jobs.present? && customer.jobs.last.date.present? && (Date.today - customer.jobs.last.date) <= 90
  puts 'Customer had a job recently'
end
if customer.jobs.present? &&
   customer.jobs.last.date.present? &&
   (Date.today - customer.jobs.last.date) <= 90
  puts 'Customer had a job recently'
end
if customer.jobs.present? &&
   customer.jobs.last.date.present? &&
   (Date.today - customer.jobs.last.date) <= 90
then
  puts 'Customer had a job recently'
end