这个问题刚刚出现:如何打破 if
语句?我有一个很长的 if 语句,但有一种情况我可以尽早摆脱它。
在循环中我可以这样做:
while (something ) {
last if $some_condition;
blah, blah, blah
...
}
但是,我可以对 if 语句执行同样的操作吗?
if ( some_condition ) {
blah, blah, blah
last if $some_other_condition; # No need to continue...
blah, blah, blah
...
}
我知道我可以将 if
语句放入一个 block 中,然后我可以跳出该 block :
{
if ( some_condition ) {
...
last if $some_other_condition; # No need to continue...
blah, blah, blah
...
}
}
或者,我可以创建一个子例程(以编程方式可能更好):
if ( some_condition ) {
run_subroutine();
}
sub run_subroutine {
blah, blah, blah
return if $some_other_condition;
blah, blah, blah
...
}
但是有什么方法可以退出 if
条件吗?
分辨率
出现这个问题是因为我正在帮助某人编写代码。在相当长的 if
语句中,还嵌入了其他几个 if
语句。代码看起来像这样:
if ( $condition1 ) {
blah, blah, blah;
if ( not $condition2 ) {
blah, blah, blah;
if ( not $condition3 ) {
blah, blah, blah;
}
}
}
我认为这样做可以使整个事情更具可读性:
if ( $condition1 ) {
last if $condition2;
blah, blah, blah;
last if $condition3;
blah, blah, blah;
}
这表明 if
语句的正常流程是标准的,但在某些条件下,if
语句会提前退出 - 很像使用 last
或 next
在 while
或 for
循环中退出循环。
我喜欢mpapec's使用标签的解决方案——即使我不使用标签本身。标签是我的 if
的描述:
IF-UNDER-CONDITION1:
{
if ( $condition1 ) {
last if $condition2;
blah, blah, blah;
last if $condition3;
blah, blah, blah;
}
}
虽然这不是一种标准的编码技术,但代码的流程足够明显,以至于典型的低级 Perl 开发人员(在我离开后必须维护此代码的开发人员)可以弄清楚代码在做什么并维护它。他们甚至可能在这个过程中学到一些东西。
最佳答案
您可以使用basic block它受 last
、next
和 redo
的影响,因此可能会中断。
if ($condition) {EXIT_IF:{
last EXIT_IF; # break from code block
print "never get's executed\n";
}}
<小时/>
EXIT_IF: {
if ($condition) {
last EXIT_IF; # break from code block
print "never get's executed\n";
}
}
关于Perl 跳出 If 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17053666/