小昱个人博客
欢迎来到小昱的世界

勤学如春起之苗,不见其增,日有所长;辍学如磨刀之石,不见其损,日有所亏
纯函数及函数式编程思想(JS的深入探索)
  • 首页 > >
  • 作者:小昱
  • 2017年9月5日 10:34 星期二
  • 浏览:162
  • 字号:
  • 评论:1
  • 一、什么是纯函数和函数式编程

    纯函数是这样一种函数,即相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用。

    副作用是在计算结果的过程中,系统状态的一种变化,或者与外部世界进行的可观察的交互

    函数式编程是一种变成范式,我们常见的编程范式有命令式编程(Imperative programming),函数式编程,逻辑是编程,常见的面向对象编程和面向过程编程也是一种命令式编程。

    命令式编程是面向计算机硬件的抽象,你要做什么事情,你得把达到目的的步骤详细的描述出来,然后交给机器去运行。有变量(对应着存储单元),赋值语句(获取,存储指令),表达式(内存应用和算术运算)和控制语句(跳转指令)。这也正是命令式编程的理论模型——图灵机的特点。一条写满数据的纸带,一条根据纸带内容运动的机器,机器每动一步都需要纸带上写着如何达到。一句话,命令式程序就是一个冯诺依曼机的指令序列。(什么是函数式编程思维?)

    而函数式编程是面向数学的抽象,将计算描述为一种表达式求值,一句话,函数式程序就是一个表达式。

     

    二、一些实例转化

    ① 使用 && 代替 单if语句

    if语句

    let a = 1
    if (a === 1) {
      console.log('hello world')
    }

    使用&&

    let a = 1
    a === 1 && console.log('hello world')

     

    ② 使用 ?: 替代 if/else

    if-else语句

    let a = 0
    if (a === 1) {
      console.log('hello world')
    } else {
      console.log('error')
    }

    ?:语句

    let a = 0
    a === 1 ? console.log('hello world') : console.log('error')

     

    ③ 多个 if/else 和 switch 也可以用多个 ?: 替换(略)

     

    ④ 短路表达式(详见之前写的一篇博文 《jQuery源码研读心得与感悟》)

     

    三、相关定律

    // 结合律(assosiative)
    add(add(x, y), z) == add(x, add(y, z));
    
    // 交换律(commutative)
    add(x, y) == add(y, x);
    
    // 同一律(identity)
    add(x, 0) == x;
    
    // 分配律(distributive)
    multiply(x, add(y,z)) == add(multiply(x, y), multiply(x, z));

     

    四、总结

    函数式编程的好处

    首先,最直观的角度来说,函数式风格的代码可以写得很精简,大大减少了键盘的损耗。

    其次,函数式的代码是“对映射的描述”,任何能在计算机中体现的东西之间的对应关系都可以描述——比如函数和函数之间的映射,比如外部操作到 GUI 之间的映射(就是现在前端热炒的所谓 FRP)。它的抽象程度可以很高,这就意味着函数式的代码可以更方便的复用。

    另外,还可以方便并行操作,也能方便用数学的方法进行研究。

     

    函数的副作用可能包含,但不限于:

    • ○ 更改文件系统
    • ○ 往数据库插入记录
    • ○ 发送一个 http 请求
    • ○ 可变数据
    • ○ 打印/log
    • ○ 获取用户输入
    • ○ DOM 查询
    • ○ 访问系统状态

     

     


    参考资料

    什么是函数式编程思维?

    函数式编程 - 知乎

    函数式编程入门教程

    JS 函数式编程指南

      您阅读这篇文章共花了:  
     本文无需标签!
    二维码加载中...
    本文作者:小昱      文章标题: 纯函数及函数式编程思想(JS的深入探索)
    本文地址:http://www.xiaoyulive.top/?post=132
    版权声明:若无注明,本文皆为“小昱个人博客”原创,转载请保留文章出处。
    Blago93lat2018-02-22 22:53
    Оказываем услуги от ямочного ремонта небольших дворовых территорий до строительства городского паркинга и дорог муниципального и федерального значения.

    Текущий ремонт дорог В Краснодаре

    Зонирование, повышение комфорта, экологии. Проведение комплексного озеленения, установка вспомогательных архитектурных сооружений и других элементов по индивидуальному проекту.

    Выполнение всего комплекса работ по созданию дорожного полотна любого класса и площади. Демонтаж старого полотна, создание проекта, подготовка грунта, обустройство основания, асфальтирование.

    Асфальтирование парковок/двора
    Асфальтирование для грузового транспорта
    Высокая конкурентоспособность, выполнение работ "день в день", а так же репутация надежного и качественного подрядчика.
    Опыт работы с 2008 года, Оптимальная цена, Поставка всех необходимых материалов без задержек.
    Бетонирование, Благоустройство, Топографическая съемка, Разбивка любой сложности осей зданий, сооружений, линейных объектов

    ____________________________________
    благоустройство могил в краснодаре
    благоустройство и озеленение в краснодаре
    центр озеленения и благоустройства краснодар

    ----------------------
    http://благоустройство-краснодар.рф/
    返回顶部| 首页| 碰碰手气| 捐赠支持| 手机版本|后花园

    Copyright © 2016-2017 小昱个人博客 滇ICP备16006294号