返回介绍

避免 do/while 循环

发布于 2024-08-18 11:54:29 字数 1576 浏览 0 评论 0 收藏 0

很多推崇的编程语言,包括Perl,都有do{expression}while(condition)循环。其中的表达式至少会执行一次。下面举个例子:

do/while的奇怪之处是一个代码块是否会执行是由其后的一个条件决定的。通常来讲,逻辑条件应该出现在它们所“保护”的代码之前,这也是if.while和for语句的工作方式。因为你通常会从前向后来读代码,这就使得do/while循环有点不自然了。很多读者最后会读这段代码两遍。

while循环相对更易读,因为你会先读到所有迭代的条件,然后再读到其中的代码块。但仅仅是为了去掉do/while循环而重复一段代码是有点愚蠢的做法:

幸运的是,我们发现实践当中大多数的do/while循环都可以写成这样开头的while循环:

这个版本还有一个好处是对于max_length是0或者node是null的情况它仍然可以工作。

另一个要避免do/while循环的原因是其中的continue语句会很让人迷惑。例如,下面这段代码会做什么?

它会永远循环下去还是只执行一次?大多数程序员都不得不停下来想一想。(它只会循环一次。)

最后,C++的开创者Bjarne Stroustrup讲得好(在《C++程序设计语言》[1]一书中):

我的经验是,do语句是错误和困惑的来源……我倾向于把条件放在“前面我能看到的地方”。其结果是,我倾向于避免使用do语句。

[1]由机械工业出版社引进并出版,英文书名为《The C++Programming Language》。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文