JSB*_*ոգչ 49 perl if-statement readability
在Perl代码中最好使用if
vs的一些指导原则是什么unless
?在某些情况下是否有充分理由偏好其中一种?
fri*_*edo 60
在Perl最佳实践中,建议永远不要使用unless
.就个人而言,我认为这是疯狂的.
我用的unless
时候有一个简单的条件,我本来写的if( ! ... )
.我发现该unless
版本更具可读性,尤其是在用作后缀时:
do_something() unless $should_not_do_that;
Run Code Online (Sandbox Code Playgroud)
我建议避免unless
任何时候事情变得更复杂,例如当你有elsif
或else
阻止时.(幸运的是,或许不幸的是,根据你的观点,没有elsunless
)
此外,任何时候条件是由其他布尔组成的复杂表达式.例如,
unless( $foo and !$bar )
Run Code Online (Sandbox Code Playgroud)
非常混乱,并没有相应的优势if
.
Mic*_*man 35
除了一个深奥的案例1 unless
,只是语法糖if !
.它的存在是为了让您编写更清晰,更具表现力的代码.它应该在实现这一目标时使用,并在它受到损害时避开.
我发现unless
对循环中的流控制最有用.例如
while (<$fh>) {
next unless /\S/;
# ...
}
Run Code Online (Sandbox Code Playgroud)
对于简单的否定,我发现它比否定更清晰if
- !
在阅读代码时很容易错过领导.
unless ($condition) {
do_something();
}
if (!$condition) {
do_something();
}
Run Code Online (Sandbox Code Playgroud)
但是不要写unless ... else
,因为那只是不和谐.
在后缀形式中,它提供了有关通过代码的预期路径的提示.
do_normal_thing() unless $some_unlikely_condition;
Run Code Online (Sandbox Code Playgroud)
return
.
Gra*_*ean 12
根据经验,"除非"应该不经常使用.
它在后缀形式中特别有用,例如:
delete_old_widgets() unless $old_widget_count == 0
Run Code Online (Sandbox Code Playgroud)
除非您不应使用的情况:
小智 9
我最近花了一个小时试图向某人解释两个嵌套的"除非"子句是如何工作的,如果没有将它们反转为具有布尔逻辑的if语句,则很难对decypher进行解释.
如果您尝试将其转换为英语,则有助于指导您.
一个简单的除非工作正常.例如.
"除非你安静,否则我会忽视你."
unless ($quiet) {
ignore();
}
Run Code Online (Sandbox Code Playgroud)
虽然我认为这同样有效
"如果你不安静,我会忽视你"
if (not $quiet) {
ignore();
}
Run Code Online (Sandbox Code Playgroud)
当它开始变得复杂的时候就是你有否定的时候.
"除非你不吵闹,否则我会忽视你"
unless ( ! $noisy) {
ignore();
}
Run Code Online (Sandbox Code Playgroud)
写得好得多
"如果你很吵,我会不理你的话"
if ($noisy) {
ignore();
}
Run Code Online (Sandbox Code Playgroud)
所以,如果你也有否定,不要使用'除非'.
也不要使用'除非'
unless ($quiet) {
ignore();
}
else {
give_a_sweet();
}
Run Code Online (Sandbox Code Playgroud)
"除非你安静,否则我会不理你,否则我会给你一个甜蜜的'
通过反转条件来改变它.
if ($quiet) {
give_a_sweet();
}
else {
ignore();
}
Run Code Online (Sandbox Code Playgroud)
"如果你安静,我会给你一个甜蜜的,否则我会不理你".
有一个以上的条件,它会变得混乱.
unless ($quiet and not $fidgit) {
punish();
}
Run Code Online (Sandbox Code Playgroud)
"除非你安静,否则你不会狡猾,我会惩罚你."
(对不起,我的理解在这里失败了!)
再次,否定它.
if (not $quiet or $fidgit) {
punish();
}
Run Code Online (Sandbox Code Playgroud)
"如果你不安静,或者你是骗子,我会惩罚你".
即使对于最简单的情况,使用'除非'的问题,他们经常(通过你自己或外面
我希望除非你应该或不应该使用它吗?
(除非你没有其他意见?)