Ruby提供了unless
和elsif
声明。假设会有类似的elsunless
陈述似乎是自然的,但是没有。这是否有特定的原因?为什么Ruby中没有`elsunless`语句?
为了说明,这个声明将允许这样的代码。
unless broken
# do something
elsunless done
# do something else
end
我知道,这个代码可以被改写为使用if
和elsif
,但在使用unless
某些情况下,更清晰。
Ruby提供了unless
和elsif
声明。假设会有类似的elsunless
陈述似乎是自然的,但是没有。这是否有特定的原因?为什么Ruby中没有`elsunless`语句?
为了说明,这个声明将允许这样的代码。
unless broken
# do something
elsunless done
# do something else
end
我知道,这个代码可以被改写为使用if
和elsif
,但在使用unless
某些情况下,更清晰。
背后if
/else
语句的逻辑通常是:
有一个例外:
if exception_a
# do exception stuff
else
# do standard stuff
end
unless exception_a
# do standard stuff
else
# do exception stuff
end
在这种情况下添加unless
是非常有用的,因为你可以切换你的代码。我还喜欢unless
的是,你可以单独做你的标准东西,同时检查异常。 (该else
块可以被排除在外)
拥有多个例外:
这里谈到棘手的部分:
if exception_a
# do exception stuff a
elsif exception_b
# do exception stuff b
else
# do standard stuff
end
unless exception_a
# do standard stuff
elsunless exception_b
# do ???
else
# do exception stuff
end
除了是完全不可读的,我无法找到一个合乎逻辑的意义elsunless
block:你会在那里输入什么代码?我仍然不知道这是否会是一些例外或标准代码。
也许你可以进一步解释你将在这个块中使用什么代码。
Ruby已经提供了if
,else
,elsif
和unless
,那么真的需要elsunless
吗?它看起来像一个庞然大物的庞然大物。我认为Matz没有看到将语句添加到ruby语法的原因。 此外,一些红宝石编码器调查排除unless
声明使用,从Perl遗传的ruby编码标准。
至于我,我会完全删除该语言的unless
关键字。
看一看在styling guide
尽管我同意'elsunless'会成为屁股疼痛,但我绝不会去除语言中的'除非'。当你掌握它时,它变得非常有用。 –
“if!”要短得多,当然我们总是可以使用DeMorgan的规则。 =) –
“如果不是”更短,而且不是符号。在阅读代码时,符号很容易跳过,尽管我们应该注意,但我们也想说清楚。在语义上,!意味着兴奋,而不是'不'。尽管如此,它在表达方面很有价值。只是我的观点。 – vgoff
没有'elseunless'因为它的意思不直观。 –
其实,我会加关键字'otherwise'和'otherwisif'。它比'else'好得多。想一想:“如果真的把”嗨“放在其他地方,否则将”低“末端' – mjnissim
在我看来,'除非..else'很难让你的头,特别是对不熟悉代码的人。我从来没有遇到过使用'if..else'重写它并没有改进的情况。增加另一种选择会使情况更加复杂。 –