javascript系列:函数式编程(开篇)

Kasmine      2022-02-08     237

关键词:

前言:

上一篇介绍了 函数回调,高阶函数以及函数柯里化等高级函数应用,同时,因为正在学习JavaScript·函数式编程,想整理一下函数式编程中,对于我们日常比较有用的部分。

 

为什么函数式编程很重要?

      学习过C++,java这些面向对象编程语言,我们大概都知道面向对象编程就是把目标问题分成几个部分,实现各部分的功能,再组合成一个更强大的对象。虽说JavaScript不是面向对象编程语言(虽然ES6已经出现了Class类这种对象,在此暂且不说),但它却是一种完完全全支持函数式编程的语言,利用函数式编程,我们也可以将问题分解成几个部分(函数)来解决。函数式编程也通过组合其他函数构造更加强大的函数,以实现更抽象的行为。
 
  1. 以函数为抽象单元
    • 比如,我们想自定义打印错误,我们可以将错误,警告等等概念抽象为一个函数
      1 function fail(err){
      2 throw new Error(err);
      3 }
      4 function warn(err){
      5 console.log("Warning thing:%s",err);
      6 }   

       

  2. 封装和隐藏
    • Javascript中没有提供直接隐藏数据的方式(也就是没有私有变量),但是可以使用闭包来实现隐藏数据(实现私有变量的定义)
       1 var Person=function(){
       2 // 定义私有变量
       3 var school="SCUT";
       4 // 定义公共接口方法
       5 return {
       6 name:'',
       7 setName:function(name){
       8 this.name=name;
       9 },
      10 getName:function(){
      11 return this.name;
      12 },
      13 getSchool:function(){
      14 return school;
      15 }
      16 }
      17 }
      18 var person1=new Person()
      19 // => undefined
      20 person1.school
      21 // => undefined
      22 person1.getSchool()
      23 // => "SCUT"

       

       1 var Person=function(){
       2 this.name='';
       3   this.school="SCUT";
       4 this.setName=function(name){
       5 this.name=name;
       6 };
       7 this.getName=function(){
       8 return this.name;
       9 };
      10 this.getSchool=function(){
      11 return this.school;
      12 }
      13 }
      14 var person1=new Person()
      15 person1.getSchool()
      16 //=> "SCUT"
      17 person1.school
      18 //=> "SCUT"
      19 person1.school='JYYz'
      20 person1.getSchool()
      21 //=> "JYYz"

       

      由第一个例子我们可以看到 school 相当于私有变量,无法通过实例访问
      1 person1.school
      2 // => undefined

       

      而第二个例子可以访问,并且可以进行修改。
  3. 以函数为行为单位
    • 提供一种简单的存储和传递行为的离散单元
    • 举一个简单的例子:数组索引行为,称之为nth,简单如下
       1 nativeNth('hello',2)
       2 //=> "l"
       3 nativeNth({},2)
       4 //=> undefined
       5 可以看到,当传入不正确的值时候,会发生错误;对之进行修改如下:
       6 function nativeNth(a,index){
       7 if(!Number.isInteger(index)) fail("Expected a number as the index");
       8 if(!Array.isArray(a) && typeof a !=='string')
       9 fail("Non supported on non-indexed type");
      10 if((index<0)||(index>a.length-1))
      11 fail("index value is out of bounds");
      12 return a[index];
      13 }

       这样子我们构建了nth函数的抽象方式
       
      总结:概括的说,函数式编程包括以下几点:
      确定抽象,并为其构建函数
      利用已有的函数来构建更为复杂的抽象
      通过已有的函数传给其他的函数来构建更加复杂的抽象
       
      通过函数,我们可以把各部分功能封装在各个抽象里面,提供一个接口,实现逻辑的独立性。

javascript函数式编程

第1章JavaScript函数式编程简介11.1JavaScript案例11.2开始函数式编程41.2.1为什么函数式编程很重要41.2.2以函数为抽象单元71.2.3封装和隐藏91.2.4以函数为行为单位101.2.5数据抽象141.2.6函数式JavaScript初试171.2.7加速191.3Underscore示例221.4总结2... 查看详情

javascript中的函数式编程

本文和大家分享的主要是javascript中函数式编程相关内容,一起来看看吧,希望对大家学习javascript有所帮助。 函数式编程(functionalprogramming)或称函数程序设计,又称泛函编程,是一种编程范型,比起命令式编程,函数式编程... 查看详情

javascript函数式编程基础(代码片段)

javascript函数式编程基础函数调用引用做返回值/*javascript函数式编程基础*/functionsayHello()return"helloworld";letresult=sayHello();//函数调用letfn=sayHello;//函数引用console.log(fn());//helloworld//函数做返回值functionee( 查看详情

函数化思维系列

