Javascript编程图书功能
在不久的将来,这本书Javascript函数式编程是预先设定的,主要目的是让个人不了解目前什么是函数式编程,在学习的过程中,人们一直在听过程编程和面向对象编程,和作用很小。为了不落后于其他学生的脚步,你想分享和记录的知识,你读的记笔记的方法。
js与函数编程
在一个简单的句子里,这本书回答了什么是函数式编程:
函数编程通过使用函数将值转换为抽象单元,然后用于构建软件系统。
我认为有些学生必须看到这个句子,或者不知道如何移动到函数式编程,为什么要使用函数式编程。
作为抽象单元的函数
抽象方法是隐藏细节的函数。在书中举一个例子,这个函数检测输出的年龄值(主要是关于错误和警告的报告):
功能parseage(年龄){
如果(!_ isstring(年龄))。
抛出新错误(期望一个字符串);
VaR;
console.log(试图解析一个时代);
= parseInt(年龄,10);
如果(_。isnan()){
console.log({无法解析年龄:}。加入());
a = 0;
}
返回一个;
}
上面的函数决定我们是否进入一个年龄,必须是字符串形式,然后运行这个函数:
ParseAge(42);42 / / = >
ParseAge(42)错误:期待一个字符串 / / = >;
ParseAge(心); / / = > 0
有以上的parseage功能正常工作没有问题。如果我们要修改输出误差=信息和预警的呈现,那么我们需要修改相应的代码行,以及在其他地方输出模式。书中的方法是通过抽象成不同功能的实现:
函数失败(事物){
抛出新的错误(事物);
}
函数警告(事物){
console.log({警告:
}
函数注释(事物){
console.log({注:
}
然后你使用以上功能调整parseage功能。
Funciton parseAge(年龄){
如果(!_ isstring(年龄))。
失败(期望一个字符串);
VaR;
注意(试图解析一个年龄);
= parseInt(年龄,10);
如果(_。isnan()){
警告({)无法解析年龄:
a = 0;
}
返回一个;
}
报告错误代码放入不同的功能,和重新配置的parseage和以前没有太大的变化。但不同的是,报告错误的观念、信息和预警进行了抽象,错误的结果,信息和警告也完全改变。
这是因为行为包含在一个函数中,因此函数可以被新的函数替换,这些函数可以提供类似的行为,或者完全由完全不同的行为所代替。
封装和隐藏
这个称号是很容易理解的,例如,我们经常使用寿命避免全球污染,这是封装和隐藏的一个很好的例子。通过生活隐藏的变量和方法写作,目的是不污染全球环境。这也是使用闭包来隐藏数据的方式。
因为闭包也是一个函数,学习函数编程与现在有很大的关系,但是不要忘了以前学习的面向对象封装。毕竟,这两个人不能说谁更好,但掌握这一切并不是一件坏事。
作为行为单位的功能
隐藏数据和行为(通常不便于快速修改)只是将函数抽象为函数的一种方式,另一种方法是提供一种简单的存储模式和通过基本行为的脱机分散单元。
在本书中,一个小栗子用于通过使用JS语法来索引数组中的值。
var arr = {'a',B,C};
ARR { 1 } b / / = >
虽然索引数组中的值非常简单,但是如果不把它放在函数中,就无法得到这个行为,并在需要时使用它来使用一个简单的函数n,该函数用于索引数组中的值。
函数n(a,index){
返回一个{ };
}
然后运行:
n(G,1); / / = > B
它的成功运行,但如果它被传递到一个空的对象,这将是错误的报道。因此,如果你想专注于n实现抽象的功能,我们可以设计以下声明:元n返回索引来访问存储在允许的数据类型。这句话的关键是对指标数据类型的概念,一个函数可以确定类型:
功能isindexed(数据){
返回_。ISArray(数据)_ isstring | |(数据);
}
然后继续提高n功能,isindexed函数是一个抽象的概念,提供了一个决定,以确定是否一个特定的数据是一个字符串或数组。
函数n(a,index){
如果(!_ isnumber(指数))。
失败(期望一个数作为索引);
如果(!IsIndexed(一))
失败(不支持非索引类型);
如果(((指数a.length - 1))
失败(索引值越界);
返回一个{ };
}
以与索引提取对象相同的方式构建第二个抽象,同样的方法构造n个函数抽象:
函数第二(a){
返回n(a,1);
}
函数允许在不同但相关的情况下正确使用n个函数。
二(ARR); / / = > B
通过上面的栗子,你知道,我们可以把每一步抽象成一个函数,并抽象出每一个参数,虽然这种书写的定义定义了许多函数,但是,更容易理解每个项目的功能和过程。
数据抽象
Javascript的对象原型模型是丰富而基本的数据方案。
因为JS没有阶级的原因,有很多模拟的方法,和类的关键词出现在6。虽然有类的许多优势,许多在货币类js应用的数据是简单得多的时代。
基于类的对象系统的合理参数之一是实现用户界面的历史使用。
js中的对象和数组已经能够满足我们的数据操作,下划线也是如何处理数组和对象的焦点。
实现和使用的简单使用JS的核心数据结构数据建模的目的。这并不是说,一个对象化或类方法是完全无用的。一套为中心的功能性的方法更适合于处理人的相关数据,以及面向对象的方法是最合适的模拟。
JS函数的初步测试
在开始函数式编程之前,您需要定义两个常用和有用的函数:
功能目前存在的(x){
返回x!= null
}
一些函数(x){
返回(x)!= = false)目前存在的(X);
}
对目前存在的功能设计前的东西定义事物的存在。有JS能够表明不存在两个值:空的和不确定的。
的一些功能是用来确定一个对象是否应该被认为是一种真理的同义词。
我们可以在很多地方,使用这两种功能事实上,功能的概念来自使用。一些学生可能已经熟悉很多JS实现如图foreach等方法。和Underscroe也提供了一些类似的方法,可供选择underscroe协助学习函数式编程的原因。
总之,它是:
抽象函数存在性的一个定义。
基于函数存在的真抽象函数的定义。
使用其他函数使用上面的两个函数来实现更多的行为。
加快
在对函数编程有一个大致的了解之后,你可能会认为这个函数式编程不是很慢吗例如,为了获得数组索引,有必要定义一个专门的函数吗ARR指标} {直接使用比这些功能更快绝对。
var arr = { 1, 2, 3,4, 5 };
最快的
对于(var i = 0;i < arr.length;i++){
console.log(ARR {我});
}
/慢
_。每个(ARR,功能(Val,指数){
console.log(指数);
});
但是我们可能对代码没有太多的考虑,也许它比原代码慢一点,但在大多数情况下,它并不关心那个时间。现在,有强大的V8引擎。在大多数情况下,他可以高效地编译和执行我们的js代码,因此在编写正确的代码之前,我们不必考虑运算速度。
如果我选择了它,我可能更关心代码的风格。当然,为了确保基本的计算速度不那么慢,您使用的是什么样的舒适。
总结
读完第一章,它也是一个可以用JS总结的函数式编程:
确定抽象并为其构建函数。
使用现有函数构建更复杂的抽象。
通过将现有函数传递给其他函数来构建更复杂的抽象。
仅仅构建一个抽象是不够的,如果我们能够结合强大的数据抽象来实现函数式编程,那就更好了。
以下各章将慢慢为大家分享,敬请关注。