参考文档1 参考文档2 函数式编程术语 高阶函数 Higher-Order Functions 以函数为参数的函数 返回一个函数的函数 函数的元 Arity 比如,一个带有两个参数的函数被称为二元函数 惰性求值 Lazy evaluation 是一种按需求值机制,它会延迟对表达式的求值,直到其需要为止 // 设置一个随机数,需要时,才会计算,每次计算都是一个不同的值 const rand = function*() { while (1 < 2) { yield Math.random() }…
最近在看朴灵的<深入浅出nodejs>其中讲到函数式编程.理解记录下 高阶函数 比较常见,即将函数作为参数,或是将函数作为返回值得函数. 如ECMAScript5中提供的一些数组方法 forEach() map() reduce() reduceRight() filter() every() some() 偏函数 说实话看到书,我是第一次看到这个概念,虽然应该是看到过这种用法,好桑感....定义也比较拗口 指创建一个调用另外一个部分---参数或变量已经预知的函数---的函数的用法.直白说就是…
概述 这是我在学习函数式编程的时候,关于递归,尾递归,相互递归和蹦床函数的一些心得,记下来供以后开发时参考,相信对其他人也有用. 参考资料:JavaScript玩转Clojure大法之 - Trampoline 递归 我们知道,es5是没有尾递归优化的,所以在递归的时候,如果层数太多,就会报"Maximum call stack size exceeded"的错误.就连下面这个及其简单的递归函数都会报"Maximum call stack size exceeded"…
这节开始讲的例子都使用简单的TS来写,尽量做到和es6差别不大,正文如下 我们在编程中必然需要用到一些变量存储数据,供今后其他地方调用.而函数式编程有一个要领就是最好不要依赖外部变量(当然允许通过参数传递咯),如何解决这个矛盾的问题呢?将函数柯里化`Curry`就可以了,这种技巧可以让函数记住一些历史数据,也就是缓存,怎么做呢? 说柯里化之前必须先说一下闭包,因为这是实现柯里化的方法. 闭包 const fun = () => { let a = 0; return () => { a +=…
我将写的第一个主题是js的函数式编程,这一系列都是mostly adequate guide这本书的读书总结.原书在gitbook上,有中文版.由于原作者性格活泼,书中夹杂很多俚语,并且行文洒脱.中文译版难免有时需要思量一番,既然读了就写出来,能方便别人最好,也请读者指正.正文如下. 如果一个函数是纯函数,那么其不依赖外部环境,并且不产生副作用. 1.不依赖外部环境,反例如下: const a1 = 10; const aFunc1 = () => { // 依赖外部变量 return a1;…
最近在看Typescript,顺便看了一些函数式编程,然后半个国庆假期就没有了.做个笔记,分几个部分写吧. 最开始接触函数式编程的时候,第一个接触的概念就是高阶函数,和柯里化.咋一看,这不就是长期用来讲作用域的demo吗?我在日常也有用啊,有啥吗? 其实呢,设计模式或则编程范式往往不在于技巧,而在于思想.函数式编程就是一种编程的范式,并不在于技巧多么叼,而在于它的思想.其次才是由设计思想才衍生出来的技巧,技巧往往而言是服务于思想的.所以我觉得最开始学习函数式编程最好先了解一些相关概念和思想会比较…
组合 Composition 组合某种类型(含函数)的两个元素,进而生成一个该类型的新元素:           JavaScript   1 2 3 4 5 6 7 let compose = (f, g) => a => f(g(a))   let toUpperCase = x => x.toUpperCase() let exclaim = x => x + '!' let shout = compose(exclaim, toUpperCase);   shout(&qu…
const {app, BrowserWindow} = require('electron') const path = require('path') let mainWindow function createWindow () { console.log(123) mainWindow = new BrowserWindow({ width: 900, height: 600, webPreferences: { preload: path.join(__dirname, 'preloa…
1.字体Source Code Pro 出身于豪门Adobe,从名字上来看就知道是转为编码而生的.基本上也是拥有前面所提的编程字体的所有要素的.这个字体基本上具有编程字体所需的所有要素:等宽.支持ClearType.中文字体大小合适,l和1,o和0很容易区分 下载地址: http://download.csdn.NET/download/u010551118/8824117 复制到    C:\Windows\Fonts 2.SI中的自动对齐设置 在C程序里, 如果遇到行末没有分号的语句,如IF…
1:非空判断 错误例子: if(user.getUserName().equals("hollis")){ } 这段代码极有可能在实际运行的时候跑出NullPointerException.无论是user本身为空,还是user.getUserName()为空,都会抛出异常. 所以,在调用一个参数时要确保他是非空的. 上面的代码可以改为: if(user!=null&&"hollis".equals(user.getUserName())){ } 2:…