728x90
09 람다 라이브러리
09-1 람다 라이브러리 소개
- compose나 pipe를 사용하는 함수 조합을 쉽게 할 수 있게 설계된 오픈소스 자바스크립트 라이브러리
- 타입스크립트 언어와 100% 호환
- compose와 pipe 함수 제공
- 자동 커리(auto curry) 기능 제공
- 포인트가 없는 고차 도움 함수 제공
- 조합 논리(combinatory logic) 함수 일부 제공
- 하스켈 렌즈(lens) 라이브러리 기능 일부 제공
- 자바스크립트 표준 모나드 규격(fantasyland-spec)과 호환
- ramda 패키지 구성
- 많은 도움 함수(utility function) 제공
- 함수(function) : R.compose, R.pipe, R.curry 등 52개 함수
- 리스트(list) : 배열을 대상으로 하는 R.map, R.filter, R.reduce 등 87개 함수
- 로직(logic) : R.not, R.or, R.cond 등 불리언 로직 관련 17개 함수
- 수학(math) : R.add, R.subtract, R.multiply, R.divide 등 수 관련 13개 함수
- 객체(object) : R.prop, R.lens 등 객체와 렌즈 관련 49개 함수
- 관계(relation) : R.lt, R.lte, R.gt, R.gte 등 두 값의 관계를 파악하게 하는 25개 함수
- 문자열(string) : R.match, R.replace, R.split 등 문자열을 대상으로 정규식(regular expression) 등을 할 수 있게 하는 8개 함수
- 타입(type) : R.is, RisNil, R.type 등 대상의 타입을 파악하게 하는 4개 함수
- 많은 도움 함수(utility function) 제공
09-2 람다 기본 사용법
- R.range 함수
- [최솟값, 최솟값 + 1, ..., 최댓값 - 1] 형태의 배열을 생성
- R.tap 디버깅용 함수
- 2차 고차 함수 형태로 현재 값을 파악
- 자동 커리(auto curry)
- 매개변수가 두 개인 일반 함수처럼 사용할 수도 있고 2차 고차 함수로 사용할 수 있음
- R.curryN 함수
- N개의 매개변수를 가진 1차 함수(first function)를 N개의 커리(curry) 매개변수를 가지는 N차 고차 함수로 만듦
09-3 배열에 담긴 수 다루기
- 선언형 프로그래밍(declarative programming)
- 모든 입력 데이터는 단순 데이터보다 배열 형태를 주로 사용
- R.addIndex 함수
- Array.map은 두 번째 매개변수로 index를 제공하지만 R.map은 index 매개변수를 기본으로 제공하지 않음
- R.addIndex 함수를 사용해 R.map이 index를 제공하는 새로운 함수를 만들어야 함
- R.flip 함수
- R.subtract와 같은 2차 고차 함수의 매개변수 순서를 바꿔줌
09-4 서술자와 조건 연산
- 서술자(predicate)
- 함수형 프로그래밍에서 boolean 타입 값을 반환해 어떤 조건을 만족하는지를 판단하는 함수
- R.not 함수
- 입력값이 true이면 false를 반환하고 false이면 true를 반환하는 함수
- R.ifElse 함수
- 세 가지 매개변수를 포함
- 첫 번째 - true/false를 반환하는 서술자
- 두 번째 - 선택자가 true를 반환할 때 실행할 함수
- 세 번째 - 선택자가 false를 반환할 때 실행할 함수
- 세 가지 매개변수를 포함
09-5 문자열 다루기
- R.trim 함수 : 문자열 앞뒤의 공백을 제거
- R.toLower 함수 : 문자열에서 대문자를 모두 소문자로 전환
- R.toUpper 함수 : 소문자를 모두 대문자로 전환
- R.split 함수 : 구분자(delimiter)를 사용해 문자열을 배열로 바꿈
09-6 chance 패키지로 객체 만들기
- chance 패키지 : 그럴듯한 가짜 데이터를 만들어주는 라이브러리
09-7 렌즈를 활용한 객체의 속성 다루기
- 렌즈(lens)
- 하스켈 언어의 Control.Lens 라이브러리 내용 중 자바스크립트에서 동작할 수 있는 게터(getter)와 세터(setter) 기능만을 람다 함수로 구현한 것
- R.lens 함수로 객체의 특정 속성에 대한 렌즈를 만든다
- 렌즈를 R.view 함수에 적용해 속성 값을 얻는다
- 렌즈를 R.set 함수에 적용해 속성 값이 바뀐 새로운 객체를 얻는다
- 렌즈와 속성 값을 바꾸는 함수를 R.over 함수에 적용해 값이 바뀐 새로운 객체를 얻는다
- 하스켈 언어의 Control.Lens 라이브러리 내용 중 자바스크립트에서 동작할 수 있는 게터(getter)와 세터(setter) 기능만을 람다 함수로 구현한 것
- R.prop과 R.assoc 함수
- R.prop는 객체의 특정 속성 값을 가져오는 함수로서, 이런 동작을 하는 함수를 게터(getter)라고 함
- 객체의 특정 속성 값을 변경하려면 R.assoc를 사용하는데, 이런 목적으로 사용하는 함수를 세터(setter)라고 함
- R.lensPath 함수
- 람다 라이브러리에서는 객체의 이런 중첩 속성(nested property)을 '경로(path)'라고 함
- 긴 경로의 속성을 렌즈로 만들 때 R.lensPath 함수를 사용
09-8 객체 다루기
- R.toPairs와 R.fromPairs 함수
- R.toPairs 함수는 객체의 속성들을 분해해 배열로 만듦
- R.fromPairs 함수는 [키:값] 형태의 아이템을 가진 배열을 다시 객체로 만듦
- R.keys와 R.values 함수
- R.keys 함수는 객체의 속성 이름만 추려서 string[] 타입 배열로 반환
- R.values 함수는 객체의 속성 값만 추려서 any[] 타입 배열로 반환
- R.zipObj 함수
- '키 배열(속성 이름 배열)'과 '값 배열(속성에 설정할 값 배열)'이라는 두 가지 매개변수를 결합해 객체로 만듦
- R.mergeLeft와 R.mergedRight 함수
- 두 개의 객체를 입력받아 두 객체의 속성들을 결합해 새로운 객체를 생성
- Left, Right로 나뉜 이유는 '객체 1'과 '객체 2'가 서로 같은 이름의 속성이 있고, 값이 다를 때 어느 쪽 객체의 것을 선택할지 구분하기 위함
- R.mergeLeft 함수는 왼쪽, 즉 '객체 1'의 값에 우선순위가 더 높음
- R.mergeRight 함수는 '객체 2'의 우선순위가 더 높음
- R.mergeDeepLeft와 R.mergeDeepRight 함수
- R.mergeLeft와 R.mergeRight 함수는 객체의 속성에 담긴 객체를 바꾸지는 못함
- R.mergeDeepLeft와 R.mergeDeepRight 함수는 경로(path)의 속성 값들도 바꿀 수 있음
09-9 배열 다루기
- R.prepend와 R.append 함수
- 기존 배열의 앞뒤에 새 아이템을 삽입한 새 배열을 만듦
- R.flatten 함수
- 복잡한 배열을 1차원의 평평한 배열로 바꿔줌
- R.unnest 함수
- R.flatten 함수보다 조금 정교하게 배열을 가공
- R.sort 함수
- 배열의 타입이 number[]인 경우 내림차순이나 오름차순으로 정렬
- R.sortBy 함수
- 특성 속성 값에 따라 정렬
- R.sortWith 함수
- R.sortBy 함수는 항상 오름차순으로만 정렬
- R.sortWith 함수는 R.ascned, R.descend 함수와 함께 사용되어 오름차순, 내림차순 정렬을 할 수 있음
09-10 조합 논리 이해하기
- 조합 논리학(combinatory logic)은 '조합자(combinator)'라는 특별한 형태의 고차 함수들을 결합해 새로운 조합자를 만들어 내는 것
- 이는 함수형 언어의 컴파일러를 만드는 데 필요한 이론을 검증하고 개발할 때 주로 사용
- 람다가 제공하는 조합자
조합자 이름 | 의미 | 람다 함수 이름 |
I | identity | R.identity |
K | constant | R.always |
T | thrush | R.applyTo |
W | duplication | R.unnest |
C | flip | R.flip |
S | substitution | R.ap |
- R.chain 함수
- 함수를 매개변수로 받아 동작하는 함수
- R.flip 함수
- 2차 고차 함수의 매개변수 순서를 서로 바꿔주는 역할
- R.identity 조합자
- 가장 단순한 조합자이지만, 조합자의 구조상 반드시 함수가 있어야 하는 곳에 위치할 때 그 위력을 발휘
- R.always 조합자
- 두 개의 고차 매개변수 중 첫 번째 것을 반환
- constant라는 의미에서 'K-조합자'라고 하는데, 이때 K는 독일어로 'Konstante(상수)'를 의미
- 두 개의 매개변수가 필요한 조합자에 마치 R.identity처럼 사용
- R.applyTo 조합자
- 값을 첫 번째 매개변수로, 그리고 이 값을 입력으로 하는 콜백 함수를 두 번째 매개변수로 받아 동작
- R.ap 조합자
- 콜백 함수들의 배열을 첫 번째 매개변수로, 배열을 두 번째 매개변수로 입력받는 2차 고차 함수
- 콜백 함수가 한 개일 때는 마치 R.map 함수처럼 동작
- 콜백 함수가 두 개일 때는 마치 R.chain(n => [n, n]) 형태로 동작
출처 : Do it! 타입스크립트 프로그래밍
728x90
'Do it! > 타입스크립트 TS' 카테고리의 다른 글
Do it! 타입스크립트 프로그래밍 - 제네릭 프로그래밍 (0) | 2021.01.30 |
---|---|
Do it! 타입스크립트 프로그래밍 - 함수 조합의 원리와 응용 (0) | 2021.01.26 |
Do it! 타입스크립트 프로그래밍 - Promise와 async/await 구문 (0) | 2021.01.26 |