[TIL] W2/ Day4~5

alang·2021년 8월 15일
0

TIL

목록 보기
7/10
post-thumbnail

새롭게 배운내용


Promise가 콜백함수와 다른점

  • 비동기 상황을 일급 값으로 다룬다
  • 대기 , 성공, 실패의 상황을 다룬다

then

  • Promise 객체의 then은 Promise로부터 전달 받은 값을 인자함수에게 인자로 전달한다. 그리고 이는 또 다시 새로운 Promise를 반환한다.
  • 중요한 규칙 : then()을 통해 결과를 꺼낸 값은 Promise가 아니다!! (반환되는값은 Promise)
const a =Promise.resolve(
  Promise.resolve(
    Promise.resolve(1)
  )
).then(log); // 1
console.log(a) // Promise {}+

함수형 프로그래밍

모나드

참조

  • 어떠한 값들이 들어올지 모르는 상황에서의 함수 합성을 어떻게 해야할지, 할 때 해결해줄수 있는 녀석
  • 함수 내부에서 발생할 수 있는 사이드이펙트와 결과 집합을 모두 포함하는 타입
  • Promise객체는 비동기적으로 일어나는 상황을 안전하게 합성시켜주는 모나드이다

Kleisli Composition

오류가 있을 수 있는 상황에서의 함수 합성을 안전하게 해주는 규칙

f.g
f(g(x)) = f(g(x)) 

// 만약 g(x)에서 의도치않은 값(에러)가 출력된다면??
// f(g(x))도 동일한 값을 출력하게 해주는 형태
f(g(x)) = g(x)

지연된 함수열의 병렬적 평가

  • [...iter] 을 통해 한번의 iter,의 모든 요소의 평가를 요청하게 되어 병렬적으로 함수실행이 가능해진다.

Promise객체의 catch활용

let a = Promise.reject("hi").catch(a=>a) // a 변수에 저장된 Promise는
//에려처리상황까지 저장되버린 상태이다.
// catch()는 중복해서 넣을수없음으로 (앞의 catch()함수에서 값을 먹어버리기때문에)
// 이후에 a.catch(a=>console.log(a)) 와 같이 명령해도
// console.log 되지 않는다.
// 그러므로 변수에 할당시에는 catch없이 할당후
// 이후 필요할떄 a.catch(a=>console.log(a)) 이런식으로 원하는 위치에서 사용하자

오늘 깨달은 것


과제를 수행하며 함수형 프로그래밍에 대해 느낀점이 있다.

  1. 프로그래밍을 하기전에 입력 할 값들을 미리 생각해두자.
  • 함수형 프로그래밍의 큰 특징으론 사이드이펙트가 없는것입니다. 또한 상태값을 저장하지 않습니다. 이를 구현하기 위해선 함수내에 인자가 전달되면 출력이 될때까지는 다른 값의 개입을 최소화해야합니다. 그러다 보니 로직을 짤때 처음 입력되는 값을 판단하는게 중요하다는 생각이 듭니다.
  1. 다양한 종류의 입력값이 있을땐 객체로 묶어서 입력하자.
  • 저는 문제를 풀면서 다양한 종류의 입력값을 배열로 묶어서 입력하거나 반환했습니다. 그러다보니 이후 함수에서 값을 받아 처리할때 각 종류별 Index를 일일이 확인해가면서 함수를 짜는게 번거롭고, 의도치않은 입력값이 생기는 경우가 많더라구요. 그래서 여러 종류의 입력값이 있을땐 배열보단 객체로 저장해서 key로 접근하는게 이후에 값들을 다루는게 편하다는 생각이 듭니다.

사실 아직도 함수형 프로그래밍을 잘 모르겠다. 전보단 알것같은 느낌이 들지만 말그대로 느낌일뿐, 이해했다고는 할 수 없을것같다. 다만, 정말 정말 매력적인 프로그래밍 패러다임임에는 분명하다.

profile
안녕하세요. 개발자 지망생입니다.

0개의 댓글