scala成长之路(5)函数入门

众所周知,scala作为一门极客型的函数式编程语言,支持的特性包括: 函数拥有“一等公民”身份; 支持匿名函数(函数字面量) 支持高阶函数 支持闭包 部分应用函数 柯里化 首先需要指出,在scala中有方法和函数对象两种形态,方法即是通过def关键字定义的函数,而函数对象则是通过将方法转换而来,或l ... »

函数式编程+比较器

比较器 @FunctionalInterfacepublic interface Comparator<T> { int compare(T o1, T o2); } @FunctionalInterface 指的是功能性函数接口,里面只有一个方法。 对于Comparable接口来说,它往往是进行比 ... »

Lambda入门

Lambda 来源于微积分数学中的 λ,其涵义是声明为了表达一个函数具体需要什么. Table of contents "Introduction" "使用" Introduction 什么是Lambda? 我们知道,对于一个Java变量,我们可以赋给其一个“值”。 如果你想把“一块代码”赋给一个J ... »

函数式编程之-重新认识泛型(2)

回顾上一节,为了丰富建模类型,编程语言引入了泛型,例如Optional<T>,Result<T>等。我们把泛型也叫做类型提升(lifting),这样带来的问题是以往的函数不能再适应提升类型,试想之前已经存在一个a >b的函数,但是此时你拥有一个E<a>变量, ... »

函数式编程之-重新认识泛型(1)

如果问C 这门语言那些特性是非常好的设计,那么泛型肯定是其中一个。泛型的引入间接带来了LINQ,大家大概都享受过LINQ带来的快感。泛型这个特性来自于函数式语言, "F 的设计者Don syme参与了.NET中的泛型设计" 。C 中的泛型特性使用起来也很简单,以至于没有任何函数式基础就能把LINQ耍 ... »

函数式编程之-模式匹配(Pattern matching)

模式匹配在F 是非常普遍的,用来对某个值进行分支匹配或流程控制。 模式匹配的基本用法 模式匹配通过match...with表达式来完成,一个完整的模式表达式长下面的样子: 当你第一次使用模式匹配,你可以认为他就是命令式语言中的switch...case或者说是if...else if...else。 ... »

函数式编程之-F#类型系统

在深入到函数式编程思想之前,了解函数式独有的类型是非常有必要的。函数式类型跟OO语言中的数据结构截然不同,这也导致使用函数式编程语言来解决问题的思路跟OO的思路有明显的区别。 什么是类型?类型在编程语言中有什么作用呢?一般来说,类型有两个作用: 1. 首先当你对某个数据声明类型后,就拥有了编译时的检 ... »

函数式编程之-拒绝空引用异常(Option类型)

众多语言都会设计Option类型,例如Java 8和Swift都设计了Optional类型。其实这种类型早就出现在了函数式语言中,在OCaml和Scala中叫Option,在Haskell中叫Maybe。Option类型是为了解决了什么样的问题呢? null的局限性 你一定写过类似的C 代码: cs ... »

函数式编程之组合函数

组合 函数式编程的核心在于 ,其中之一就是如何组合函数。我们在Currying一文就提到过组合,我们当时是这样描述的:只有一个输入和一个输出的函数才能完成组合,当然并不是所有的函数都只有一个输入,Currying可以帮助我们把多个输入参数的函数变成只有一个输入的函数。 那么到底什么是组合,怎么组合? ... »

函数式编程之-定义能够支持Partial application的函数

是时候介绍如何在F 中定义函数了,在你没有接触过函数式编程语言之前,你也许会觉得C /Java的语法已经够丰富了,有什么任务做不了呢?当你读过 "函数式编程之Currying" 和 "函数式编程之Partial application" ,你就会发现C 在函数式编程方面已经略显无力了,虽然我用C 模 ... »

函数式编程之Partial application

