0

为了更好地了解过程编程,无论是用于实际用途还是学术用途,我都试图阐明 CONTINUE 和 BREAK 语句对状态的影响。

我已经明白 GOTO 基本上是被禁止的,因为如果你是一个优秀的程序员,你可以找到更好的方法。然而,我也更深层次地理解,在过程编程中应该避免它,因为它缺乏改变状态的能力。

这让我感到困惑,CONTINUE 和 BREAK 怎么能改变状态?

我最初的想法是,因为 GOTO 是这样的:

GOTO A;
LBL A;

不计算表达式,也不更改状态。并结合CONTINUE的形式:

while (evalFunction(*value) == 1) {
  ..
  if ( bail == 1 ) continue;
  ..
}

具有在 while 条件下更改状态的能力。

但是,这并不能解释 BREAK。

有人可以提供有关程序编程细节的更多细节吗?

4

1 回答 1

4

我不知道这种“改变状态的能力”是从哪里来的。

代码的最高优点是可读性。应避免使用 GOTO,因为它经常使代码难以阅读,而且没有其他原因。事实上,在某些情况下,使用 GOTO 的代码比避免使用 GOTO时更容易阅读,在这些情况下,应该使用GOTO 。一个很好的例子是 C 的嵌套清理习语:

int do_something()
{
   int rv = -1; /* failure */
   Foo *foo = get_a_foo();
   if (!foo) goto out;
   Bar *bar = get_a_bar();
   if (!bar) goto out_foo;

   rv = do_something_with_foo_and_bar(foo, bar);

   release_bar(bar);
out_foo:
   release_foo(foo);
out:
   return rv;
}

这比使用嵌套 if 语句的替代方案更容易阅读,因为强调了正常的控制流。(当然,在 C++ 中,您可以使用 RAII,以减少混乱。)

同样,BREAK 和 CONTINUE会使代码更难阅读,应该避免这样做;但是,它们几乎适用于所有现代语言,因为它们通常使代码更易于阅读。因此,它们优于循环内部复杂的 if-else 结构和/或扭曲逻辑,以便可以在循环顶部测试循环退出条件。

于 2012-04-23T19:53:13.267 回答