그동안 명령형으로만 프로그래밍을 해왔었다. 함수형 프로그래밍은 함수를 값으로 선언함으로서 사용하는 것으로 선언형 프로그래밍에 속한다. 일급 객체란 객체 자체가 값으로 사용되며, 변수와 인자로 사용할 수 있고, 결과로도 사용되는 객체이다. 즉, 함수형 프로그래밍은 함수를
es6에서 for in과 for of를 통한 반복문이 새로 생겨났다. 이 두 반복문의 차이는 Symbol.iterator이다. for in은 열거된 객체를 모두 반복할 수 있다. 하지만 for of는 Symbol.iterator 속성을 가지고 있어야만 반복이 가능하
제너레이터는 이터레이터를 생성하는 함수이다. 제너레이터를 사용해 모든 순회 가능한 것들을 직접 생성할 수 있다. 제너레이터는 아래와 같이 *와 yield를 사용해 만들 수 있다. 제너레이터는 화살표 함수로 만들 수 없다. get5Symbol.iterator 는
map filter reduce const reduce = (f, acc, iter) => { if (!iter){ const iter = accSymbol.iterator; acc = iter.next(); } for (cons
위 코드를 읽기 위해서는 왼쪽에서 오른쪽으로, 아래에서 위로 읽어야 하므로 가독성 면에서 단점이 많다. 이런 코드를 값으로 만들어서 가독성을 높이기 위한 방법으로 go와 pipe를 만들 수 있다. go go함수는 여러 인자를 받아서 하나의 값으로 반환하는 함수이
위 함수는 l인자를 입력받아 0부터 l만큼 하나씩 숫자를 늘려가며 배열의 요소를 추가하는 함수이다. L.range는 제너레이터로 만들어 이터레이터를 반환하는 함수이다. L.range(4)를 반복문 for of를 통해서 출력하면 위와 같이 요소 하나씩 출력된다. 그럼 r
제때 계산법, 느긋한 계산법으로 연산을 미룰 수 있을 때까지 미루었다가 필요한 시점에 값을 만들어 계산하는 것으로 굉장히 영리한 평가 방법이다. 지연평가는 제너레이터/이터레이터 프로토콜을 기반으로 구현되어야 한다. curry를 적용해서 리턴되는 함수의 인자가 맞춰질때까
map은 즉시 실행 함수로, 요소를 끝까지 돌면서 map에 적용된 함수를 실행한다. delay1000함수는 1초 후에 함수를 실행하도록 해준다. map은 a \* a를 요소를 돌며 일초마다 즉시 실행한다. C.map은 병렬로 작동하는 함수이다. map은 0번 인덱스부터
중첩된 배열을 풀어서 리턴하는 flatten을 만들어보자 우선 이터러블을 돌면서 이터러블의 요소가 다시 이터러블인지 확인하면서 요소를 하나씩 꺼내는 제너레이터를 만들었다. L.flatten은 지연 평가가 되는 함수로, 연산이 필요할때 값이 생성되게 된다. 즉시 평가하는
위 코드를 실행하면 다음과 같이 promise가 나온다.L.map에서 go1함수를 통해 promise인 경우를 처리하여 11, 12가 나왔지만, L.map에서 리턴한 프로미스를 take에서 처리하지 못했기 때문이다. take는 이렇게 되어있다.여기서 프로미스를
위 코드를 실행하면 빈 배열이 출력된다. 이유는 아래와 같이 L.map에서 프로미스를 L.filter에 보내지만 프로미스를 L.filter에서 처리하지 못하기 때문이다. 지연평가와 프로미스를 제어하기위해 Kleisli Composition 이 필요하다.우선 L.filt
비동기 I/O는 싱글스레드 기반에서 하나의 스레드에서 CPU를 효율적으로 점유하는 방법이다. 자바스크립트는 싱글스레드이기 때문에 로직을 싱글스레드로만 제어할 뿐 병렬적인 처리도 필요하다. 위 코드는 순차적으로 1이 L.map, L.filter, L.map이 실행되고 r