函数化思维系列这一系列的博文将介绍函数式编程的基本原则-什么才是真正的函数式编程,它又与面向对象编程和命令式编程有什么不同。1:介绍函数化思维看看基本的函数式编程。 查看详情

玩转javascript面试:何为函数式编程?(代码片段)

函数式编程在JavaScript领域着实已经成为一个热门话题。就在几年前,很多JavaScript程序员甚至都不知道啥是函数式编程,但是就在近三年里我看到过的每一个大型应用的代码库中都包含了函数式编程思想的大规模使用。函数式编... 查看详情

Javascript 是函数式编程语言吗?

】Javascript是函数式编程语言吗?【英文标题】:IsJavascriptaFunctionalProgrammingLanguage?【发布时间】:2011-04-2703:08:08【问题描述】:仅仅因为函数是一等对象,有闭包和更高阶的函数,Javascript是否应该被称为函数式编程语言?我认为... 查看详情

函数式编程

和Lisp、Haskell不同,javascript并非函数式编程语言,但在javascript中可以操控对象一样操控函数,也就是说可以在javascript中应用函数式编程技术。ES5中的数组方法(如map()和reduce())就可以非常适合用于函数式编程风格。本文将详细介... 查看详情

javascript与函数式编程

原文:https://bethallchurch.github.io/JavaScript-and-Functional-Programming/译文:http://www.zcfy.cc/article/1013译者注:推荐一篇译文,《函数式编程术语解析》。本文是我在2016年7月29号听KyleSimpson精彩的课程《Functional-LightJavaScript》时所做的笔记... 查看详情

《javascript函数式编程思想》——从面向对象到函数式编程

...假如本书的写作时间倒退回十年前,书名可能会变成JavaScript面向对象编程思想。自上世纪90年代兴起的面向对象编程思想随Java的繁荣达于顶点,在JavaScript从一门只被用来编写零星的简单的表单验证代码的玩具语言变成日... 查看详情

javascript函数式编程(代码片段)

JavaScript函数式编程(一) JavaScript函数式编程(二)在第二篇文章里,我们介绍了 Maybe、Either、IO 等几种常见的Functor,或许很多看完第二篇文章的人都会有疑惑:『这些东西有什么卵用?』事实上,如果只是为了学... 查看详情

swift系列三十二-函数式编程(代码片段)

...程?1.1.介绍主要思想:把计算过程尽量分解成一系列可复用函数的调用。主要特征:函数是"一等公民"(函数与其他数据类型一样的地位,可 查看详情

用函数式编程,从0开发3d引擎和编辑器:函数式编程准备(代码片段)

...大部分人认为函数式编程差,主要基于下面的理由(参考JavaScript函数式编程存在性能问题么?):1)柯西化、函数组合等操作增加时间开销2)map、reduce等操作,会 查看详情

javascript函数式编程-包含闭包链式优化及柯里化

本文着重介绍个人理解的函数式编程。函数式编程个人理解为:以函数为主要载体的编程方式。好处:语义更加清晰可复用性高可维护性好作用域局限、副作用少基本函数式编程://实现数组中每个单词首字母大写//一般写法const... 查看详情

javascript与函数式编程

原文:https://bethallchurch.github.io/JavaScript-and-Functional-Programming/译文:http://www.zcfy.cc/article/1013译者注:推荐一篇译文,《函数式编程术语解析》。本文是我在2016年7月29号听KyleSimpson精彩的课程《Functional-LightJavaScript》时所做的笔记... 查看详情

javascript-underscore与函数式编程

《Javascript函数式编程 PDF》#csdn下载地址http://download.csdn.net/detail/tssxm/9713727 Underscore #githubhttps://github.com/jashkenas/underscore#中文官方网站http://www.css88.com/doc/underscore/#CDN<s 查看详情

scala入门系列:函数式编程

引言Scala是一门既面向对象,又面向过程的语言,Scala的函数式编程,就是Scala面向过程最好的佐证。也真是因此让Scala具备了Java所不具备的更强大的功能和特性。而之所以Scala一直没有替代Java,一是因为Java诞生早,基于Java开发... 查看详情

《javascript函数式编程思想》

自序伴随着Web技术的普及,JavaScript已成为应用最广泛的编程语言之一。由于其在Web前端编程中的统治地位、语言本身的表现力、灵活性、开源的本质和ECMAScript标准近年来的快速发展,JavaScript向各个领域渗透的势头仍然... 查看详情

傻瓜函数式编程

傻瓜函数式编程FP说明转载,github.com/justinyhuang2006年6月19日,星期一开篇我们这些码农做事都是很拖拉的。每天例行报到后,先来点咖啡,看看邮件还有RSS订阅的文章。然后翻翻新闻还有那些技术网站上的更新,再过一遍编程论... 查看详情