JavaScriptでは標準では物足りないと感じられることが多いです。そこでjQueryやUnderscoreのようなライブラリが必須になってきます。そうすることでプログラミングをする上で必須ともいえる機能が使えるようになります。 FKitはそのJavaScriptでよくありがちな機能を補完してくれるライブラリになります。きっとああ、これが欲しいんだよねと思う機能があるはずです。

FKitの使い方

FKitはFunction/Array/Objects/Stringに対して機能を追加します。

たとえばこのような機能になります。

// Sum the numbers in a list.
F.sum([1, 2, 3]); // 6

// Stash a string.
F.map(F.surround('{', '}'), 'hello'); // '{h}{e}{l}{l}{o}'

// Intersperse the numbers in a list with another number.
F.intersperse(4, [1, 2, 3]); // [1, 4, 2, 4, 3]

// Filter the numbers in a list where 1 < n < 5.
[1, 2, 3, 4, 5].filter(F.whereAll([F.gt(1), F.lt(5)])); // [2, 3, 4]

// Calculate the cartesian product of two lists.
F.cartesian([1, 2], [3, 4]); // [[1, 3], [1, 4], [2, 3], [2, 4]]

// Calculate the permutations of a list.
F.permutations('abc'); // ['abc', 'bac', 'cba', 'bca', 'cab', 'acb']

特に関数型言語を意識しており、カリー化もできます。

function inc(a) { return a + 1; }
function div(a, b) { return a / b; }
function list(head, tail) { return head + ':' + JSON.stringify(tail); }

example('#curry')(
  // Curry a function and apply it to the arguments.
  F.curry(div)(1)(2)
);

文字列もFを通して操作します。

var s = 'foo';

F.length(s)
-> 3

F.head(s)
-> f

F.tail(s)
-> oo

F.init(s)
-> fo

配列も同じです。

var as = [1, 2, 3];

F.get(1, as)
-> 2

F.set(5, 6, as)
-> [1,2,3,null,null,6]

関数を与えた引数によって振り分けるなんてことも。

var large     = F.branch(F.gte(100), function(a) { return a + ' is large'; }),
    medium    = F.branch(F.gte(10), function(a) { return a + ' is medium'; }),
    small     = F.branch(F.gt(0), function(a) { return a + ' is small'; }),
    otherwise = function() { return 'nothing'; };

var f = F.compose(large, medium, small)(otherwise);

f(1)
-> 1 is small

f(12)
-> 12 is medium

f(123)
-> 123 is large

jQueryでも似たような操作はできますが、DOM操作は不要と言った時にはFKitが便利かも知れません。クライアントサイド、nodeの両面に対応しています。

FKitはJavaScript/node製、MIT Licenseのオープンソース・ソフトウェアです。

FKit nullobject/fkit · GitHub