gpt4 book ai didi

loops - Perl循环标签算作GOTO吗?

转载 作者:行者123 更新时间:2023-12-03 13:06:17 25 4
gpt4 key购买 nike

通常,避免GOTO是一个好习惯。记住这一点,我一直在与同事讨论这个话题。

考虑以下代码:

Line:
while( <> ) {
next Line if (insert logic);
}


使用循环标签是否可以算作跳转?

这是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中这是或不被认为是一种好的做法。

最佳答案

Dijkstras的意图绝不是将类似于goto的任何东西视为有害。正是由于使用了gotos作为几乎任何类型的程序流更改的主要构造的代码结构,导致了今天我们所说的意大利面条式代码。

您应该阅读原始文章,并记住它写于1968年,当时标记跳转是几乎所有编程语言中的主要流程控制结构。

https://www.cs.utexas.edu/users/EWD/ewd02xx/EWD215.PDF

关于loops - Perl循环标签算作GOTO吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3085277/

25 4 0