美文网首页
函数式编程

函数式编程

作者: __apple | 来源:发表于2018-06-04 21:05 被阅读0次

我们今天说的Go中的函数式编程主要是体现在闭包上面的,比如

func adder() func(int) int {
    sum := 0
    return func(v int) int {
        sum += v
        return sum
    }
}
func main() {
    a := adder()
    for i := 0; i < 10; i++ {
        fmt.Printf("0 + 1 + ... + %d = %d\n", i, a(i))
    }
}

我们首先对比两个概念

函数式编程 vs 函数指针
  • 函数是一等公民:参数,变量,返回值都可以是函数(C++只有函数指针 Java的函数不能作为参数)
  • 高阶函数
  • 函数->闭包

那么什么是正统的函数式编程呢?

  • 不可变性:不能有状态,只有常量和函数
  • 函数只能有一个参数

Go不会在正统上大作文章的,😄


bibao.png

上面这张图呀,很清楚的表达了闭包的概念,自由变量就是外面函数的变量相当于sum。我们来看一下正统的函数式编程是怎么做的呢,我们这边马马虎虎的实现一把!!!!

type iAdder func(int) (int, iAdder)

func adder2(base int) iAdder {
    return func(v int) (int, iAdder) {
        return base + v, adder2(base + v)
    }
}
func main() {
    //  // a := adder() is trivial and also works.
    a := adder2(0)
    for i := 0; i < 10; i++ {
        var s int
        s, a = a(i)
        fmt.Printf("0 + 1 + ... + %d = %d\n",
            i, s)
    }
}
// 这样的写法可能不是很好懂,但是这种写法没有自由变量在里面,会更安全一些。
最后我们来看一下其他语言是怎么实现闭包的。
Python实现的方式
def adder(value):
    sum = 10
    def sumAll(value):
        nonlocal sum
        sum = sum+value
        return sum
    return sumAll

if __name__ =='__main__':
    result = adder(sum)
    # 打印环境变量
    print(result.__closure__[0].cell_contents) 
    for x in range(10):
        print(result(x))

Python是原生支持闭包的,你可以使用closure查看闭包内容

C++实现闭包的方式
auto adder(){
    auto sum = 0;
    return [=] (int value) mutable {
        sum += value;
        return sum;
    };
}
// c++ 11及以后:支持闭包,我没有学过c++这里给大家贴出来,只是让大家感受一把!!!

ok, 怎么样闭包掌握的怎么样了呢😄!!!!继续加油吧!!!!下面还有函数式编程的干货,敬请期待把!!!!!

相关文章

  • RxSwift初探(1)

    一、前提:函数响应式编程思想 简单来说 函数响应式编程 = 函数式编程 + 响应式编程 (1)函数式 函数式编程是...

  • iOS 函数编程 & 链式编程

    函数式(链式)编程 函数式编程概念 函数式编程是种编程范式 函数式编程 Functional Programmin...

  • 函数式编程(一)—— 前置知识

    为什么要学函数式编程? 什么是函数式编程?函数式编程和面向对象编程的不同对于函数式编程思维方式的理解: 函数式编程...

  • 二十二、函数式编程、面向协议式编程

    函数式编程(Functional Prigramming) 函数式编程 函数式编程(Functional Prig...

  • Python中的函数式编程

    函数式编程 说到函数式编程,我们的重点在于为什么要采用函数式编程,而不是什么是函数式编程。 函数式编程的优点:一、...

  • RxSwift-初探

    函数响应式编程 一:函数式 函数式编程简称FP(Functional Programming),函数式编程就是一种...

  • 《Kotlin入门实战》CH5 | 函数与函数式编程

    函数与函数式编程 函数式编程与命令式编程最大的不同是:函数式编程的焦点在于数据的映射,命令式编程(imperati...

  • 函数响应式编程思想 & RxSwift 核心逻辑(一)

    函数响应式编程思想 函数响应式编程思想即是将函数式编程和响应式编程相结合。 函数式编程 顾名思义,就是像函数一样的...

  • RxJava系列|RxJava简介(一)

    函数响应式编程 函数式编程是一种编程范式。 常见的编程范式有:命令式编程、函数式编程和逻辑式编程。 面向对象就是一...

  • 了解C# 函数式编程

    什么是函数式编程 函数式编程是一种编程范式,维基百科对函数式编程定义如下: 函数式编程(英语:functional...

网友评论

      本文标题:函数式编程

      本文链接:https://www.haomeiwen.com/subject/brjodftx.html