"Becoming Functional" 阅读笔记+思维导图

<Becoming Functional>是O‘Reilly公司今年(2014)7月发布的一本薄薄的小册子,151页,介绍了函数式编程的基本概念.全书使用代码范例都是基于JVM的编程语言,比如Java,Groovy,Scala.为了能够讲解所有的知识点,作者不得不在多个语言之间做切换,其实使用Erlang,Elixir甚至是C#做范例都不会这么累(因为C#有Linq,Lazy.....).

这本书侧重点是讲解基本概念,以及思维方式的转变.所以无论是搞哪一种函数式编程语言,都可以读一读,一开始接触Erlang的小伙伴问的最多的就是:Tail Recursion,Side Effects,Higher-Order Functions,Anonymous Functions,closures,这里恰好有一个不太复杂的讲解.

这本书作为一个入门的小册子,内容足够简单,可以快速翻完,下面是我阅读该书的时候做下的思维导图及其文字版.

附文字版

Becoming Functional

First-class functions

can either accept another function as an argument or return a function.

 Pure functions

are functions that have no side effects. Side effects are actions a function may perform that are not solely contained within the function itself.

Side Effects

 Recursion

allows us to write smaller, more concise algorithms and to operate by looking only at the inputs to our functions.

Tail Recursion

 Immutable variables

Immutable variables, once set, cannot be changed.

Nonstrict (Lazy) evaluation

allow us to have variables that have not been computed yet.

Strict evaluations-assigning a variable as soon as it is defined-are what we are used to

Nonstrict means that we can have a variable that does not get assigned (computed) until the first time it is referenced.

 Statements

are evaluable pieces of code that have a return value.

Each line of code should be considered a statement, meaning there are very few side effects within the application itself.

Pattern matching

allows us to better type-check and extract elements from an object, making for simpler and more concise statements with less need for variable definitions.

extracting value

First-class functions

Anonymous Functions

closures

Closures are much like lambdas, except they reference variables outside the scope of the function.

In the simplest explanation, the body references a variable that doesn‘t  exist in either the body or the parameter list.

lambda functions

Lambda functions are unnamed functions that contain a parameter list, a body, and a return.

Higher-Order Functions

A function becomes "higher order" if it accepts or returns a function.

Pure functions

Output Depends on Input

When we don‘t return the result of our execution but rather mutate another external (i.e., not contained within the function scope) object, we call this a side effect.

Pure functions are functions that have no side effects and always perform the same computation,resulting in the same output, given a set of inputs.

Really, you want to make a function pure whenever possible; it makes the function much more testable and improves understandability from a troubleshooting perspective.

"Becoming Functional" 阅读笔记+思维导图

时间: 2024-10-10 15:24:08

"Becoming Functional" 阅读笔记+思维导图的相关文章

Node 即学即用 笔记 思维导图

Node即学即用 REPL(Read-Evaluate-Print-Loop) console.log .clear .help .exit require('http') createServer 聊天服务器 tcp服务器 require('net') on connection on data on end on error telnet express app.get app.post -app.js -public -views ----partials EJS模板语言 测试 requi

深入浅出Node js 读书笔记 思维导图

最近在研究node,发现是很不错的技术~ 考虑到平时看书转换率不高.遂尝试使用思维导图的方式来对一本书进行分析.感觉如果看完之后能够做个思维导图,对整本书的理解都会提高呢~ 下面第一部分介绍思维导图的做法,第二部分为我看深入浅出Nodejs的读书笔记. PART1 如何在阅读时做思维导图: 简单归纳起来,对一本书做思维导图的技巧主要分为两类:准备及应用.在以下各篇中,共有8个阶段.为方便查找起见,各阶段总结如下,都附有推荐的限制时间. 准备: 1.浏览——制作一个中央图象(10分钟) 2.设定时

[笔记][思维导图]读深入理解JAVA内存模型整理的思维导图

