3.1 Underscore.js 소개

3.1.4 지연 평가 2 (map->map->map)

밑의 underscore.js를 사용한 코드와 lodash를 사용한 코드는 결과는 같지만 내부적으로는 다르게 동작한다.

function mul10(num) {
  return num * 10
}
function sub10(num) {
  return num - 10
}
function square(num) {
  return num * num
}

// Underscore.js
var list = [1, 2, 3, 4, 5]
var result2 = 
  _.chain(list)
  .map(mul10)
  .map(sub10)
  .map(square)
  .value()

// Lodash
var list = [1, 2, 3, 4, 5]
var result1 = 
  lodash.chain(list)
  .map(mul10)
  .map(sub10)
  .map(square)
  .value()

절차지향적으로 다시 한 번 위의 코드들을 정리해 보면 다음과 같다.

// Underscore.js
var temp1 = []
for (var i = 0; i < list.length; i++) {
  temp1.push(mul10(list[i]))
}

var temp2 = []
for (i = 0; i < list.length; i++) {
  temp2.push(sub10(list[i]))
}

var temp3 = []
for (i = 0; i < list.length; i++) {
  temp3.push(square(list[i]))
}

// Lodash
var temp = []
for (var i = 0; i < list.length; i++) {
  temp.push(square(sub10(mul10(list[i]))))
}

지연 평가나 체인 객체가 꼭 필요하지는 않다. 다음과 같이 개발자가 3개의 함수를 연속적으로 실행해 주기만 하면 된다.

_.map(list, function(num) {
  return square(sub10(mul10(num)))
})

체인 방식을 통한 Lodash의 지연 평가는 그다지 함수형 프로그래밍적이지 않고 성능 상으로도 이득이 없다.

3.1.5 지연 실행

다시 한번 정리하면