JS

함수형 프로그래밍 2탄

영프로95 2022. 7. 15. 02:52

함수형 프로그래밍 1탄

 

함수형 프로그래밍

순수함수 1. 최대한 지역변수만을 사용해 구현하기 2. 인수로 넘기는 값의 본체까지 수정하지 않기. 3. 매개변수로 넘기는 값이 객체라면 원본 객체에 변이를 일으키지 않기. ( 깊게 복사후 변이

youngpro95.tistory.com

커링

커링

어떤 함수의 예상되는 여러 개의 매개변수보다 적은 수의 매개변수를 받아서 매개변수가 완전히 채워지지 않은 함수가 실행되지 않고 넘겨지다가 모든 매개변수가 채워지면 그때서야 실행되는 기법

const sum = ( a, b) =>{ return a + b }
sum(10,20) //30

//커링, 다중인수를 갖는 함수를 단일 인수를 갖는 함수열로 전환
const sum = (a) => (b) => { return a + b }
sum(10)(20) //30

커링이 적용된 함수

이렇게 씀으로서 함수의 재사용성을 높일 수 있고 타인이 작성한 함수를 수정하지 않고 사용할때 유용하다.

+0716 수정내용
ex) 홈페이지 가입시에 전화번호 입력 같은곳에 010을 미리 바인딩 시켜놓고 써볼수 있을것 같다.

const phoneNum = (first) => (second) => (third) => {
  console.log("전화번호는 : " + first + "-" + second + "-" + third);
};

let firstPhone = phoneNum("010")
console.log(firstPhone(1234)(5678))  // 전화번호는 : 010-1234-5678

 

함수합성

함수 합성은 함수들을 조합하여 새로운 함수를 만드는 것이다. 

const add5 = (num) => num+5;
const mul5 = (num) => num*5;

const add5AndMul5 = (num) => mul5(add5(num));

const pipe = require("ramda").pipe; //ramda 라이브러리 사용
const testAdd5Mul5 = pipe(add5, mul5) 

console.log(add5AndMul5(5)); //50
console.log(testAdd5Mul5(5,5)); //50

함수 합성한 모습

다만 갑자기 6을더한후 5의제곱을 곱하고싶으면 기존 함수를 활용하여 만들수 있다.

const add5 = (num) => num+5; //기존 선언된 함수
const square = (num) => num*num;

const add5andSqaure = (num) => sqaure(add5(num)); //add5를 재활용하는 모습
const add5andSquarePipe = pipe(add5, square) // ramda의 pipe를 이용한 모습

console.log(add5andSqaure(5)); // 100
console.log(add5andSquarePipe(5,5)); // 100

위와 같이 코드를 재활용하여 쓸수 있다.

 

+수정내용

좀더 가시적으로 표현할수있는 Ramda라이브러리를 사용하여 만들어보자.

 

 

이어서 3편에 모나드와 클로저 기술하겠습니다

'JS' 카테고리의 다른 글

뉴스 API를 이용하여 뉴스 검색기 만들기 (1)  (4) 2022.08.04
함수형 프로그래밍 3탄  (0) 2022.07.19
함수 표현식과 선언식  (0) 2022.07.15
IIFE  (0) 2022.07.13
함수형 프로그래밍 1탄  (0) 2022.07.07