这个刚刚出现:我如何打破一个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
语句放在一个块中,然后我可以跳出块:
{
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
语句被提前退出——很像在or循环中使用last
or来退出循环。next
while
for
我喜欢mpapec使用标签的解决方案——即使我不使用标签本身。标签是我的描述if
:
IF-UNDER-CONDITION1:
{
if ( $condition1 ) {
last if $condition2;
blah, blah, blah;
last if $condition3;
blah, blah, blah;
}
}
虽然它不是一种标准的编码技术,但代码的流动是显而易见的,一个典型的低级 Perl 开发人员(我离开后必须维护这段代码的人)可以弄清楚代码在做什么并维护它. 他们甚至可能在此过程中学到一些东西。