The full ECMAScript API done a functional way.
_
at the end that takes the options. E.g: indexOf(x,str)
& indexOf_(x,y,str)
Thanks so much to @casperin and @eschmitt for doing a ton of the work on this though isn't not visible in the contributors.
There is an expose()
method to "mix in" to the global namespace if
desired.
In the browser
<script src="https://github.com/loop-recur/lambdajs/raw/master/dist/lambda.browser.js"></script>
<script>LambdaJS.expose(window);</script>
or
define(['dist/lambda.amd.js'], function(Ljs){
});
In node
npm install lambdajs
var ljs = require('lambdajs');
or
require('lambdajs').expose(global);
Let's say you want to replace "-" for "/" in a js function. Typically you'd have to do:
var dashesForSlashes = function(str) {
return str.replace(/-/g, '/');
}
This has some issues.
str
function(){}
complete with return
str
to be able to call replace
In functional "point free" style we don't need to grab a hold of our data to be able to write new functions. In this case, by "data" I mean the string.
LambdaJS let's us write something like this:
var dashesForSlashes = replace(/-/g, '/');
This is very useful when dealing with compose
var f = compose(toUpperCase, replace(/-/g, '/'))
f("hi-guys") //=> HI/GUYS
Another issue is, in standard javascript, if you call reverse
on an array, you will
permanently alter the array:
var users = ['Alex', 'Sam', 'Pat']
users.reverse(); //=> ['Pat', 'Sam' 'Alex']
users //=> ['Pat', 'Sam' 'Alex']
That can be quite surprising when you go to display users in a different spot of your app and they are out of order.
LambdaJS makes all the built-in functions "pure", meaning there is no side-effects or mutation.
var users = ['Alex', 'Sam', 'Pat']
reverse(users); //=> ['Pat', 'Sam' 'Alex']
users //=> [['Alex', 'Sam', 'Pat']
If you're interested in learning more about currying and composition, I gave a talk on this subject a little while ago: Hey underscore, you're doing it wrong!
ROADMAP (help if ya want!):