编程范式

118 阅读2分钟

命令式编程(Imperative)

主要思想: 关注的是计算机执行的步骤,也就是告诉计算机第一步做啥? 第二步做啥? 。。。(how to do?
特性: 注重过程,通过制定指令来控制每一个过程以达到自己想要的结果,操作步骤多、代码量大、包含流程控制语句。
示例: 判断数组中所有的值是否都小于等于1,命令式编程如下

var arr = [2]int{0,1}
for _, v := range arr {
    if v > 1 {
        fmt.Println("not all numbers less than or equal to 1") 
    }
}

声明式编程(Declarative)

主要思想: 以数据结构的形式来表达程序执行的逻辑。它的主要思想是告诉计算机应该做什么,但不指定具体要怎么做(what to do?)
特性: 注重结果,无需考虑实现逻辑,逻辑由计算机底层实现,代码会精简、可读性会更高、不包含循环控制的代码如 for, while。
示例: 判断数组中所有的值是否都小于等于1,声明式编程如下

-- https://github.com/andeya/gust包

var iter = FromVec([]int{0, 1}) 
if !iter.Any(func(x int) bool { 
    return x > 1 }) { 
        fmt.Println("all numbers less than or equal to 1") 
}

注: mysql查询、网页编程中用到的HTML和CSS也都属于声明式编程

函数式编程(Functional)

主要思想: 把运算过程尽量写成一系列嵌套的函数调用,与声明式编程一样只关心做什么而不是怎么做。
特性: 纯函数, 即函数内的操作不可影响到函数外;函数是"第一等公民" 即函数可以出现在任何地方,比如你可以把函数作为参数传递给另一个函数,不仅如此你还可以将函数作为返回值。
示例: 判断数组中所有的值是否都小于等于1,函数式编程如下

type fn func(int) int

func check() fn {
    return func(v int) bool {
       return v > 1
    }
}

func main() {
    var arr = [2]int{0,1}
    f := check()
    for i := 0; i < arr; i++ {
        if f(i) {
            fmt.Println("not all numbers less than or equal to 1") 
        }
    }
}