*아래에서 사용될 함수(go, curry...)들은 이전 포스트들에서 설명되어 있습니다.📗Promise vs CallbackPromise 형식의 코딩과 Callback 형식의 코딩에는 많은 차이가 있다.첫번째로 가독성이다,function add10(a, callback) { setTimeout(() => callback(a + 10), 100); }//콜백이 겹겹히 쌓이면 안에 로직 보기가 힘들다.add10(5, res => { add10(res, res => { add10(res, res => { add10(res, res => { add10(res, res => { // 콜백지옥이 발생할수 있다. }); }); }); });});function add20(..
자바스크립트
*아래에서 사용될 함수(go, curry...)들은 이전 포스트들에서 설명되어 있습니다.📗함수형 프로그래밍에서 reduce 와 take의 역할어떠한 데이터를 최종적으로 만들어 낼 것인가? 에서 결과를 만들어주는 reduce와 take 계열의 함수들은 중요하다.앞에서는 지연평가를 이용하여 함수를 살펴보았고, 실제로 평가가 미루어져서 마지막 take에서 부터 연산이 실행함을 알 수 있었다.그렇다면 다시 말해, reduce와 take계열의 함수는 연산의 시작점 이라고 볼 수 있을 것이다.queryStr 함수 생성으로 알아보는 함수형 프로그래밍적 사고아래 코드 queryStr 함수 실행시의 주석을 보면은L.entries = function* (obj) { for (const k in obj) yield ..
*아래에서 사용될 함수(go, curry...)들은 이전 포스트들에서 설명되어 있습니다.📗지연성이 이루고자 하는 목표지금까지의 코드를 바탕으로 아래와 같은 코드가 실행된다고 생각해보자. go( range(100000), take(5), reduce(add), log);우선 range 함수를 통해 10만개의 index를 가진 배열이 생성되고 그 중 5개를 take 하여 reduce로 더하는 함수임을 알 수 있다.문제가 없어 보이지만, 10만개의 index중 단 5개만을 사용하고 나머지는 사용되지 않은 상태여서나머지 99995개의 배열 인덱스에 값이 평가된 것은 실제로 쓸모없는 일이 되었다.하지만, 웹에서 돌아가는 js의 특성상 실제 서비스에선 10만개의 index중 5개를 take ..
📗이터러블/이터레이터 프로토콜 규약을 따른 map, filter, reduceconst log = console.log;const map = (f, iter) => { let res = []; for (const a of iter) { res.push(f(a)); } return res; }; const filter = (f, iter) => { let res = []; for (const a of iter) { if (f(a)) res.push(a); } return res; }; const reduce = (f, acc, iter) => { if (!iter) { // 3번째 인자까지 작성하지 않았다면 acc를 ite..
📗함수형 프로그래밍을 위한 자바스크립트 기본기함수형 프로그래밍은 어떤 이론을 토대로 가능할까평가란 코드가 계산(Evaluation) 되어 값을 만드는 것 이다.일급이란 아래 4개의 조건을 충족할 수 있어야 한다.- 값으로 다룰 수 있다.- 변수에 담을 수 있다.- 함수의 인자로 사용될 수 있다.- 함수의 결과로 사용될 수 있다.함수는 일급이며 일급 함수라 부를 수 있다. 일급 함수는 조합성과 추상화의 도구가 된다자바스크립트는 함수를 값으로 평가하며, 함수 자체가 일급이기 때문에 함수의 인자로 받아서 실행하거나 함수를 반환할 수 있다. 이 특성은 함수를 값으로 다루는 함수인 고차 함수의 작동을 가능하게 하며 함수형 프로그래밍의 토대가 된다.const apply1 = f => f(1);const add2 ..
18-1 일급 객체자바스크립트에서 아래와 같은 조건을 만족하는 객체를 일급 객체 라고한다.무명의 리터럴로 생성할 수 있다. 즉 런타임에 생성이 가능하다.변수나 자료구조에 저장할 수 있다.함수의 매개변수에 전달할 수 있다.함수의 반환값으로 사용할 수 있다.자바스크립트의 함수는 위 조건을 전부 만족하므로 일급 객체이다.// 1. 무명의 리터럴로 생성할 수 있다.// 2. 변수에 저장할 수 있다.// 런타임에 함수 리터럴이 평가되어 함수 객체가 생성되고 변수에 할당된다.const increase = function (num) { return ++num;};const decrease = function (num) { return --num;};// 2. 함수는 객체에 저장할 수 있다.const auxs = ..