[ES6+: 응용] 객체를 이터러블 프로그래밍으로 다루기
#1 객체를 다루는 함수, 이터러블 프로그래밍화 시키기 values 다루기 다음과 같은 객체가 있다고 보자. const obj1 = { a: 1, b: 2, c: 3, d: 4 }; 먼저 위코드의 values 값들을 콘솔을 통해 출력해보자. console.log(Object.values(obj1)); // [1, 2, 3, 4] 위 처럼 value값들을 뽑아낼 수 있으며, 위 값들을 go함수를 통해 값을 뽑아내는 함수를 보자. _.go( obj1, Object.values, _.map(a => a + 10), _.take(2), _.reduce((a, b) => a + b), console.log); // 23 위 값에서 console.log를 하기까지 단 2개의 값이 필요했지만, 사실상 모든 value..
더보기
[ES6+: 응용] reduce함수를 통해보는 명령형 습관을 지우기
#1 reduce함수는 만능이 아니다 "reduce" 한개를 쓰는 것 보다 "map + filter + reduce" 를 함께 쓰자 기존 명령형 습관들 때문에, reduce를 오용하는 경우가 자주 있다. const users = [ { name: 'AA', age: 35}, { name: 'BB', age: 26}, { name: 'CC', age: 28}, { name: 'DD', age: 34}, { name: 'EE', age: 23}, ] 위와 같은 users 데이터가 있다. 이를 합산하는 코드를 reduce통해 짜볼 것이다. console.log(_.reduce((total, u) => total + u.age, 0, users)); // 146 위를 보면 total과 u.age라는 서로 다른 ..
더보기
[ES6+: 응용] 명령형에서 함수형으로 변환시키기
#1 명령형 코드를 함수형으로 변환시키기 우리가 이때까지 배웠던 for, if, while 문과 같은 명령형 문을 앞에서 배웠던 함수형으로 간략하게 변환시켜보자. 먼저, '홀수를 n개 더하는' 명령형 코드를 보자. function f1(limit, list){ let acc = 0; for(const a of list){ if(a % 2){ const b = a * a; acc += b; if (--limit == 0) break; } } console.log(acc); // 35 } f1(3, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); 위 코드는 "리스트를 받아와서 홀수인 값만 뽑아서 거기에 제곱을 하는데, 딱 3개만 뽑고 그 뽑은 값들을 더하는 것"이다. 이 내용을 명령형 코드로 짰..
더보기
[JS: ES6+] 비동기: 동시성 프로그래밍 (2)
#1 지연 평가와 Promise 지연 평가 + Promise - L.map, map과 take 먼저, go 안에 Promise로 구성하여 출력해보자. go([Promise.resolve(1), Promise.resolve(2), Promise.resolve(3)], L.map(a => a + 10), take(2), console.log); // ["[object Promise]10", "[object Promise]10"] go에 Promise로 구성하면, 정상적인 연산이 되지 않는다. 이를 정상적으로 연산이 되게끔 구성을 해볼 것 이다. 앞에서 사용했던 L.map 함수를 보자. L.map = curry(function* (f, iter) { for (const a of iter) { yield f(a..
더보기