编程范式

编程范式
  程序编写的方式称为编程范式(Programming Paradigm)。主要的编程范式包括命令式编程(Imperative)、声明式(Declarative)、过程式(Procedural)和函数式(Functional)。本篇主要描述命令式编程和声明式编程的定义和区别。
  命令式编程:关注于“怎么实现”,而不是“目标是什么”。
  声明式编程:关注于“目标是什么”,而不是“怎么实现”。
  命令式编程的“怎么实现”通常意味着包含多个步骤;而声明式编程的“目标是什么”仅仅指出目标是什么,具体如何实现并不关心(由其它实体去实现)。仅从定义很难理解两者的不同,下面通过例子来说明。

numbers = [i for i in range(1, 6)]

total = 0
for n in numbers:
    total += n

print('total: %d' % total)

  程序输出:

total: 15

  在上面的例子中,通过for语句从列表numbers逐个取出数n,然后计算total与数n的和,并将结果存入total。循环完成后,列表numbers中所有数的和就保存到了total中。可以看出,上面的例子是通过执行多个步骤实现最终的目标,即关注“怎么实现”,所以这是属于命令式编程。
  让我们看一个声明式编程的例子。

numbers = [i for i in range(1, 6)]

total = sum(numbers)

print('total: %d' % total)

  程序输出:

total: 15

  上面的例子与之前的例子目标是一样的,也是统计列表numbers中所有数的和。但它没有逐个取出列表numbers中的数,仅仅只是将列表numbers传入sum()函数,然后就获取了总和。这个例子并不关心sum()函数如何实现(可以按照正序相加,也可以按照反序,或者其它方式),而是关心“目标是什么”,所以求和的部分属于声明式编程。
  按照编程语言来划分:
  命令式编程:C、C++、Java
  声明式编程:SQL、HTML
  混合型:JavaScript、C#、Python(更偏向于命令式编程)
  实际上,两种编程范式并不是割裂开的,通常对于使用者是声明式而对于实现者是命令式。例如:对于用户来说,SQL语句的SELECT * FROM User是明显的声明式;而对于数据库来说,它会解析这条SQL语句并执行多个步骤才能获取数据,是命令式。