友情提示:本文共有 1333 个字,阅读大概需要 3 分钟。
goto语句的本质就是机器语言的地址跳转指令,也就是汇编语言中的jump 指令,它的作用是命令cpu直接去内存中读取指定地址的指令去执行,从而实现程序逻辑的控制。可以说,我们后来用的高级语言中的分支、循环啊,最终都是用goto这样的指令去实现的。
其实现代的高级语言中有的仍保留有这个语句。是因为它有一个好处就是简单直接,在一些特殊的情况下也许很方便。但是几乎所有的高级语言都建议不要滥用goto,更有的语言直接废除goto语句,是什么原因呢?这要从编程语言的发展历史与需求驱动谈起。
我们都知道编程语言从机器语言发展到汇编语言,又到高级语言的驱动力主要来自“让编程更简单,更高效”。其中有一个最大的问题就是程序的可读性、可维护性。机器语言很直接很高效,就象我们学习的文言文一样,言简意赅,但是缺点就是太难看懂,指令也很难记,因为都是一大串的01010010101,所以后来大佬们发明了汇编,用英文单词的缩写来代表机器指令。象jump 这样的跳转指令就是那会儿发明的。这在可读性上提高了一大截。可是随着需求不断的增加,对程序功能的要求也越来越高,程序的规模量也不断增大,其逻辑越来越复杂。当时的程序员前辈就发现,jump来jump去的,阅读程序时就来回的前后乱翻,对于复杂的程序,一会就会把人搞的晕头转向。最后反倒不知道这个程序的逻辑倒底是什么样的,于是程序如果有bug了,或者要增加新的功能,就非常的复杂容易出错。编程的效率极大的降低。
于是,大佬就开始想招儿,终于有一个人想到了,就是结构化编程法,把程序的逻辑结构分为了三种:顺序、分支、循环。他认为所有的程序逻辑都可以分解为这三种结构及其组合。为了简化编程,同时也发明出高级语言,针对性的增加了象if ... else ,for循环这样的语法。这就有点接近我们平常说的人类语言了,大大提高了程序的可读性和可维护性,不象用goto那样,只能看出程序要跳到哪儿执行,但不知道他的意图是啥,不方便理解程序的逻辑思路,后来大佬们又发明了函数(function) 的概念,函数就是子程序,其实在汇编里也可以写子程序、函数 ,只不过麻烦一些,汇编程序本身没有结构化的指令,只能顺序写指令,然后用指令跳转(类goto)的方式,实现子程序的调用。也就是goto到函数代码的首地址,即第一个指令处。但是用了函数定义的语句,在程序中,函数 是一个独立的区块,有独立的名称和输入输出 参数,在函数外部通过调用这个函数 的名称,就可以代表执行函数体内的所有指令,这就大大简单化了主程序,让人看着简单明了,其实这就是把一个复杂的问题简单化的通用的招术,就是分解嘛,分解成函数间调用,这样每一个函数变得足够简单,就好编写民了。通过这些措施,让一个复杂的程序分解成一个一个函数 ,在函数 内部又清淅的分出顺序、分支和循环的逻辑。这样就能够帮助程序员理解程序的算法逻辑,进而方便进行排错和修改。
通过上述的说明,你肯定已经明白了,goto语句其实是最原子化的完成程序逻辑的指令的对应体,是非结构化编程时代的产物,尽管用它也可以实现任何的逻辑,但是大量用它,会导致你的程序逻辑非常的难看懂,所以也就很难维护,也就会导致程序开发和维护的效率大大降低。
本文如果对你有帮助,请点赞收藏《goto语句对程序的“可读性与可维护性”会引起了很大破坏作用》,同时在此感谢原作者。