本人记忆差,整理这个思维导图,相当于较认真的看了一遍,整个思维导图,基本上就是对原文的拷贝. 有了层级关系.和本人自己的一些理解.由于思维导图弄出来的图片大于100M了.所以就放出源文件, 更方便的阅读查阅.在csdn太穷了.下载2积分.有需要的希望意思意思.我也要去下载资料呢.(下载地址在最后) 有几点我觉得是看这个本书或则思维导图.你要明白的是: 1. 什么是内存可见性 2. 在java程序中,在底层执行的代码指令并不是完全按照顺序执行的-有重排序的存在 3. volatile 是一个和硬件

《HTML重构》读书笔记&amp;思维导图

最近读了<HTML重构>这本书,以下做出自己的总结归纳,大家可以一起学习交流. 什么是重构?重构是在不改变程序行为的基础上进行小的改动是代码基本逐渐完善的过程,通常需要一些自动化工具的帮助.好的网站是需要我们对代码进行日臻完美的改善.而搜索引擎优化(seo)是网站重构的主要驱动之一,跟图片相比搜索引擎更看重文本:跟后端文本相比更看重前端文本,他们更看重标题或元标签.作者希望通过更多的文本内容取代如图片.flash等可以做好SEO.我个人觉得看完了这本书对做 SEO是非常有帮助的 百度百科对重构

JavaScript 中的事件流和事件处理程序(读书笔记思维导图)

JavaScript 程序采用了异步事件驱动编程模型.在这种程序设计风格下,当文档.浏览器.元素或与之相关的对象发生某些有趣的事情时,Web 浏览器就会产生事件(event). JavaScript 与 HTML 之间的交互是通过事件实现的.事件就是文档或浏览器窗口中发生的一些特定的交互瞬间,或者说事件就是 Web 浏览器通知应用程序发生了什么事情.可以使用侦听器(或处理程序)来预订事件,以便事件发生时执行相应的代码. 以下是<JavaScript高级程序设计>中事件流和事件处理程序的总结:

程序猿的思维修炼-读书笔记-思维导图

JavaScript 中的事件类型5(读书笔记思维导图)

Web 浏览器中可能发生的事件有很多类型.如前所述,不同的事件类型具有不同的信息,而“ DOM3级事件”规定了以下几类事件. UI(User Interface,用户界面)事件:当用户与页面上的元素交互时触发:? 焦点事件,当元素获得或失去焦点时触发:鼠标事件:当用户通过鼠标在页面上执行操作时触发: 滚轮事件:当使用鼠标滚轮(或类似设备)时触发: 文本事件:当在文档中输入文本时触发: 键盘事件:当用户通过键盘在页面上执行操作时触发: 合成事件:当为 IME(Input Method Editor

JavaScript 中的事件类型1(读书笔记思维导图)

Web 浏览器中可能发生的事件有很多类型.如前所述,不同的事件类型具有不同的信息,而“ DOM3级事件”规定了以下几类事件. UI(User Interface,用户界面)事件:当用户与页面上的元素交互时触发:? 焦点事件,当元素获得或失去焦点时触发:鼠标事件:当用户通过鼠标在页面上执行操作时触发: 滚轮事件:当使用鼠标滚轮(或类似设备)时触发: 文本事件:当在文档中输入文本时触发: 键盘事件:当用户通过键盘在页面上执行操作时触发: 合成事件:当为 IME(Input Method Editor

JavaScript 中的内存和性能、模拟事件(读书笔记思维导图)

由于事件处理程序可以为现代 Web 应用程序提供交互能力,因此许多开发人员会不分青红皂白地向页面中添加大量的处理程序.在 JavaScript 中,添加到页面上的事件处理程序数量将直接关系到页面的整体运行性能.导致这一问题的原因是多方面的.首先,每个函数都是对象,都会占用内存:内存中的对象越多,性能就越差.其次,必须事先指定所有事件处理程序而导致的 DOM 访问次数,会延迟整个页面的交互就绪时间.从如何利用好事件处理程序的角度出发,还是有一些方法能够提升性能的. 事件经常由用户操作或通过其他浏览