中,我们厘清了命令式与声明式编程的概念区别,但还是会有小伙伴似懂非懂,那今天就重点来聊聊命令式编程。
命令式编程(Imperativeprogramming),是一种描述计算机所需作出的行为的编程典范。
几乎所有计算机的硬件工作都是命令式的,几乎所有计算机的硬件都是设计来运行机器码,使用命令式的风格来写的。
较高阶的命令式编程语言使用变量和更复杂的语句,但仍依从相同的典范。虽非计算机程序,但与命令式编程有相似的风格:每步都是指令,有形的世界控制情况。因为命令式编程的基础观念,不但概念上比较熟悉,而且较容易具体表现于硬件,所以大部分的编程语言都是命令式的。
一般来说我们对于声明式的理解都是相对于命令式(imperative)而言的。一台有状态的机器,根据明确的指令(instruction)一步步的执行。而所谓的声明式,它可以看作是命令式的反面。曾有人言:一切非imperative,皆是declarative。
当然,命令式编程其实应用更广。实际上我们绝大多数程序员都是在用命令式风格在编程,这是和我们的冯诺依曼计算机机构密切相关的。
在一个冯诺依曼计算机中,最核心的就是CPU和内存,指令和数据都放在内存当中,CPU每次取出一条指令,译码,执行,然后把结果写回内存,本质就这么简单。
这些指令是需要程序员精确地告诉计算机的,当然CPU能理解的都是二进制的机器语言,只有牛人才能用机器语言和汇编写大型程序,普通人只能用高级语言来编程,例如C,C++,Java,Python等,但是高级语言还是要被编译成二进制的机器语言或者用虚拟机/解释器来执行。
早期的命令式编程语言都是计算机本身的机械语言。在这些语言中,指示非常简单,令硬件的运行更容易,却阻碍了复杂程序的设计。年开始开发的FORTRAN,是首个在复杂程序的设计中除掉机器码的编程语言。它是编译型的编程语言,容许命名变量、复杂的表达式、副程序和其他功能,这些功能在命令式语言中都非常普遍。后来的二十年中,可以看到大量的其他高阶命令式编程语言出现。在年后,面向对象编程有迅速的发展;面向对象编程语言均有着命令式的风格,但增添了支持对象的功能。
而大部分的高级语言都支持四种基本的语句:
运算语句一般来说都表现了在存储器内的数据进行运算的行为,然后将结果存入存储器中以便日后使用。高阶命令式编程语言更能处理复杂的表达式,可能会产生四则运算和函数计算的结合。
循环语句容许一些语句反复运行数次。循环可依据一个默认的数目来决定运行这些语句的次数;或反复运行它们,直至某些条件改变。
条件分支语句容许仅当某些条件成立时才运行某个区块。否则,这个区块中的语句会略去,然后按区块后的语句继续运行。
无条件分支语句容许运行顺序转移到程序的其他部分之中。包括跳跃(在很多语言中称为Goto)、副程序和Procedure等。
其中,循环、条件分支和无条件分支都是控制流程。
不过不要觉得面向对象很复杂,其实面向对象本质上也差不多,运行时也是顺序、条件、循环加上函数调用而已,只是在语言层面看来似乎有了封装、继承、多态。
命令式编程就是对硬件操作的抽象,程序员需要通过指令,精确地告诉计算机干什么事情。
因此,这就是程序员厉害但也辛苦的地方:就是需要把复杂的、容易产生歧义的人类语言翻译成精确的计算机语言指令。
各位码农们任重而道远哦。
超实用性的Python零基础入门到进阶视频源码淘宝¥2购买已下架