资讯专栏INFORMATION COLUMN

SegmentFault 技术周刊 Vol.16 - 浅入浅出 JavaScript 函数式编程

csRyan / 1412人阅读

摘要:函数式编程,一看这个词,简直就是学院派的典范。所以这期周刊,我们就重点引入的函数式编程,浅入浅出,一窥函数式编程的思想,可能让你对编程语言的理解更加融会贯通一些。但从根本上来说,函数式编程就是关于如使用通用的可复用函数进行组合编程。

函数式编程(Functional Programming),一看这个词,简直就是学院派的典范。

以至于从 Lisp 的创世,到 Scheme、Haskell、Clean、Erlang、Miranda、Scala、LOGO、Clojure、Mathematica 甚至 R,它们一出生就站在了鄙视链的顶端,尤其是非纯函数式的 Lisp 老祖和纯函数式的集大成者 Haskell。就如段子里说的,一群程序员自我介绍,当听到“我是写 Lisp 的…”这一句,所有人的注意力都会被吸引。简直是众多程序员想要装逼的顶峰,可见一斑。

学院派的语言方法似乎只有大学研究里才会使用,但随着技术和时代的发展,JavaScript,这种典型的多范式编程语言,也由面向对象为绝对主导逐渐纳入各种函数式编程的特性,这两年的 React、TypeScript、Immutable、underscore、Elm 等等,纷纷加入了函数式编程的大潮。所以这期周刊,我们就重点引入 JavaScript 的函数式编程,浅入浅出,一窥函数式编程的思想,可能让你对编程语言的理解更加融会贯通一些。

浅入

1. 什么是函数式编程?

JavaScript 函数式编程(一) 丨 JavaScript 函数式编程(二) // 王伟嘉

这两篇将 JS 函数式编程的典型特性“1. 纯函数概念,函数柯里化和函数的组合;2. 容器和 Functor,Maybe,Monad,Either 以及 IO”由浅及深,一个个地做了介绍,非常不错的入门文章。

「所谓的纯函数就是,对于相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用,也不依赖外部环境的状态。」

2. 函数式思想的理解

《JavaScript 函数式编程》读书笔记 // homker

这是作者对《JavaScript 函数式编程》的理解,JS 为什么要用函数式编程(数据和行为的关系、专注于过程本身),如何使用函数式编程(一等公民、纯函数、可组合、高阶函数、基于流的编程),可以让你更深入地理解 JS 大量引入函数式方法的思想。

译丨JavaScript 与函数式编程 // 文蔺

现在,来进行更细节的分析和理解
展现另一面的函数式编程思维:强调将程序状态变化(即副作用 side effect)的次数减到最小,鼓励使用不可变数据(immutable data)和纯函数(pure functions)(“纯”意味着没有副作用的),更倾向于使用声明式的风格(让代码更干净,可读性更强,推理起来更简单)。

3. 特性各个了解

在下函数式编程有何贵干 // 力谱宿云

示例代码清晰,简单明了,让你快速了解 FP 的诸多特性,接下来,再一一分解。

译丨JavaScript 中的不可变性(Immutability) // leftstick

译丨浅入浅出 Monads // leftstick

JavaScript 也玩私人订制——玩转函数柯里化 // 条件状语从句

函数式编程中局部应用(Partial Application)和局部套用(Currying)的区别 // n͛i͛g͛h͛t͛i͛r͛e͛

函数式编程之柯里化和组合详解 // 橘子小睿

前面提到的纯函数、函数柯里化、函数的组合、偏函数、容器、Functor、Monad、IO 等等,这里都有分别的详细讲解。

浅出

4. 各 JS 方言都有了哪些实践?

译丨函数式 TypeScript // 文蔺

「谈到函数式编程时,可能常被提到的是机制、方法,而不是核心原则。但从根本上来说,函数式编程就是关于如使用通用的可复用函数进行组合编程。」——作者在重构 TypeScript 代码时使用函数式的一些思考

函数式编程——入门笔记与 React 实践 // kpaxqin

Immutable 详解及 React 中实践 // Cam

Redux 入坑进阶 - 源码解析 // ecmadao

React.js 的代码中包含了大量函数式思想,比如 Immutable,比如 Redux 的柯里化函数以及代码组合,不妨来看看。

Elm 入门实践系列 by @kpaxqin :(一)基础篇 丨 (二)类型篇 丨 (三)进阶篇

