关于在高级语言中不建议使用goto语句的看法

为什么编程语言中不建议使用goto语句?

目前的编程语言都采用结构化语言,结构化语言来自于学者戴克斯特拉提倡的结构化程序设计,这是一种编程风格。 而结构化语言中是不建议使用goto语句的。
1972年的图灵奖得主艾兹格·迪科斯彻也曾提出“goto有害论”。
《计算机是怎样跑起来的》中这样写道:所谓结构化程序设计就是“为了把程序编写得具有结构性,仅使用顺序执行、条件分支和循环表示程序的流程即可,而不再使用跳转指令。”

作为在计算机上的硬件行为,无论是条件分支还是循环都必须使用跳转指令来实现。但是在目前的高级语言中,可以用选择语句表示条件分支,用for等循环语句表示循环。跳转指令因此变得可有可无了。所以戴克斯特拉想表达的是既然高级语言不用跳转指令就能表述出程序的所有流程,那么就不要使用危害性不小的跳转语句了。

早期的算法语言,比如fortran、pascal、basic等都支持goto语句,因为那时的语句较少,分支结构、循环结构需要借助goto语句实现。但这些高级语言对goto语句做制了严格的限制。比如:
1、可以从一个结构(条件、循环)内部跳到外部,反之则不允许;
2、不允许从子程序中直接跳出,而要采用类似return的返回语句退出子程序,当然从主程序跳入子程序是绝对禁止的。
等等
这些限制对现代还支持goto语句的算法语言仍然起作用。

goto跳转语句的危害

1、在程序比较简单问是用goto语句是比较灵活,但是当程序比较复杂时很容易造成程序流程的混乱。像这样,使程序陷入错综复杂的状态——意大利面条的既视感。
在这里插入图片描述

2、尽管写起来自己当时确实感觉很爽,但写的代码可阅读性不好,在团队开发中影响效率,以后调试和维护程序的过程会令同事和自己都头秃。
在这里插入图片描述

理解

任何事物都有两面性,goto语句灵活性如果在适当的地方发挥出来确实非常有用的,毕竟现在有些地方需要无条件的跳转语句。尤其在汇编语言中,如果不使用类似于goto语句的jmp指令,那么其就无法实现循环和条件分支。所以在汇编语言中,goto语句用处还是很大的。

但现在的编程趋势是要模块化、结构化、所以大多书上已经不建议使用无条件分支的goto语句了,尽管现在大多数语言还在支持它,但还是少用为妙,尤其是像跟我一样的小白,还是瑟瑟发抖的乖乖用break慢慢跳吧。

猜你喜欢

转载自blog.csdn.net/weixin_45797022/article/details/105449201
今日推荐