计算化学公社

 找回密码 Forget password
 注册 Register
Views: 3806|回复 Reply: 5
打印 Print 上一主题 Last thread 下一主题 Next thread

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

[复制链接 Copy URL]

593

帖子

12

威望

4720

eV
积分
5553

Level 6 (一方通行)

密度泛函·小卒

跳转到指定楼层 Go to specific reply
楼主
在S. J. Chapman所写,刘瑾等译的《Fortran 95/2003程序设计》第4.4.1节中提到,“保证在当循环中只有一个退出口”,这是一个良好的编程习惯。
也就是说
  1. [name:] do
  2. ...
  3.   if (逻辑表达式) exit [name]
  4. ...
  5. end do [name]
复制代码

在这里,exit出现的次数不要超过一次。这被作者认为是一种好的编程习惯。
这为什么是一种好的编程习惯?
如果一口气写一堆退出循环的条件,我觉得也很方便啊。
谢谢!
一出生响亮登场,十几岁快乐成长,
二十岁天天向上,三十岁基本定向,
四十岁拼命打创,五十岁回首一望,
六十岁告老还乡,七十岁搓搓麻将,
八十岁躺在床上,九十岁挂在墙上,
人生一世,匆匆忙忙,生得嘹亮,走得凄凉!
生活就像五味瓶,酸甜苦辣难消停!
该吃吃,该喝喝,遇事别去心里搁,
想哭哭,想笑笑,烦恼就往云外抛,
记住甜,忘掉苦,亲人朋友好相处,
心情好,最重要,自我麻痹乐逍遥!

903

帖子

37

威望

5324

eV
积分
6967

Level 6 (一方通行)

2#
发表于 Post on 2018-1-12 18:20:11 | 只看该作者 Only view this author
本帖最后由 ggdh 于 2018-1-12 18:34 编辑

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

评分 Rate

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

查看全部评分 View all ratings

353

帖子

0

威望

2029

eV
积分
2382

Level 5 (御坂)

真 掘墓者

3#
发表于 Post on 2018-1-13 15:01:50 | 只看该作者 Only view this author
Fortran是一门非常古老的结构化程序设计语言,构成结构化的三个基本结构依次为顺序结构,分支结构和循环结构。普遍来说,Fortran被认为在结构化方面上虽然灵活但不具备结构化完备性;完全结构化程序设计语言要求不允许使用无条件转向语句goto,要求一个模块只有一个入口和一个出口,这样不会破坏结构化也便于结构化管理。
仅此而已。

评分 Rate

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

查看全部评分 View all ratings

圣诞刨坟忙

593

帖子

12

威望

4720

eV
积分
5553

Level 6 (一方通行)

密度泛函·小卒

4#
 楼主 Author| 发表于 Post on 2018-1-16 09:43:20 | 只看该作者 Only view this author
本帖最后由 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”还是十分好用的。
我觉得自己肯定不是什么好人……
一出生响亮登场,十几岁快乐成长,
二十岁天天向上,三十岁基本定向,
四十岁拼命打创,五十岁回首一望,
六十岁告老还乡,七十岁搓搓麻将,
八十岁躺在床上,九十岁挂在墙上,
人生一世,匆匆忙忙,生得嘹亮,走得凄凉!
生活就像五味瓶,酸甜苦辣难消停!
该吃吃,该喝喝,遇事别去心里搁,
想哭哭,想笑笑,烦恼就往云外抛,
记住甜,忘掉苦,亲人朋友好相处,
心情好,最重要,自我麻痹乐逍遥!

353

帖子

0

威望

2029

eV
积分
2382

Level 5 (御坂)

真 掘墓者

5#
发表于 Post on 2018-1-16 12:18:33 | 只看该作者 Only view this author
yjcmwgk 发表于 2018-1-16 09:43
额……平心而论,不让用goto其实并不总是合理的。
最近在写燃料电池电极效率预测方面的一些结合实验的半 ...

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

评分 Rate

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

查看全部评分 View all ratings

圣诞刨坟忙

353

帖子

0

威望

2029

eV
积分
2382

Level 5 (御坂)

真 掘墓者

6#
发表于 Post on 2018-1-16 12:35:44 | 只看该作者 Only view this author
本帖最后由 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
圣诞刨坟忙

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-24 01:26 , Processed in 0.174372 second(s), 22 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list