• 函数式编程初探


    函数式编程初探

    1. 函数是"第一等公民"

    所谓"第一等公民"(first class),指的是函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值。

    2. 只用"表达式",不用"语句"

    "表达式"(expression)是一个单纯的运算过程,总是有返回值;"语句"(statement)是执行某种操作,没有返回值。函数式编程要求,只使用表达式,不使用语句。也就是说,每一步都是单纯的运算,而且都有返回值。

    原因是函数式编程的开发动机,一开始就是为了处理运算(computation),不考虑系统的读写(I/O)。"语句"属于对系统的读写操作,所以就被排斥在外。

    当然,实际应用中,不做I/O是不可能的。因此,编程过程中,函数式编程只要求把I/O限制到最小,不要有不必要的读写行为,保持计算过程的单纯性。

    3. 没有"副作用"

    所谓"副作用"(side effect),指的是函数内部与外部互动(最典型的情况,就是修改全局变量的值),产生运算以外的其他结果。

    函数式编程强调没有"副作用",意味着函数要保持独立,所有功能就是返回一个新的值,没有其他行为,尤其是不得修改外部变量的值。

    5. 引用透明

    引用透明(Referential transparency),指的是函数的运行不依赖于外部变量或"状态",只依赖于输入的参数,任何时候只要参数相同,引用函数所得到的返回值总是相同的。

    函数式编程的意义

    1. 代码简洁,开发快速

      函数式编程大量使用函数,减少了代码的重复,因此程序比较短,开发速度较快。例如,Sort方法,你只需写一次。

    2. 接近自然语言,易于理解

      函数式编程的自由度很高,可以写出很接近自然语言的代码。

      

    3. 更方便的代码管理

    函数式编程不依赖、也不会改变外界的状态,只要给定输入参数,返回的结果必定相同。因此,每一个函数都可以被看做独立单元,很有利于进行单元测试(unit testing)和除错(debugging),以及模块化组合。

    4. 易于"并发编程"

    函数式编程不需要考虑"死锁"(deadlock),因为它不修改变量,所以根本不存在"锁"线程的问题。不必担心一个线程的数据,被另一个线程修改,所以可以很放心地把工作分摊到多个线程,部署"并发编程"(concurrency)。

    参考:http://www.ruanyifeng.com/blog/2012/04/functional_programming.html

  • 相关阅读:
    SSRF绕过
    xxe注入指南
    iis漏洞汇总
    apache漏洞汇总
    关于ElementUI Image 组件闪烁问题解决方案
    好用的“密码本”
    网盘
    [Android]从Helloworld开始,继续前进
    解决 ASP.NET Core 部署到 IIS,更新项目时"文件夹正在使用"错误
    SpringWeb注解 —— @RestControllerAdvice
  • 原文地址:https://www.cnblogs.com/tekkaman/p/4868713.html
Copyright © 2020-2023  润新知