美文网首页好多编程入门
函数式编程之我知我见

函数式编程之我知我见

作者: 一口咖啡一口茶 | 来源:发表于2015-03-31 18:24 被阅读140次

函数式编程是一种编程范式,就是跟我们上大学的时候,大学老师总是挂在嘴边的“面向对象”,“面向过程”等等是一个东东。
既然是函数式编程编程,那么“函数”是少不了的了。能够实现“函数式编程”的语言,函数必须是该语言的“一等公民”,即函数是可以直接声明调用的,而不是需要在类中声明成方法(没错,我说的是Java)。
例如,python中:

def f(x):
     return x+3
g=f
print g(4)
#output  7

例子中,f直接就代表了函数f(x),可以赋值给其他的变量。这就是“一等公民”。
当然,仅仅是满足这一点是不行,基本需要如下几点:

1,函数是“一等公民”
2,函数可以作为函数的返回值
3,函数可以做函数的参数


高阶函数

前面已经说过,函数式编程中函数是可以作为函数的返回值和参数的,那么满足这两个条件之一的函数,就是高阶函数。鉴于数学和计算机科学的基友性质,函数和高阶函数的概念都是从数学中引申而来的。举一个在令我们头疼的微积分课的例子,有个老是出现的玩意就是高阶函数,那玩意叫导数
python高阶函数示例:

def f(x):
    return x + 3
 
def g(function, x):
    return function(x) * function(x)
 
print g(f, 7)

--

闭包

曾经面试官让我解释“闭包”,我只说一句“里面的可以用外面的,外面的不能用里面的。”用更通俗易懂的话来说,就是“你的就是我的,我的还是我的。
这里牵扯出一个作用域的问题,就是我们在写很多语言的时候,那个“{}”(大python中用缩进)。

def f(x):
     def g(x):
          return x+3
     return x

print g(4)

会输出什么?会是7吗?
No,会报错。找不到g函数,只有在函数f的作用域(函数体内)才能调用它。
但是,函数式编程的时候,是可以将函数作为返回值的,所以可以通过这样的方式来使用:

def f():
     def g(x):
          return x+3
     return g

p=f()
print p(4)
#output 7

ok,完了。就这样完了?没错,太过深奥的概念不需要说太多,说了有时候也无法理解。了解了函数式编程基本概念和高阶函数,就可以非常飘逸的运用起来,比如“装饰设计”。


装饰设计

在日常工作中,我们写好了一个函数,结果产品经理屁颠屁颠过来说,改需求了(万恶产品狗)!这个函数运行时得加上日志,那么没经验的时候的做法,就是苦逼到这个函数里面改代码,结果牵一发而动全身,整个模块都要改!!!
设计模式中装饰模式,可以很灵活的解决这个问题。如果利用高阶函数的话,则可以更好的实现装饰模式。

def f(x):
      return x+3

def logo(f,x):
      print "函数f开始计算"
      f(x)
      print "函数f计算完毕"

print logo(f,3)
#output
函数f开始计算
6
函数f计算完毕

相关文章

  • 函数式编程之我知我见

    函数式编程是一种编程范式,就是跟我们上大学的时候,大学老师总是挂在嘴边的“面向对象”,“面向过程”等等是一个东东。...

  • Python 之路03 - Python基础3

    本节内容 函数与函数式编程 函数式编程之参数详解 局部变量与全局变量作用域嵌套函数 递归 函数式编程介绍 高阶函数...

  • Swift函数式编程之Map&Reduce&Fi

    Swift函数式编程之Map&Reduce&Filter 什么是函数式编程呢?函数式编程其实是一种编程思想, 代码...

  • 函数式编程

    什么是函数式编程? 函数式:functional 一种编程范式 函数式编程特点 把计算视为函数而非指令 纯函数式编...

  • RXSwift(1)

    函数响应式编程 函数式编程 函数式编程FP(Functional Programming),是一种抽象程度很高的编...

  • 函数式编程

    1 文章目标 为什么要学习函数式编程以及什么是函数式编程 函数式编程的特性(纯函数、柯里化、函数组合等) 函数式编...

  • ReactiveCocoa初识篇

    关于ReactiveCocoa ReactiveCocoa是iOS环境下的一个函数式响应式编程框架。函数式响应式编...

  • Python学习之路(函数式编程之高阶函数)

    函数式编程之高阶函数 高阶函数英文叫Higher-order function。什么是高阶函数?我们以实际代码为例...

  • Javascript进阶——函数式编程思想

    什么是函数式编程? 在学习函数式编程之前,我们先来了解一些与之相关的概念,以便于我们更好的理解函数式编程思想: 命...

  • 前端函数式编程浅析

    前端函数式编程浅析 前言 在浅析函数式编程之前,我们需要明确两个前导概念,即:编程范式(Programming P...

网友评论

    本文标题:函数式编程之我知我见

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