上一篇关于Currying的介绍,我们提到F 是如何做Currying变换的: 给定一个接受三个参数的函数 ,我们通过 这样的方式创建出了一个新的函数 ,其函数签名为: 上面是F 用来描述函数签名的方式,它表示函数接受两个int类型的参数,返回类型为int类型。 类似地: 表示参数为 类型的函数,返 ... »

我的FP感悟

FP概要: ==== 我主要总结了以下5点: 1. 函数是一等公民: 函数的参数是函数,返回值是函数,类型还是函数... 2. 舍弃语句,拥抱表达式: 表达式就一定有返回值 3. 无副作用: 不修改外部闭包的状态. 4. immutable: 没有变量,一切不可变,循环递归实现 5. 引用透明: 程 ... »

函数式编程之Currying

这个系列涉及到了F 这门语言,也许有的人觉得这样的语言遥不可及,的确我几乎花了2 3年的时间去了解他;也许有人觉得学习这样的冷门语言没有必要,我也赞同,那么我为什么要花时间去学习呢?作为一门在Tiobe排行榜里50名开外的语言,很显然我学习他并不是为了混口饭吃,也许有一天我会为了养家糊口转向Java ... »

函数式编程初窥F#(二)

大量讲解函数式编程语言的书籍最终都会用Fuctor,Monad,Monoids,范畴论等各种词汇吓退命令式语言玩家,所以我试图避开这些问题,揭开这些复杂词汇带来的具有实战意义的成果。另外我会尽量使用C 语言来描述函数式编程思想,因为C 某些语法和特性来自于函数式语言的启发,但C 终究并不是正统的函数 ... »

函数式编程介绍

本文将描述函数式编程的基本理论,从而让你理解什么是函数式编程,同时也会展示“函数式编程”和“面向对象”这两种不同风格的编程范式之间的区别。本文是函数式编程系列的入门篇,后续文章陆续会发出。 什么是函数 函数式编程背后的理论依据是数学,数学函数背后有一系列有意思的特点,而函数式编程语言则试图模拟这些特 ... »

[译]通往 Java 函数式编程的捷径

原文地址: "An easier path to functional programming in Java" 原文作者: "Venkat Subramaniam" 译文出自: "掘金翻译计划" 以声明式的思想在你的 Java 程序中使用函数式编程技术 Java™ 开发人员习惯于面向命令式和面向对 ... »

js算法初窥06(算法模式03-函数式编程)

在解释什么是函数式编程之前,我们先要说下什么是命令式编程,它们都属于编程范式的一种。命令式编程其实就是一块一块的代码,其中包括了我们要执行的逻辑或者判断或者一些运算。也就是按部就班的一步一步完成我们所需要的逻辑。而函数式编程则是类似于一个函数一个函数的调用。我们来看代码,更清晰的理解一下函数式编程与 ... »

lodash源码分析之数组的差集

外部世界那些破旧与贫困的样子,可以使我内心世界得到平衡。 ——卡尔维诺《烟云》 本文为读 lodash 源码的第十七篇,后续文章会更新到这个仓库中,欢迎 star: "pocket lodash" gitbook也会同步仓库的更新,gitbook地址: "pocket lodash" 作用与用法 可 ... »

python函数式编程之装饰器(一)

1.开放封闭原则 简单来说,就是 在面向对象的编程方式中,经常会定义各种函数。 一个函数的使用分为定义阶段和使用阶段,一个函数定义完成以后,可能会在很多位置被调用 这意味着如果函数的定义阶段代码被修改,受到影响的地方就会有很多,此时很容易因为一个小地方的修改而影响整套系统的崩溃, 所以对于现代程序开 ... »

lodash源码分析之baseFindIndex中的运算符优先级

我悟出权力本来就是不讲理的——蟑螂就是海米;也悟出要造反,内心必须强大到足以承受任何后果才行。 ——北岛《城门开》 本文为读 lodash 源码的第十篇,后续文章会更新到这个仓库中,欢迎 star: "pocket lodash" gitbook也会同步仓库的更新,gitbook地址: "pocke ... »