一般來說,避免GOTO是一種很好的做法。牢記這一點,我一直在與同事討論這個話題。做Perl循環標籤算作一個GOTO?
考慮下面的代碼:
Line:
while(<>) {
next Line if (insert logic);
}
是否使用循環標籤算作一個goto?
這裏是perlsyn中的perldoc不得不說:
這裏有一個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中的良好實踐。
Downvoted。我不同意「每個人都應該避免轉向」的教條式方法。 – zvrba 2010-06-21 14:04:53
@zvrba => Upvoted to counter。這不是什麼downvotes的意思... – 2010-06-21 14:23:49
如果他在這裏,我會贊同同事,但就是這樣。 – Ether 2010-06-21 15:11:48