Ramda Conventions - ramda/ramda GitHub Wiki

This page gathers rules followed by Ramda developers that have sublimed over the years of creating the library.

Contents

Naming Conventions

Determine between suffixes With and By for a name of a function properly

Function with the suffix By must take a unary function to derive information from data it needs to return a result.

// Bad
minWith(x => mod(x), [-1, 2, 5, -7])

// Good
minBy(x => mod(x), [-1, 2, 5, -7])

On contrary, the suffix With is used for functions that take a function with arity greater than N where N > 1 to be applied to N items from data above which the function operates.

// Bad
uniqBy((a, b) => length(a) === length(b))([[1, 2], '12', 1, 2])

// Good
uniqWith((a, b) => length(a) === length(b))([[1, 2], '12', 1, 2])

Notes:

Reference

Designing a function

Always write pure functions

// Bad
log('Hello') // logs to console

// Good
logBy(window.console)('Hello')

Reference

Support currying

// Bad
add(1, 2) !== add(1)(2)

// Good
add(1, 2) === add(1)(2)

Reference

Prefer non-variadic functions over variadic

// bad
sum(1, 2, 3) // 6

// good
sum([1, 2, 3]) // 6

Use imperative constructs to improve performance

// bad
const incAll = (xs) => xs.map(x => x + 1) 

// good
const incAll = (xs) => {
  let ys = [];
  for (let i = 0; i<xs.length; i++) {
    ys.push(xs[i] + 1);
  }
  return ys;
}

Reference

Determine if your function should support transducers

Ramda's often overlooked feature is support for transducers. Take in consideration if your function should support it too.

Reference