笨办法学函数式编程:Elm 初体验 // Integ

如果你打算开始函数式编程,晦涩的 Monad/Functor 们可能也需要动手写点东西来熟悉,而随着整个 React 社区往函数式方向发展,Elm 作为前端函数式编程的先驱和风向标,毫无疑问是值得去学习和借鉴的。这两个系列,一步步地带你了解如何使用 Elm 构建应用。

5. 函数式的思想在其他语言中的体现

函数式编程在实际生产中发挥着巨大的作用,越来越多的语言加入闭包,匿名函数等非常典型的函数式编程的特性,从某种程度上来讲,函数式编程正在逐步“同化”命令式编程。

Swift - Swift 中的柯里化 Currying:Swift 柯里化特性的简单了解

Scala - Scala 类型参数:多范式语言的典范

Java - Java8 Lambda 本质论 丨 正交设计 丨 Write Lean Programs:Java 的设计模式、λ 演算、设计思想

Scheme - 如何实现一个没有名字的递归函数:一个递归引发的思考 - “当函数在还没有定义完整时,为什么能够直接调用的呢?”

6. 补充阅读

JavaScript 函数式真正的浅析

JavaScript 数组分组的实现

Immutable.js 初识

js 函数式编程之函数柯里化

合理的使用纯函数式编程

浅谈函数式编程和函数响应式编程

正交设计,OO 与 SOLID

(本期完)

# SegmentFault 技术周刊 #

「技术周刊」是社区特别推出的技术内容系列,一周一主题。周刊筛选的每篇内容,是作者的独到见解,踩坑总结和经验分享。

每周二更新,欢迎「关注」或者「订阅」。大家也可以在评论处留言自己感兴趣的主题,推荐主题相关的优秀文章。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/91351.html

相关文章

  • 端到端测试神器 cypress 浅入浅出

    摘要:我之前写过关于的文章,,最近在工作中用到比较多了,顿时觉得确实是比较优秀的一个。 我之前写过关于cypress的文章,https://segmentfault.com/a/11...,最近在工作中用到cypress比较多了,顿时觉得cypress确实是比较优秀的一个。 1. 软件安装. 2. 安装cypress 安装cypress客户端:http://download.cypress...

    CarlBenjamin 评论0 收藏0
  • 浅入浅出FlowDroid(一): 简介&基本使用

    摘要:后文将围绕做一些介绍。尽管如此,的使用对新手而言仍然充满了困难。本系列文章基本为个人见解,难免有错误与误解,如有客观错误欢迎提出。 前言 说到Android的污点分析框架,网上的搜索结果大多指向静态的FlowDroid与动态的TaintDroid。尽管由于加固、混淆等技术使得针对Android的静态分析越来越困难,但静态分析的无先验分析能力无法被动态分析取代,使得静态分析仍有发挥空间。...

    wqj97 评论0 收藏0
  • [译]浅入浅出Monads

    摘要:接受另一个函数作为参数,然后用接受的这个新函数处理,将结果再次传给,最后将实例化的新对象返回。空值检查就是个不错的例子这个实现里,只在为合法值非空时,传入。但不论怎么变化,她们也都和一样遵守上面提到的规则。 大多数关于monad的教程都和老太太的裹脚布一样,又臭、又长,说不清、道不明。当然我也不伟大,没法保证我写的一定更明了,更生动,甚至更屌?不过我至少可以确定,我这篇更简洁。浪费不了...

    philadelphia 评论0 收藏0
  • Vue-cli浅入浅出

    摘要:别名相当于前面先引入了路由插件,然后显式声明要用路由。注意到,等都是页面也可以是组件,接着注册路由器,然后开始配置路由。 搭建环境 工欲善其事必先利其器,我们的学习计划从学会搭建Vue所需要的环境开始,node和npm的环境不用说是必须的,现在前端流程化很热门,基本上新的技术都会在这套流程的基础上做开发,我们只需要站在巨人的XX上装*就可以了。我假设你的机子上已经有了最新的node和n...

    endiat 评论0 收藏0
  • 浅入浅出Swift

    摘要:木有分号变量常量循环判断循环和函数和闭包函数声明和调用闭包和对象从生成对象来自。 HelloWorld println(Hello, world) //木有分号! 变量 var foo = 7 foo = 8 常量 let pi = 3.14 map var occupations = [ Malcolm: Captain, Kaylee: M...

    Warren 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<