55,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 함수형 프로그래밍과 JavaScript ES6+
다음 강좌에 대한 일정을 알고싶습니다.
삭제된 글입니다
- 미해결함수형 프로그래밍과 JavaScript ES6+
!(cur = iter.next()).done
안녕하세요 강좌 잘 보고 있습니다 강의에서 !(cur = iter.next()).done; (res.push(a),res).length; 같은 부분의 용법이 정확히 어떻게 되는건가요? 리턴값이 어떻게 나오고 사용법이 어떻게 되는지는 알겠지만 저런 문법을 한번도 본적이 없어서 질문드립니다
- 미해결함수형 프로그래밍과 JavaScript ES6+
fx.js 파일
혹시 const go, pipe 등... 함수들 묶어둔 fx.js 파일을 볼 수 있는 깃 주소가 있으실까요?
- 미해결함수형 프로그래밍과 JavaScript ES6+
a.then()을 return 하는 이유가 뭐고 어떻게 동작하는 건가요?
5:18 쯤에 return a.then()을 작성하시는데 여기서 a.then을 왜 return 하는지 모르겠어요. if (a instanceof Promise) { a.then(a => { res.push(a); if (res.length == l) return res; } } else { res.push(a); if (res.length == l) return res; } 그냥 이렇게 작성하면 안 되는 건가요? 그 뒤에 재귀함수로 작성하기 위해서 그런 건가요? 그리고 재귀함수에서 동작이 이해가 안 가는 게 있는데 재귀함수 recur() 안에서 return a.then()을 하면 결국 Promise를 반환하는 거니깐 거기서 재귀가 끝나게 되는 거 아닌가요? a.then() 안에서 recur()를 호출한다 하더라도 처음에 실행했던 recur()와는 별개로 동작하는 것처럼 보이는데 실행 흐름이 어떻게 되는지 궁금합니다. 제 생각에는 만약 take에 넘어오는 이터러블이 [Promise.resolve(1), Promise.resolve(2), Promise.resolve(3)]이고, take(2)를 했을 때, 재귀를 다 돌고 최종적으로 return 되는 값이 Promise.resolve(1).then(() => Promise.resolve(2).then(() => [1, 2])) 이런 식으로 될 것 같은데 이게 맞나요?
- 미해결함수형 프로그래밍과 JavaScript ES6+
reduce((a, f) => f(a), args)
go 함수를 만들면서 reduce를 사용하는 것은 이해했는데 reduce((a, f) => f(a), args)에서 (a, f) => f(a)로 어떻게 추상화했는지 이해가 되지 않습니다.왜 매개변수로 a와 함수를 넘기는 걸까요?이해가 될듯 하면서도 다시 봐도 모르겠네요.
- 미해결함수형 프로그래밍과 JavaScript ES6+
유명함수 recur에서 go1로 변경되는 부분 문의
유명함수 recur에서 go1로 변화된 부분이 이해가 안 가는데요. 동작이 어떻게 되는지가 정확히 이해가 안가서요. function recur(acc) { ... }(acc); 에서 뒤에 (acc)가 go1로 갈 때 없어진 이유가 뭔지 이해를 못 했습니다. go1의 첫번째 인자 acc가 function recur의 인수로 들어가는데, 뒤에 있던 (acc)가 왜 없어져야 하는지가 제대로 이해를 못 해서 설명 부탁드립니다. function recur(acc) { ... return acc;}(acc); 에서 go1(acc, function recur(acc) { ... return acc;});
- 미해결함수형 프로그래밍과 JavaScript ES6+
take 내부의 이터레이터 클로저에 대해
while (!(cur = iter.next()).done) { let a = cur.value; 를 for (const a of iter) { 로 바꾸면 비동기상황에서 iter를 기억하지 못해서 하나만 take하게 되더라구요. 두 문법이 같은 걸로 알고있는데 for of 내부의 이터레이터는 클로저로 사용될수없나요? 이런경우엔 while밖에 쓸수없는건가요? 클로저로 사용되려면 함수내부에서 표현식 안에 갖혀있어야된다는 조건? 같은게 있나요?
- 미해결함수형 프로그래밍과 JavaScript ES6+
왜 recur함수를 즉시 실행시켜야 하나요?
recur 함수 안에서 재귀를 이미 부르고 있는데 recur 맨 뒤 () 가 필요한 정확한 이유가 무엇일까요? const take = curry((l, iter) => { let res = []; iter = iter[Symbol.iterator](); return function recur () { let cur; while (!(cur = iter.next()).done) { const a = cur.value; if (a instanceof Promise) { return a .then(a => (res.push(a), res).length == l ? res : recur()) .catch(e => e == nop ? recur() : Promise.reject(e)); } res.push(a); if (res.length == l) return res; } return res; }(); });
- 미해결함수형 프로그래밍과 JavaScript ES6+
L.deepFlat function
L.deepFlat function expression 에서 *f 가 제네레이터 함수이름도 아니고 어떻게 작동하는지 잘 이해가 안갑니다.
- 해결됨함수형 프로그래밍과 JavaScript ES6+
map , filter , reduce 등의 함수를 정의할때 매개변수 순서가 이전하고 상이한것 같습니다.
이전 강좌였던 "자바스크립트로 알아보는 함수형 프로그래밍" 에서 사용되는 라이브러리와 underscode , lodash 에서는f( 리스트 , 함수 ) 이렇게 정의했었는데 ,이번강의에서는 f(함수 , 리스트) 이렇게 정의하고 있어서어떤의미로 순서가 바뀌었는지 알고 싶습니다.감사합니다.
- 미해결함수형 프로그래밍과 JavaScript ES6+
Devtool 질문
강의에서 쓰시는 code tool들이 궁금합니다. 콘솔 창이 바로 옆에 있는 것도 편리해 보이네요! 더불어 console.log 대신 log 만 써도 되는건 확장 프로그램 때문인가요?
- 미해결함수형 프로그래밍과 JavaScript ES6+
코드 질문드립니다.
const join = curry((sep = ',', iter) => reduce((a, b) => `${a}${sep}${b}`, iter)); sep = ',' 이부분에 왜 =',' 가 작성되는것인가요? 저 코드가 어떻게 동작하는지 이해가 잘 가지않습니다. =','가 없을때도 똑같이 동작하는데 그렇다면 없어도 되는것일까요? 제가 코딩공부를 시작한지 얼마되지않아서 이것저것 질문을 많이 남기네요 ㅎㅎ..
- 미해결함수형 프로그래밍과 JavaScript ES6+
products가 사라지는 부분
다른분이 질문한것에서 저도 의문이 생겼는데 답변을 봐도 이해가 잘되지않습니다. curry함수에 의해서 products =>filter(p=>p.price <20000, products)가 products ⇒ filter(p⇒p.price <2000)(products)로 변화되고 filter(p⇒p.price <2000) 이렇게 축약되었을때 어떻게 같게 작동하는지 모르겠습니다. a => f(a) 라는 함수는 그냥 f와 하는일이 같다는 말이 이해가 잘안됩니다. 조금만 더 풀어서 설명부탁드립니다.
- 함수형 프로그래밍과 JavaScript ES6+
5분 34초부분 질문입니다.
삭제된 글입니다
- 함수형 프로그래밍과 JavaScript ES6+
비전공자 학생 강의, 공부방법 질문드립니다.
삭제된 글입니다
- 함수형 프로그래밍과 JavaScript ES6+
리스트가아닌 오브젝트 데이터는 어떻게 처리하여야 하나요?
삭제된 글입니다
- 미해결함수형 프로그래밍과 JavaScript ES6+
Javascript array method에 대한 질문입니다.
수업을 통해서 자바스크립트 함수형 프로그래밍을 배우고 나서 Array를 다룰 일이 생길 경우에는 거의 항상 함수형으로 map, forEach, filter 등을 사용하고 있는데요. D3에서 데이터 처리를 하는 부분 코드를 작성하다가 제가 이해한 것을 바탕으로 예상한 것과 다르게 작동하는 부분이 있어서 여쭤보려고 합니다. dataSet = await d3.json("./USAir97.json").then(data => { let columnsWithNumbers = ["id", "latitude", "longitude", "x", "y"]; data.nodes.map(row => { // external effect happens.. why? columnsWithNumbers.forEach(c => { row[c] = +row[c]; }); return row; }); return data; }); 불러오는 json파일의 경우는 { "nodes": [ { id: 1, "latitude": "123123", "longitude": "123123"}, ...], "links": [ ...]} 이런 형식이고요. 그런데 여기에서 return row; 부분을 생략해도 dataSet에 저장되는 데이터가 string으로 되어 있는 columnsWithNumbers에 해당하는 값들이 숫자로 바뀌어있더라고요. 함수형 프로그래밍에 대해서 배운 대로라면 map 함수에서 row를 가지고 와서 row에 어떤 일을 하더라도 그 row를 리턴해주지 않으면 row의 갯수만큼의 undefined가 들어있는 Array가 리턴이 되어야할 것 같은데 이 경우는 그렇지 않아서 이상하게 느껴집니다. 게다가 또 한 가지 이상한 점은 map 함수는 data.nodes에 대해서 호출하였는데 이것을 return하는 것이 아니라 data를 return 했는데 data.nodes에 대해서 호출한 map함수의 연산 결과가 data에 반영이 되어 있는 것입니다. data.nodes 함수를 리턴하고 싶어도 d3.json 함수의 특성인 건지 다른 걸 리턴하면 값이 깨지는 게 생기더라고요. 작동이 안 되는 것보다는 잘 되고 있는 건 다행이겠습니다만 이런 식으로 제가 생각했던 것과는 다른 식으로 작동하는 것에 대해서 어떻게 이해해야할까요? 그리고 함수형 프로그래밍 코드를 짜려고 하다보니 for-loop은 코드에서 전혀 사용하지 않게 되고, 그러다보니 왠지 괜히 forEach도 쓰기가 꺼려지는데 좋은 방향인 것인지 궁금합니다. 위의 코드처럼 전체 데이터에서 일부분에 해당하는 키들을 가져와서 그것에 대해서만 부분적으로 row에서 처리를 해줄 때 위처럼 Array에 해당하는 키값들을 저장하고 이에 대해서 forEach를 호출하는 식으로 많이 처리했는데요. 혹시 함수형 프로그래밍의 관점에서 더 깔끔하게 짤 수 있는 방법이 있을까요? 질문이 많은 것 같은데, 마지막으로 혹시 3편 강의는 언제쯤 올라오는지도 궁금합니다. 감사합니다.
- 미해결함수형 프로그래밍과 JavaScript ES6+
async/await를 이용할 수는 없나요?
L.reduce를 async함수로 리팩토링하려고 하고 있습니다. 다음은 제가 구현한 코드입니다. L.filter = L.curry(function* (f, iterable) { // for (const e of iterable) if (f(e)) yield e; for (const e of iterable) { const result = L.branch(e, f); if (result instanceof Promise) yield result.then((val) => val ? e : Promise.reject(L.nop)); else if (result) yield e; } }); L.reduce = L.curry(async (f, acc, iter) => { if (!iter) { iter = acc[Symbol.iterator](); acc = await iter.next().value; } for (const e of iter) { try { acc = await f(acc, await e); } catch (err) { if (err === L.nop) acc = await f(acc, e); if (err !== L.nop) return Promise.reject(err); } } return acc; }) 위 코드를 이용해 영상의 예제를 다음과 같이 실행하면 결과가 다음과 같이 나옵니다. const L = require("./myUtils.js"); L.go( [Promise.resolve(1), Promise.resolve(2), Promise.resolve(3), Promise.resolve(4), Promise.resolve(5), Promise.resolve(6)], L.filter(val => !(val % 2)), L.reduce((acc, val) => acc + val), console.log ).catch(console.log); // 출력 : 2[object Promise]4[object Promise]6 어떻게 수정하면 좋을까요..?
- 미해결함수형 프로그래밍과 JavaScript ES6+
Go Function은 항상 구현하여 사용해야하는 함수인가요?
go Function은 Iterator 객체나 특정 객체에 Prototype에 전혀 들어가지 않고 항상 따로 구현해야하는 함수인가요?
- 해결됨함수형 프로그래밍과 JavaScript ES6+
파이어폭스에서는 L.range가 더 느리게 나오는데 혹시 그 이유가 있을까요?
왼쪽이 파이어폭스, 오른쪽이 크롬입니다.