Skip to content
gqlxj1987's Blog
Go back

Function Program

Edit page

原文

offers a helpful twist on typical functional programming operations (like map(..), compose(..), etc)

主要是从JS的角度来说明functional programming,例如,ES6

大量的FP libraries in JS


function uppercase(v) { return v.toUpperCase(); }

var words = ["Now","Is","The","Time"];
var moreWords = ["The","Quick","Brown","Fox"];

var f = R.map( uppercase );
f( words );                        // ["NOW","IS","THE","TIME"]
f( moreWords );                    // ["THE","QUICK","BROWN","FOX"]

使用Ramda, R.map(..)是柯西化的

我们注意到这部分的功能是,先使用mapper的功能,也就是uppercase的分发,然后才是arrays的功能(遍历?)

因为是柯西化的,所以我们可以进行反转


var p = R.flip( R.map )( words );

p( lowercase );                 // ["now","is","the","time"]
p( uppercase );                 // ["NOW","IS","THE","TIME"]

这样,先进行遍历array的操作,然后才是相关功能的mapper? 这里面使用了R.flip(..)这样的功能进行参数的交换

由此引出的问题,在functional programming中,需要记住参数的顺序


function concatStr(s1,s2) { return s1 + s2; }

var words = ["Now","Is","The","Time"];

_.reduce( concatStr, _, words );
// NowIsTheTime

_.reduce( concatStr, "Str: ", words );
// Str: NowIsTheTime

这里面_.reduce(..)使用这样的参数顺序reducerFunction, initialValue, arr。但我们一般情况下很少填写initialValue

这样的一个解决办法就是Named Arguments。这样的一种方案不是跟python很类似?


Edit page
Share this post on:

Previous Post
回归初心
Next Post
Cache Strategy