728x90

09 람다 라이브러리

09-1 람다 라이브러리 소개

  • composepipe를 사용하는 함수 조합을 쉽게 할 수 있게 설계된 오픈소스 자바스크립트 라이브러리
    • 타입스크립트 언어와 100% 호환
    • composepipe 함수 제공
    • 자동 커리(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개 함수

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.mapindex 매개변수를 기본으로 제공하지 않음
    • R.addIndex 함수를 사용해 R.mapindex를 제공하는 새로운 함수를 만들어야 함
  • 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) 기능만을 람다 함수로 구현한 것
      1. R.lens 함수로 객체의 특정 속성에 대한 렌즈를 만든다
      2. 렌즈를 R.view 함수에 적용해 속성 값을 얻는다
      3. 렌즈를 R.set 함수에 적용해 속성 값이 바뀐 새로운 객체를 얻는다
      4. 렌즈와 속성 값을 바꾸는 함수를 R.over 함수에 적용해 값이 바뀐 새로운 객체를 얻는다
  • R.propR.assoc 함수
    • R.prop는 객체의 특정 속성 값을 가져오는 함수로서, 이런 동작을 하는 함수를 게터(getter)라고 함
    • 객체의 특정 속성 값을 변경하려면 R.assoc를 사용하는데, 이런 목적으로 사용하는 함수를 세터(setter)라고 함
  • R.lensPath 함수
    • 람다 라이브러리에서는 객체의 이런 중첩 속성(nested property)을 '경로(path)'라고 함
    • 긴 경로의 속성을 렌즈로 만들 때 R.lensPath 함수를 사용

09-8 객체 다루기

  • R.toPairsR.fromPairs 함수
    • R.toPairs 함수는 객체의 속성들을 분해해 배열로 만듦
    • R.fromPairs 함수는 [키:값] 형태의 아이템을 가진 배열을 다시 객체로 만듦
  • R.keysR.values 함수
    • R.keys 함수는 객체의 속성 이름만 추려서 string[] 타입 배열로 반환
    • R.values 함수는 객체의 속성 값만 추려서 any[] 타입 배열로 반환
  • R.zipObj 함수
    • '키 배열(속성 이름 배열)'과 '값 배열(속성에 설정할 값 배열)'이라는 두 가지 매개변수를 결합해 객체로 만듦
  • R.mergeLeftR.mergedRight 함수
    • 두 개의 객체를 입력받아 두 객체의 속성들을 결합해 새로운 객체를 생성
    • Left, Right로 나뉜 이유는 '객체 1'과 '객체 2'가 서로 같은 이름의 속성이 있고, 값이 다를 때 어느 쪽 객체의 것을 선택할지 구분하기 위함
      • R.mergeLeft 함수는 왼쪽, 즉 '객체 1'의 값에 우선순위가 더 높음
      • R.mergeRight 함수는 '객체 2'의 우선순위가 더 높음
  • R.mergeDeepLeftR.mergeDeepRight 함수
    • R.mergeLeftR.mergeRight 함수는 객체의 속성에 담긴 객체를 바꾸지는 못함
    • R.mergeDeepLeftR.mergeDeepRight 함수는 경로(path)의 속성 값들도 바꿀 수 있음

09-9 배열 다루기

  • R.prependR.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! 타입스크립트 프로그래밍
 

Do it! 타입스크립트 프로그래밍

‘타입스크립트’를 배우는 김에 ‘함수형 프로그래밍’까지 정주행하자!10만 건의 빅데이터 처리와 API 서버 & 리액트 웹 개발까지!이 책은 ES6 자바스크립트를 경험한 독자가 타입스크립트를

book.naver.com

728x90