본문 바로가기

자바스크립트

[ES6+: 응용] 프론트엔드에서 활용하기 (2) [ES6+: 응용] 프런트엔드에서 활용하기 (1) : https://opentogether.tistory.com/82 [ES6+: 응용] 프론트엔드에서 활용하기 (1) #1 프론트엔드에서 함수형/이터러블/동시성 프로그래밍 ES6 템플릿 리터럴 활용 이후에 템플릿 리터럴을 통해 프로그래밍을 해볼 것인데, 템플릿 리터럴의 사용법은 아래와 같다. const a = 10; const b = 5; con.. opentogether.tistory.com 클래스 대신 함수로 하는 추상화 앞 챕터에서 배웠던 코드는 중복이 많았는데, 이를 줄여나가는 추상화를 시켜보자. 먼저, Ui.message를 "확인, 취소"창뿐 아니라, "경고"창도 코드 하나로 구현되게끔 해주자. const Ui = {}; Ui.message = .. 더보기
[ES6+: 응용] 프론트엔드에서 활용하기 (1) #1 프론트엔드에서 함수형/이터러블/동시성 프로그래밍 ES6 템플릿 리터럴 활용 이후에 템플릿 리터럴을 통해 프로그래밍을 해볼 것인데, 템플릿 리터럴의 사용법은 아래와 같다. const a = 10; const b = 5; console.log(`${a} + ${b} = ${a + b}`); // 10 + 5 = 15 이미지 목록 그리기 실습할 CSS 코드 더보기 실습할 JSON 데이터 더보기 [ { name: "HEART", url: "https://s3.marpple.co/files/m2/t3/colored_images/45_1115570_1162087.png" }, { name: "하트", url: "https://s3.marpple.co/f1/2019/1/1235206_1548918825999_7.. 더보기
[ES6+: 응용] map과 filter로 하는 안전한 함수 합성 #1 안전한 함수 합성 map으로 합성하기 다음과 같은 합성함수를 선언했다. const f = x => x + 10; const g = x => x - 5; const fg = x => f(g(x)); 위와 같이 함수를 선언했을 때, 아래와 같이 인자값 없이 값을 실행하면 'NaN'으로 에러가 난다. console.log(fg(10)); // 15 console.log(fg()); // NaN - 에러가 난다. 잘못된 값이 들어왔을때, 아무 동작도 하지 않게끔 하려면 어떻게 해야될까? 바로 모나드와 map함수를 통해 안전한 합성을 이룰 수 있다. 위와 똑같은 동작을 하는 함수를 go 함수를 통해 나타내보자. _.go( 10, fg, console.log); // 15 이제, 이것을 안전한 함수 합성을 위.. 더보기
[ES6+: 응용] reduce함수를 통해보는 명령형 습관을 지우기 #1 reduce함수는 만능이 아니다 "reduce" 한개를 쓰는 것 보다 "map + filter + reduce" 를 함께 쓰자 기존 명령형 습관들 때문에, reduce를 오용하는 경우가 자주 있다. const users = [ { name: 'AA', age: 35}, { name: 'BB', age: 26}, { name: 'CC', age: 28}, { name: 'DD', age: 34}, { name: 'EE', age: 23}, ] 위와 같은 users 데이터가 있다. 이를 합산하는 코드를 reduce통해 짜볼 것이다. console.log(_.reduce((total, u) => total + u.age, 0, users)); // 146 위를 보면 total과 u.age라는 서로 다른 .. 더보기
[JS: ES6+] 제너레이터/이터레이터 프로토콜로 구현하는 지연 평가 (1) #1 range와 느긋한 L.range 지연 평가의 정의 컴퓨터 프로그래밍에서 느긋한 계산법(Lazy evaluation)은 계산의 결과 값이 필요할 때까지 계산을 늦추는 기법이다. 지연 평가는 필요 할 때까지 계산을 늦추면서 불필요한 계산을 줄일 수 있다. 이러한 지연 평가는 3가지 이점을 가지고 있다. 불필요한 계산을 하지 않으므로 빠른 계산이 가능하다. 무한 자료 구조를 사용 할 수 있다. 복잡한 수식에서 오류 상태를 피할 수 있다. 그럼 이제부터 일반적인 평가와 지연평가를 비교해보록 하자. range 와 L.range 비교 숫자하나를 받고 그 숫자의 크기만한 배열을 리턴 후에 그 값들을 더하는 range함수를 선언해볼 것이다. const add = (a, b) => a + b; const rang.. 더보기
[JS: ES6+] 장바구니 예제로 코드를 줄이고 HTML로 표현해보기 #1 go, pipe, curry를 활용한 코드 줄이기 실습 장바구니 예제 실습 앞에서 배웠던 [go, pipe, curry: https://opentogether.tistory.com/70?category=807380]를 기반으로 코드를 줄여보는 것을 한번 더 해볼것이다. /*외부 파일: fx.js*/ const go = (...args) => args.reduce((a, f) => { return f(a); }); const pipe = (...funcs) => arg => funcs.reduce((a, f) => f(a), arg); const curry = f => (a, ..._) => _.length ? f(a, ..._) : (..._) => f(a, ..._); const map = cur.. 더보기
[JS: ES6+] 이터러블 프로토콜을 따른 map, filter, reduce #1 map 이터러블 프로토콜을 따른 map 간단하게 먼저, map 함수는 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환합니다. var array1 = [1, 4, 9, 16]; // pass a function to map const map1 = array1.map(x => x * 2); console.log(map1); // expected output: Array [2, 8, 18, 32] 이제, 이터러블 프로토콜을 따른 map함수를 알아볼건데요, 먼저 map을 사용하지 않은 예제를 봅시다. const products = [ { name: '반팔티', price: 15000 }, { name: '긴팔티', price: 20000 }, { name: '후드티.. 더보기
[JS: ES6+] 제너레이터와 이터레이터 #1 제너레이터와 이터레이터 제너레이터 함수란? ES6에서 도입된 제너레이터(Generator) 함수는 이터러블을 생성하는 함수이다. 제너레이터 함수를 사용하면 이터레이션 프로토콜을 준수해 이터러블을 생성하는 방식보다 간편하게 이터러블을 구현할 수 있다. 또한 제너레이터 함수는 비동기 처리에 유용하게 사용된다. function* gen() { yield 1; yield 2; yield 3; } const genIter = gen(); console.log(genIter.next()); // {value:1, done: flase} console.log(genIter.next()); // {value:2, done: flase} console.log(genIter.next()); // {value:3, d.. 더보기