Ramda.jsの関数を機能ごとに整理してみた。
日本語のRamda.js記事が少ないのは、なんでなんだろね?
制御構造の抽象化
条件分岐
if系
R.ifElse
R.ifElse(condition, onTrue, onFalse)
condition関数に基づいてonTrue || onFalse関数を実行.
http://ramdajs.com/docs/#ifElse
R.when
R.when(condition, whenTrueFn)
conditionを満たしたら処理を実行する、という使い方をする関数.
R.unlessの真逆.
R.unless
R.unless(conidition, whenFalseFn)
coniditionを満たしたら処理をスキップする、という使い方をする関数.
R.whenの真逆.
Maybeモナドにちょっと似てるね.
R.cond
R.cond([ [condition, onTrue], [condition, onTrue], ... ])
if, else if, else if, ... の関数型.
判定返り値返し
R.both
return f1(args) && f2(args)
f1がfalseならf1の返り値が、trueならf2の返り値が出てくる.
R.either
return f1(args) || f2(args) R.bothの親戚
逐次処理
直列処理系
正確には、逐次処理を可能にする関数を合成する系の関数.
ポイントフリースタイルが簡単に.
並列分岐系
aをもとに処理をしてbとcをつくり、bとcでさらに処理をするタイプのもの.
aが2つに分岐して、その後合流するみたいな感じ
R.converge
R.converge(convergingF, [divergingF, ...])
入力をn個のdiverging functionで処理し、この返り値全てをconverging functionへの入力とする
ループ系
while
R.until
R.until(condition, process)
conditionを満たすまでarg=process(arg)を反復.
判定系
R.allPass
condition関数のlistを引数にとり、すべてtrueならtrueを返す
R.anyPass
condition関数のlistを引数にとり、いずれかtrueならtrueを返す.
R.and
2つのcondition関数を引数を取り、両方trueならtrueを返す.
R.or
2つの引数を ||するだけ、単純
R.complement
R.complement(conditionF) => "(arg)=>!condition(arg)"
condition関数がtrueならfalseを、falseならtrueを返す.
R.not
引数がtrueならfalseを、falseならtrueを返す.
まんま否定演算子
isEmpty
R.isEmpty(arg)
argが空 ([]とか、""とか、{}とか)ならtrue
pathSatisfies
xxx
propSatisfies
特定propertyがconditionを満たすか判定する模様??.
その他
defaultTo
defaultTo(default, arg)
if (arg === null || undefined || NaN) return default,
else return arg
たくさんのライブラリ関数たち
検証済み関数がたくさんあるということだから、一概に悪いわけではない.