函数式思维的引入

这是译文,原文:http://fsharpforfunandprofit.com/posts/thinking-functionally-intro/

改变你思考的方式

函数式思维不仅仅是形式上的区别,它是完全不同于完全面向对象的编程思维(和传统命令式语言,比如C,也不同),这一点很重要。

F#允许非函数式思维,它尝试保留你已经熟悉了的习惯。你可能不改变你的思维方式——使用F#以非函数的思维,而没有意识到你失去了很多。为了得到更多F#的东西,为了流畅地和舒服地采用函数式编程,以函数式思维而不是命令式这一点至关重要。这个文章系列的目的是:帮助你深入地理解函数式编程和帮助你改变你思考的方式。

这将是一个十分抽象的系列,尽管我会是哟高很多短代码例子来展示观点。我们会涉及以下的几个方面:

  • 数学函数

    这篇文章引入了在函数式语言背后的数学想法和这个方法带来的好处。

  • 函数和值

    接下来的文章引入了函数和值,展示了值和变量是怎样的不同和为什么函数和普通值之间有很多的不同。

  • 类型

    我们再来讨论函数使用的基本类型:原始类型比如string和int;unit类型,函数类型和通用类型。

  • 带有多个参数的函数

    接下来,我解释“currying”和“partial application”。如果你有命令式背景,这也是你头疼的地方。

  • 定义函数

    一些文章以多个方式来定义和组合函数。

  • 函数签名

    一个重要的文章讨论函数签名:它们是什么意思和怎么使用它们来辅助理解

  • 组织函数

    一旦你知道了如何创建函数,该如何组织它们来用在你代码的其他地方呢?

时间: 2024-10-11 00:56:58

函数式思维的引入的相关文章

第一部分 学习函数式思维

第一部分学习函数式思维 捡起这本书的原因可能很多.可能是在学习 LINQ 和 C# 3.0,或者受此影响的别的技术时,听到过函数式编程,你想知道它是否有还其他意思:也可能听说过函数式编程可以使写并行或异步程序更容易:也许听说过函数风格的其他有趣应用,比如,如何写出没有可变状态的程序:还可能已听说过一种叫 F# 的新语言,将会成为 Visual Studio 2010 的一部分,你可能想知道它到底提供了什么. 不管哪种情况,学习函数式编程的第一件事,就是要建立不同于以往的基本概念.但这并不是说就得

用纯函数式思维在Java8下写的一段奇葩程序

首先说一下什么是纯函数式.在我的理解,"纯函数式"用一句话就可以描述:Anything is value.--我的理解不一定准确,但我就是这么理解的. 就是所有的东西都是值--没有变量:包括函数在内都是值--是值,就可以传递(包括函数). 为什么说这段程序是奇葩呢? 其一.传统的Java是面向对象的,自从Java8中加入了lambda,Java就变成了"面向对象"和"函数式"两种方式的混合语言.这段程序全部使用lambda的语法来写,与平常写的J

提高代码质量系列之三:我是怎么设计函数的?

前言 这篇其实是上两篇的两个主题思想的承接和发散: 我也想少写注释,想用2-4个很清晰的单词去描述函数,但是这个函数好复杂啊,我恨不得写近百字去描述它,要我用几个单词去描述?臣妾实在是做不到啊~  <如何做到少写注释> 我也不想写这么多if  else,然后看着那一堆一堆{}{{}{}{{}}}}}}}{{{}{{}头晕眼花,但逻辑就是有这么复杂,我能怎么办呢?  <如何简化代码逻辑>  这篇博文,应该就是我对于以上问题结合设计原理的一些思考,不算多高深,但都是自己的总结,我也不会

简说JAVA8引入函数式的问题

JAVA8中加入lambda演算是一个令人兴奋的新特性——虽然这个新特性来得太迟了,目前的主流开发语言中,JAVA似乎是最后一个支持函数式思维的语言. 虽然晚了点,但总比没有好——况且我认为它的实现还是可以的,至少比C++的实现好一点(C++编译器不能自动很好的处理闭包环境,却要求程序员在代码中指定要引入到lambda表达式中的变量(捕获列表)——C++的类型系统过于丰富,如果没有捕获列表,则编译器无法得知应该通过“值”捕获还是通过“引用”捕获,而JAVA的类型系统简单很多,没有这个问题). 以

函数式编程思维——互动出版网

这篇是计算机类的优质预售推荐>>>><函数式编程思维> 思维方式的跨越让你的编程能力如虎添翼 编辑推荐 Java等现代编程语言中出现了越来越多的函数式特性,跟随这本书,去了解语法表象之下真正需要掌握的新思维.中高级开发者可以从知名软件架构师Neal Ford的演示中,体会到函数式编程思想是怎样通过改换视角,让我们站在了另一个抽象层次上,把编程问题看得更加清晰. 本书每一章都会给出各种函数式编程思维的示例,并用Java 8或其他具备函数式能力的JVM语言代码实现出来.改变

?数学函数——在函数式编程背后的动力

函数式思维的动力来自数学.数学函数有很多特色--函数式语言试图模拟真实世界. 所以一开始,我们以一个加1函数开始: Add1(x) = x+1 这意思是什么?好吧,看起来十分直白.它意味着有一个操作以一个数字开始,然后给它加1. 我们引入一些术语: 可以被函数作为输入的值的集合叫做domain.这样,它可能是实数集合,为了简单,我们仅限于整数. 可以被函数作为输出的值的集合叫做range(更科学的应该是叫作codomain的image).还是仅限于整数. 函数被称作映射domain到range.

乐字节-Java8核心特性实战之函数式接口

什么时候可以使用Lambda?通常Lambda表达式是用在函数式接口上使用的.从Java8开始引入了函数式接口,其说明比较简单:函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口. java8引入@FunctionalInterface 注解声明该接口是一个函数式接口. 语法 抽象方法有且仅有一个 接口使用@FunctionalInterface 注解进行标注 接口中可以存在默认方法和静态方法实现 如下形式: /** * 定义函数式

Java8 那些事儿(一):Stream 函数式编程

前言 Java8(又称为 Jdk1.8)是 Java 语言开发的一个主要版本.Oracle 公司于 2014 年 3 月 18 日发布 Java8,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的 Stream API 等.Java8 API 添加了一个新的抽象称为流 Stream,可以让你以一种声明的方式处理数据.Stream API 可以极大提高 Java 进程员的生产力,让进程员写出高效率.干净.简洁的代码. Java8 新特性 Lambda 表达式 ? Lamb

Java8函数式编程-包教包会系列(一)

Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,距离现在已经有很长一段时间了,Java10也在2018年 3月 21日正式发布,并且Oracle宣布Java 语言将每隔 6 个月提供一次更新.Java语言不断更新迭代,然而很多Java程序员缺没有跟上技术更新的步伐!所以写下这篇系列文章,希望可以帮助大家入门Java8!话不多说,开始发车! 前言 宝刀未老的Java 1995年Sun公司推出的Java语言,从第一个版本诞生到现在已经有二十多年的了.时间若白驹过隙,转瞬即逝