밑의 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의 지연 평가는 그다지 함수형 프로그래밍적이지 않고 성능 상으로도 이득이 없다.
다시 한번 정리하면