JavaScript中的柯里化

今天在博客园首页看到一篇好文章 【译】理解JavaScript中的柯里化

加上最近工作中的一些感悟,算是对函数式编程语言(scala, python, javascrtpt)中的闭包,偏函数、柯里化有了更进一步的认识。

之前学Scala被绕的云里雾里的各种名词,现在也开始慢慢理解了。

上面那篇文章写的很好,这里就只说一下自己实际用到的一个例子。



现在需要对流速进行转换,流速的单位有 bps、Kbps、Mbps、Gbps、Tbps,从一个单位转换到另一个单位需要除N次1000。

可能需要有从bps转换到Gbps的,也可能有需要从Kbps转换到Gbps的,按照普通的写法就会很丑很杂。

这里出现个除1000,那里出现个除1000000,可读性、维护性极差。

使用闭包就可以让代码变得优雅:

定义一个流速转换函数:

function flowVelocityFormater(base, power) {
    return function(v) {
        return (v / Math.pow(base, power)).toFixed(2);
    }
}

在此基础上,得到几个基本的转换函数:

var bps2Gbps = flowVelocityFormater(1000, 9);
var Kbps2Gbps =  flowVelocityFormater(1000, 6);

实际转换时就可以使用

newValue = bps2Gbps(value);

语义简洁清晰多了。

未来有一天,单位转换需要按1024而不是1000转换时,也只需要修改

bps2Gbps = flowVelocityFormater(1024, 9);

即可,或者定义一个新的函数。代码的维护性大大增强。

函数式编程还是蛮爽的~~

原文地址:https://www.cnblogs.com/parody/p/9939962.html

时间: 2024-10-22 15:49:19

JavaScript中的柯里化的相关文章

浅谈JavaScript中的柯里化函数

首先,不可避免的要引经据典啦,什么是柯里化函数呢(from baidu): 在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术.这个技术由 Christopher Strachey 以逻辑学家 Haskell Curry 命名的,尽管它是 Moses Schnfinkel 和 Gottlob Frege 发明的. 用于创建已经设置好了一个或多个参数的函数 与函数绑定相似,他们之间的区

javascript中利用柯里化函数实现bind方法

柯理化函数思想:一个js预先处理的思想:利用函数执行可以形成一个不销毁的作用域的原理,把需要预先处理的内容都储存在这个不销毁的作用域中,并且返回一个小函数,以后我们执行的都是小函数,在小函数中把之前预先存储的值进行相关的操作处理即可: 柯里化函数主要起到预处理的作用: bind方法的作用:把传递进来的callback回调方法中的this预先处理为上下文context; /** * bind方法实现原理1 * @param callback [Function] 回调函数 * @param con

JS中的柯里化(currying)

何为Curry化/柯里化? curry化来源与数学家 Haskell Curry的名字 (编程语言 Haskell也是以他的名字命名). 柯里化通常也称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果.因此柯里化的过程是逐步传参,逐步缩小函数的适用范围,逐步求解的过程. 柯里化一个求和函数 按照分步求值,我们看一个简单的例子 var concat3Words = function (a

js中的柯里化

维基百科中的解释: 在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术. 顾名思义,柯里化其实本身是固定一个可以预期的参数,并返回一个特定的函数,处理批特定的需求.这增加了函数的适用性,但同时也降低了函数的适用范围. 柯里化所要表达是:如果你固定某些参数,你将得到接受余下参数的一个函数. 柯里化实现的通用版本 var curry = function(

javascript之反柯里化(uncurrying)

在JavaScript中,当我们调用对象的某个方法时,其实不用去关心该对象原本是否被设计为拥有这个方法,这是动态类型语言的特点.可以通过反柯里化(uncurrying)函数实现,让一个对象去借用一个原本不属于他的方法. 通常让对象去借用一个原本不属于它的方法,可以用call和apply实现,如下 更常见的场景之一是让类数组对象去借用Array.prototype的方法: (function(){ Array.prototype.push.call(arguments,4) console.log

Scala中的柯里化

一.初识Currying柯里化 柯里化(Currying)技术 Christopher Strachey 以逻辑学家 Haskell Curry 命名的(尽管它是 Moses Schnfinkel 和 Gottlob Frege 发明的).它是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术. 简单理解就是改变函数的表达形式但其功能特性不变,这对于第一次接触柯里化的人来讲,这样的一个技术貌似有点“鸡肋”,但如果你有丰富的JS

javascript之反柯里化uncurrying

使用方法: 1 // 使用 2 var push=Array.prototype.push.uncurrying(); 3 var obj={ 4 "length": 1, 5 "0": 1 6 } 7 push(obj,2); 8 console.log(obj); // { 0=1, 1=2, length=2} 9 10 function fn(name){ 11 console.log(this.name); //test 12 console.log(ar

浅析 JavaScript 中的 函数 currying 柯里化

原文:浅析 JavaScript 中的 函数 currying 柯里化 何为Curry化/柯里化? curry化来源与数学家 Haskell Curry的名字 (编程语言 Haskell也是以他的名字命名). 柯里化通常也称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果.因此柯里化的过程是逐步传参,逐步缩小函数的适用范围,逐步求解的过程. 柯里化一个求和函数 按照分步求值,我们看一个

JavaScript的柯里化函数

柯里化,或者说部分应用,是一种函数式编程的技术,对于熟悉以传统方式编写 JavaScript 代码的人来说可能会很费解.但如果使用得当,它可以使你的 JavaScript 函数更具可读性. 更具可读性和灵活性 函数式 JavaScript 被吹捧的优点之一就是拥有短小紧凑的代码风格,可以用最少行数.更少重复的代码得到正确的结果.有时这会以牺牲可读性为代价:如果你还不熟悉函数式编程的方法,这种方法写的代码会很难阅读和理解. 如果之前你遇到过柯里化这个术语,但是不知道它是什么意思,把它当做奇怪的.难