请选择 进入手机版 | 继续访问电脑版

计算化学公社

 找回密码
 现在注册!
查看: 165|回复: 5

[Fortran] 请问为何“当循环”中只应该有一个exit退出口?

[复制链接]

460

帖子

11

威望

3038

eV
积分
3718

Level 5 (御坂)

密度泛函·小卒

发表于 7 天前 | 显示全部楼层 |阅读模式
在S. J. Chapman所写,刘瑾等译的《Fortran 95/2003程序设计》第4.4.1节中提到,“保证在当循环中只有一个退出口”,这是一个良好的编程习惯。
也就是说
  1. [name:] do
  2. ...
  3.   if (逻辑表达式) exit [name]
  4. ...
  5. end do [name]
复制代码

在这里,exit出现的次数不要超过一次。这被作者认为是一种好的编程习惯。
这为什么是一种好的编程习惯?
如果一口气写一堆退出循环的条件,我觉得也很方便啊。
谢谢!
东风快递,使命必达!六分钟覆盖全球,哪里不服点哪里!

449

帖子

6

威望

1285

eV
积分
1854

Level 5 (御坂)

发表于 7 天前 | 显示全部楼层
本帖最后由 ggdh 于 2018-1-12 18:34 编辑

好好的编程习惯就是假定看你的代码的人智商没有下限。跟代码写起来是否方便以及运行效率是否高没有多大关系。
一个循环出口越多,越难看懂。
另外据说好的代码要尽量避免循环和if,
参考Cyclomatic complexity
P.S. 个人观点:如果是自己编个小脚本自己用用。而不是搞什么大的软件工程,大可不必讲究这些什么好的编程习惯。方便效率就好。

评分

参与人数 2eV +7 收起 理由
yjcmwgk + 5 非常感谢您的详细讲解
卡开发发 + 2 我很赞同

查看全部评分

206

帖子

0

威望

460

eV
积分
666

Level 4 (黑子)

真 掘墓者

发表于 6 天前 | 显示全部楼层
Fortran是一门非常古老的结构化程序设计语言,构成结构化的三个基本结构依次为顺序结构,分支结构和循环结构。普遍来说,Fortran被认为在结构化方面上虽然灵活但不具备结构化完备性;完全结构化程序设计语言要求不允许使用无条件转向语句goto,要求一个模块只有一个入口和一个出口,这样不会破坏结构化也便于结构化管理。
仅此而已。

评分

参与人数 1eV +5 收起 理由
yjcmwgk + 5 非常感谢您的详细讲解

查看全部评分

圣诞刨坟忙

460

帖子

11

威望

3038

eV
积分
3718

Level 5 (御坂)

密度泛函·小卒

 楼主| 发表于 3 天前 | 显示全部楼层
本帖最后由 yjcmwgk 于 2018-1-16 09:45 编辑
kyuu 发表于 2018-1-13 15:01
Fortran是一门非常古老的结构化程序设计语言,构成结构化的三个基本结构依次为顺序结构,分支结构和循环结 ...

额……平心而论,不让用goto其实并不总是合理的。
最近在写燃料电池电极效率预测方面的一些结合实验的半理论模拟程序
里面大量出现了这东西
  1.         write (*,*) "Now let we calculate the volcano graph."
  2.         write (*,*) "First, please select your task."
  3. 50100   write (*,*) "If you want to input the nessesary data from keyboard,   input 1;"
  4.         write (*,*) "If you want to input the nessesary data from a txt file, input 2."
  5.         write (*,*) "Now input 1 or 2 to select a function:"
  6.         read (*,*) select_function_number
  7.         if ( (select_function_number > 2) .or. (select_function_number < 1) ) then
  8.             write (*,*) "You input a wrong number. Please re-input (1 or 2):"
  9.             goto 50100
  10.         end if
复制代码

我始终认为,“远距离goto”是自找麻烦,但是“近距离goto”还是十分好用的。
我觉得自己肯定不是什么好人……
东风快递,使命必达!六分钟覆盖全球,哪里不服点哪里!

206

帖子

0

威望

460

eV
积分
666

Level 4 (黑子)

真 掘墓者

发表于 3 天前 | 显示全部楼层
yjcmwgk 发表于 2018-1-16 09:43
额……平心而论,不让用goto其实并不总是合理的。
最近在写燃料电池电极效率预测方面的一些结合实验的半 ...

https://en.wikipedia.org/wiki/Closure_(mathematics)
没理解也无所谓

评分

参与人数 1eV +5 收起 理由
yjcmwgk + 5 这个就真不明觉厉啦!

查看全部评分

圣诞刨坟忙

206

帖子

0

威望

460

eV
积分
666

Level 4 (黑子)

真 掘墓者

发表于 3 天前 | 显示全部楼层
本帖最后由 kyuu 于 2018-1-16 13:11 编辑

算了,不然又有400开外的人说装逼了,你去看这篇
E. W. Dijkstra, Communications of the ACM, Vol. 11, No. 3, March 1968, pp. 147-148. DOI:10.1145/362929.362947
圣诞刨坟忙
您需要登录后才可以回帖 登录 | 现在注册!

本版积分规则

Archiver|手机版|小黑屋|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949-1号 )

GMT+8, 2018-1-19 10:01 , Processed in 0.210309 second(s), 22 queries .

快速回复 返回顶部 返回列表