GithubHelp home page GithubHelp logo

functionales's Introduction

FunctionalES

ES6+, 함수형 프로그래밍, 비동기, 동시성 프로그래밍

소스코드 보기

목차

  1. 들어가며
    • ES6, 함수형 프로그래밍, 비동기/동시성 프로그래밍
    • ES6+
    • 함수형 프로그래밍
    • 비동기/동시성 프로그래밍
  2. 타입과 값
    • 7가지 내장 타입으로 바라보기
    • 자바스크립트에서의 객체
    • JSON 데이터 타입
    • Iterable, Iterator
    • Symbol.iterator
    • Promise
  3. 함수형 프로그래밍 관점에서 바라본 자바스크립트의 값
    • 자바스크립트에서의 함수형 프로그래밍을 위한 타입과 값
    • JSON 데이터 타입
    • undefined
    • 열거 가능한 값, 컬렉션
    • 컬렉션 순회
    • 불변성
    • 함수와 화살표 함수
    • Promise
  4. 컬렉션 중심 프로그래밍
    • 컬렉션
    • 3개의 대표 함수 map, reduce, findVal
    • map 함수
    • reduce 함수
    • findVal 함수
  5. 코드를 컬렉션으로 다루기
    • pipe, go
    • match
    • 함수를 값으로 다루면서 원하는 시점에 평가하기
    • or, and
  6. 비동기, 동시성, 병렬성 프로그래밍
    • 들어가기 앞서 Promise, async/await에 대해
    • Promise는 콜백 지옥을 해결한 것일까?
    • promise.then(f)의 규칙
    • Promise 체인
    • then :: Promise p => (a -> b | p b) -> a | p a -> b | p b
    • then에 커링 적용하기
    • 파이프라인
    • 이미지 동시에 모두 불러온 후 DOM에 반영하기
    • mapC와 limit
    • 쇼트트랙 계주 - 순서대로 실행하기
    • 동시적으로 혹은 순차적으로
    • async/await는 은총알인가?
    • 병렬적으로 동작할 수 없는 async/await
    • 더 많은 함수들
  7. 예외 처리
    • ES6+의 3가지 예외
    • pipe().nullable()
    • pipe().error()
    • pipe().exception() ()
    • 여러가지 달기
    • pipe().error().complete()
    • 다른 컬렉션 조작 함수들과의 조합
    • 비동기를 지원하지 않는 함수에서 발생한 예외 처리 실패
    • 동기/비동기를 함께 지원하는 함수의 필요성
    • 정리
  • 부록. 클래스 없이 코딩하기

    • 나머지 매개변수와 전개 연산자, 그리고 부분 적용
    • 장바구니
    • 정리
  • 부록. 깊은 값 조회

    • 복잡한 값을 조회할 때 중간에 nullable을 만나도 에러 피하기
    • key를 알 수 없을 때, {} # function object로 조회하기
  • [부록. 메모이제이션]

    • 예정
  • [부록. 튜플]

    • 예정
  • [부록. 템플릿 리터럴]

    • 예정
  • [...]

    • 예정
  • [...]

    • 예정
  • 부록. 질문 답변

    • 이슈에 올라오거나 개인적으로 오는 질문 계속 추가할 예정입니다.
  • API

    • 진행 중

functionales's People

Contributors

indongyoo avatar jwooss avatar kanziw avatar simsim0709 avatar ysm-dev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

functionales's Issues

빠진 부분이 있는 것 같은데 확인 부탁드립니다.

좋은 강의 감사합니다.

컨커런시 부분에서 아래 내용 중

병렬적으로 동작할 수 없는 async/await

async/await는 병렬적으로 일어나는 일을 처리하지 못합니다. 하나씩 순차적으로 기다리는 경우에만 사용할 수 있습니다. 동시성 프로그래밍을 하기 위해서는 헬퍼 함수가 반드시 필요합니다.

// 동시에 users와 posts 출발
const res1 = awiat concurrency({
  users: _=> query(...),
  posts: _=> query(...)
});
//{
//  users: [row, row, row, ...]
//  posts: [row, row, row, ...]
//}

// await를 만날 때마다 하나씩 출발
const res2 = {
  users: await query(...),
  posts: await query(...)
}
//{
//  users: [row, row, row, ...]
//  posts: [row, row, row, ...]
//}

두 번째 코드 중

const res2 = 무엇 {
// ...
}

저 무엇에 해당하는 series 나 concurrency 같은 함수가 있어야 하는 것 같습니다.

Generator에서 for-in 사용시 hasOwnProperty 필요 여부

안녕하세요, 인동님.

너무나 좋은 글, 감사히 읽고 있습니다.

글을 보다가 궁금한 점이 생겨서 질문을 드리고 싶습니다


링크 1에 나오는 아래 코드에 대한 질문입니다.

function *valuesIter(obj) {
  for (const key in obj) yield obj[key];
}
const users = {
  5: { id: 5, name: 'YB' },
  19: { id: 19, name: 'BX' },
  27: { id: 27, name: 'MD' }
};
for (const val of valuesIter(users)) log(val.name);
// YB
// BX
// MD

링크 2에도 유사한 코드가 있습니다

Object.assign(ObjIter, {
  values: ObjIter(function *(coll) {
    if (!coll) return;
    for (const key in coll) yield coll[key];
  }),
  entries: ObjIter(function *(coll) {
    if (!coll) return;
    for (const key in coll) yield [key, coll[key]];
  })
});

Generator 내부에서 for-in을 사용하고 있는데, hasOwnProperty에 대한 체크는 필요하지 않은지 여쭙고 싶습니다.


함수형에 관하여 좋은 콘텐츠들을 거듭 제공해주셔서, 늘 감사드립니다!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.