通常,避免 GOTO 是一种很好的做法。牢记这一点,我一直在与一位同事就这个话题进行辩论。
考虑以下代码:
Line:
while( <> ) {
next Line if (insert logic);
}
使用循环标签算作 goto 吗?
这是perldoc 中的perlsyn必须说的:
以下是 C 程序员如何在 Perl 中编写特定算法的方法:
for (my $i = 0; $i < @ary1; $i++) {
for (my $j = 0; $j < @ary2; $j++) {
if ($ary1[$i] > $ary2[$j]) {
last; # can't go to outer :-(
}
$ary1[$i] += $ary2[$j];
}
# this is where that last takes me
}
而下面是一个对这个习惯用法更熟悉的 Perl 程序员可能会这样做的方式:
OUTER: for my $wid (@ary1) {
INNER: for my $jet (@ary2) {
next OUTER if $wid > $jet;
$wid += $jet;
}
}
我对此的看法是否定的,因为您明确告诉循环短路并前进,但是我的同事不同意,说这只是一个花哨的 GOTO,应该避免。我正在寻找一个令人信服的论点或文档来解释为什么这是或不是 GOTO。我也会接受解释为什么这在 perl 中被认为是或不被认为是好的做法。