• 从函数式编程到Ramda函数库(二)


      Ramda 基本的数据结构都是原生 JavaScript 对象,我们常用的集合是 JavaScript 的数组。Ramda 还保留了许多其他原生 JavaScript 特性,例如,函数是具有属性的对象。

      今天我来说说javascript函数式的方法库--Ramda。Ramda主要特性如下:

    1. Ramda 强调更加纯粹的函数式风格。数据不变性和函数无副作用是其核心设计理念。这可以帮助你使用简洁、优雅的代码来完成工作。
    2. Ramda 函数本身都是自动柯里化的。这可以让你在只提供部分参数的情况下,轻松地在已有函数的基础上创建新函数。
    3. Ramda 函数参数的排列顺序更便于柯里化。要操作的数据通常在最后面。

      Ramda的api非常的实用且中文文档更新迅速,相信使用过Ramda的童鞋都已经喜欢这个库了。这里感谢Ramda中文文档的维护者王增迪先生,这个推荐王增迪先生的QQ讨论群 114706031,欢迎大家在此群讨论一切与函数式编程相关的问题。

    Ramda的简单使用

      Ramda的安装这里就不多说,文档很详细。下面以R.equals()、R.zip()和R.useWith()方法来打来Ramda的大门。

    1.R.equals():判断两个值是否相等(支持对象的对比)

    R.equals(5,5) // => true 函数多参比较
    R.equals(5)(5) // => true 柯里化支持函数单参比较
    R.equals(4)('8') // => false
    R.equals([])([]) // => true 支持对象对

      通过一个函数就可以优雅的判断对象是否相等,省去了繁琐的对象对比;

    2.R.zip():将两个数组相同索引位置结合,组成新的数组(数字长度与两个数组较短的那个长度相同)

    R.zip([1,2])(['a','b']) // => [[1,'a'],[2,'b']] 长度为2
    R.zip([1,2,3])(['a','b']) // => [[1,'a'],[2,'b']] 长度为2,因为两个数组较短的那个长度为2

      对于经常操纵数组的人来说,这是一个常用且实用的小方法,让我们避开了显式的使用循环对代码造成的不整洁。

    3.R.useWith():接受一个函数fn和一个函数数fnlist组作为参数,返回柯里化函数,该函数接受的参数先分别经过fnlist,得到的结果数组作为fn的参数。下面实现平方和计算

    let square = x => x * x;
    let result = R.useWith(R.add,[square,square]);
    result(3,4); // => 25

      Ramda的作者几乎整理了所有好用的小方法便于我们计算。
      我这里只是扔个转头,相信大家已经在脑海里有了初步的认识,并且已经意识到自己的代码的某些地方是不是应该做一些修改。

      其实我想说的就这个多,函数式编程和Ramda固然有很多优点,对于经常操字符串、数组、对象和方法的代码来说,可以减少代码量,让代码整齐划一,对于方法库的编写也是一样。但是对于很少字符串、数组、对象和方法的代码来说,使用这些有刻意增加代码难度的嫌疑。所以权衡使用函数式编程。

    原创博客:转载请注明从函数式编程到Ramda函数库(二)

  • 相关阅读:
    《精通.NET互操作1.2》C# PInvoke使用c++dll
    WPF的dataGrid基本用法
    C#中$的用法
    ASP.NET WebApi 实现Token验证
    Ajax请求WebAPI传递多参数的方法
    ajax调用ASP.NET MVC控制器传递参数
    js子窗口调用父窗口函数并传递对象给父窗口的方法
    H5本地存储和本地数据库
    非对称加密RSA的C#实现
    在Unity3D项目中接入ShareSDK实现安卓平台微信分享功能(可使用ShareSDK默认UI或自定义UI)
  • 原文地址:https://www.cnblogs.com/vadim-web/p/10708720.html
Copyright © 2020-2023  润新知