55,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결함수형 프로그래밍과 JavaScript ES6+
질문 있습니다
강의 내용 바탕으로 프로그래머스 알고리즘 시간 측정 테스트를 해보고 있는데첫 번째가 직접 구현된 reduce를 이용한 결과고 두번째가 일반 내장 메소드를 이용한 결과입니다.이것만 봤을 때는 내장 메소드를 썼을 때가 시간이 더 빨리 측정이 되는데이러한 경우에는 지연 평가를 이용한 것이 의미가 있는지 궁금합니다.브레이브 브라우저에서 직접 구현된 filter, 내장 메소드 filter, 지연 평가를 이용한 filter 순으로 각각 몇 차례 테스트를 해보았는데요. 우선은 이것만 봐서는 내장 메소드가 월등히 우수한 것으로 보입니다.[1,2,3,4,5]라는 간단한 배열을 이용해서 그런건가요? 만약에 평가될 항목이 많다고 가정하면 그 때는 지연 평가가 더 우수한건지 궁금합니다.
- 미해결함수형 프로그래밍과 JavaScript ES6+
L.range에 대해서 질문 있습니다.
const L = {} 를 []로 바꿔도 딱히 오류가 나지는 않는데우선 이렇게 L 변수를 만드신 이유가 궁금하고range 앞에 L. 이렇게 붙인 건 어떤 역할을 하는지 모르겠습니다..
- 미해결함수형 프로그래밍과 JavaScript ES6+
6분 27초 부분에서 질문드립니다.
그럼 go 함수 정의에 따라서 products가다음 인자인 filter(p=>p.price<20000)의 p로 들어가게 되는건가요?
- 미해결함수형 프로그래밍과 JavaScript ES6+
일급함수 방식 중 이터레이터 쓰는 곳에서 조금 헷갈리는 부분이 있어 질문 드립니다
let list=[1,2,3,4]let a=list[Symbol.iterator]()a.next()라고 하면 문제없이 실행되는데let list=[1,2,3,4]let a=list[Symbol.iterator]a().next()라고 하면 왜 에러가 날까요 anonymous 에러면 브라우저에서 인식하는 방식이나 이런 문제일까요 아 혹시 얕은 복사 문제일까요?VM2199:1 Uncaught TypeError: Cannot convert undefined or null to object at <anonymous>:1:1
- 미해결함수형 프로그래밍과 JavaScript ES6+
import 오류
안녕하세요 강사님강의 수강 중에 fx.js로 따로 리팩토링 하신대로 하고 있는데 경로가 잘못된건지 이런 오류가 나네요... 아무리 봐도 경로문제는 아닌 거 같은데 뭐가 문젠지 모르겠습니다 ㅠㅜㅜ
- 미해결함수형 프로그래밍과 JavaScript ES6+
reduceF 함수 내부 acc에 대하여
const check = (acc, f) => (acc instanceof Promise ? acc.then(f) : f(acc)); const reduceF = (acc, a, f) => a instanceof Promise ? a.then((a) => f(acc, a)) : f(acc, a); const reduce = curry((f, acc, iter) => { if (!iter) { iter = acc[Symbol.iterator](); acc = iter.next().value; } return check(acc, function recur(acc) { let cur; while (!(cur = iter.next()).done) { // acc = reduceF(acc, cur.value, f); const item = cur.value; acc = item instanceof Promise ? item.then((a) => f(acc, a)) : f(acc, item); if (acc instanceof Promise) { return acc.then(recur); } } return acc; }); }); 안녕하세요, 강의 잘 보고 있습니다. 위 코드와 같이 reduce 함수 recur 내부에서 acc = reduceF(acc, cur.value, f); 에서 reduceF 함수에서 acc과 acc = item instanceof Promise ? item.then((a) => f(acc, a)) : f(acc, item); 에서 item.then 내부에서 acc이 다르게 동작하는 것 같은데 이유를 알 수 있을까요? reduceF에서 acc은 Promise가 아니지만, item.then 내부에서 acc은 pending으로 작동합니다.
- 미해결함수형 프로그래밍과 JavaScript ES6+
Concurrency 를 사용하면 Lazy를 못하는게 아닌가 싶어요
안녕하세요, 강의를 잘 보고 있었습니다. 이전에, Lazy하게 제너레이터와 yield를 활용하여 모든 데이터를 순회하지 않고 필요한 데이터만 꺼내올 수 있도록 지연평가를 하였는데, 이번에 배운 Concurrency한 동작들은 결국 spread 연산을 사용하여 이터레이터를 모두 next하여 동작한다는 점에서 결국 지연평가의 필요한 데이터만 사용하는 이점을 누리지는 못하는게 맞을까요??
- 미해결함수형 프로그래밍과 JavaScript ES6+
acc.then(acc => f(acc,a)); 와 acc.then(recur)의 차이점에 대해서
안녕하세요, 좋은 강의 잘 보고 있습니다. [ 1 ] for(const a of iter){ acc = acc instanceof Promise ? acc.then(acc => f(acc,a)) : f(acc,a) } 의 동작과 ___ [ 2 ] for(const a of iter){ acc = f(acc,a); if(acc instanceof Promise) return acc.then(recur) } 의 동작의 차이가 [ 1 ]에서는 Promise.then과 같은 Promise와 체이닝 메서드의 반환값은 Promise이기 때문에 Promise를 만난 이후 부터 go에서 동작하는 iter내부의 함수들이 콜 스택이 아니라 태스크 큐에서 동작하기 때문에 약간의 성능 저하가 발생할 수 있지만, [ 2 ] 에서는 acc instanceof Promise 라면, return acc.then(acc => recur(acc)); 을 진행하게 되는데, recur에 넣어준, acc.then(acc => )에서 then 의 인자로 받은 acc는 Promise.then의 반환값이 아니지만, Promise의 반환 값인데, 이미 비동기 상황이 끝났기 때문에 콜스택에서 동작한다고 이해했는데 맞을까요??
- 미해결함수형 프로그래밍과 JavaScript ES6+
JS의 배열 평가, 연산의 종료
range와 L.range의 차이는 명확하게 이해가 되었습니다. 그런데 10분 00초 전후에 이어지는 "var = [1, 2] 와 같이 선언하고, a[0]과 같이 순회하는 등 사용자가 필요한 값을 만들어 낼 때 까지는 a가 마지막 최종 형태를 만들기 위해서는 배열 형태가 아니어도 상관 없다" 이 부분이 이해가 잘 가지 않아서 질문드리게 되었습니다. '평가가 되지 않았다' 라고 하는 표현이 있는데 저렇게 선언되는 것은 평가가 아닌 것인가요?? 혹시 이 주제에 대해 찾아볼 만한 키워드가 있을까요?
- 미해결함수형 프로그래밍과 JavaScript ES6+
선수 학습 영상
이 영상을 보기전에 학습하면 좋은 영상을 추천해주실수 있나요??기초적인 문법지식만 가지고 보기에는 어려운것 같아서요. 추천 부탁드립니다.
- 미해결함수형 프로그래밍과 JavaScript ES6+
유명함수에 대해 질문드립니다.
go( 1, (a) => a + 10, (a) => Promise.resolve(a + 100), (a) => a + 1000, log ); 위의 코드를 실행했을 때, return (function recur(acc) { for (const a of iter) { acc = f(acc, a); if (acc instanceof Promise) return acc.then(recur); } return acc; })(acc); 이렇게 작성하면 (a) => a+1000까지 동작하는데 return (function recur(acc) { for (const a of iter) { if (acc instanceof Promise) return acc.then(recur); acc = f(acc, a); } return acc; })(acc); 위와 같이 바꾸면 (a) => a+1000이 빠집니다. 어차피 Promise가 아닌 함수들은 하나의 콜스택에서 동작하니 두 문의 위치를 바꿔도 상관 없지 않나요?
- 미해결함수형 프로그래밍과 JavaScript ES6+
take함수를 만들때 === 이 아닌 == 을 쓴 이유가 있을까요?
res의 길이와 l을 비교하려면 === 을 써도 무방할 것 같은데 어떤 이유로 == 을 쓴건지 궁금하네요.
- 미해결함수형 프로그래밍과 JavaScript ES6+
이미지 에러 처리 질문드립니다.
응용편에서 연습하다 궁금증을 해결하지 못해서 질문드립니다. Image를 로딩하는 도중 에러가 발생했을때 이렇게 외부로 에러를 표출해서 catch로 잡을 수 있는데, 이미지를 로딩하는 흐름이 멈춰버려서 나머지 이미지들까지 제대로 표시되지 않습니다. 그래서 이런식으로 onerror에서 직접 대체 이미지를 적용하고 외부에 에러를 표출할지 않게 작성했는데요, 대체 이미지로 적용되고 흐름도 멈추지 않아서 나머지 이미지들도 정상적으로 잘 표시됐습니다. 이런식으로 작성하는게 올바른 에러처리 방법인지 잘 모르겠습니다. 외부에 에러처리를 위임하고 싶은데 그러자니 스크립트가 멈춰서 나머지 이미지들도 표시되지 않습니다... catch에서 에러를 잡은 뒤 어떤식으로 처리할 수 있을까요?
- 미해결함수형 프로그래밍과 JavaScript ES6+
기존 내장함수와의 차이점
안녕하세요! L.map을 직접 만들어서 사용하셨는데 기존에 존재하는 내장함수인 iterable.map() 같은 함수를 사용하지 않고 매번 L.map과 같은 함수를 구현해줘야만 지연 평가를 할 수 있는 것인지 궁금합니다! 감사합니다.
- 미해결함수형 프로그래밍과 JavaScript ES6+
iterator에 대해 질문드립니다.
log(iter2 === iter2[Symbol.iterator]())가 true인 경우는 이해가 됐습니다. 근데 log(iter2 === arr2[Symbol.iterator]())를 실행하면 false가 출력되는데 이유가 궁금합니다. iter2에 arr2[Symbol.iterator]()를 할당했으니 true가 되야 하지 않나요?
- 미해결함수형 프로그래밍과 JavaScript ES6+
reduce의 acc가 없는 경우 코드에 의문이 있어 질문드립니다.
안녕하세요! 초기값 acc가 없는 경우 iter에서 첫 값을 acc로 지정하고 next() 메서드를 통해 두번째 값부터 f(acc, a)를 누적하는 로직에서 궁금한 점이 있어 질문 남깁니다. 인자에 acc가 부재한 경우 if(!iter) 조건이 아니라 if(!acc) 조건으로 iter의 첫 값을 acc에 지정해주는 게 맞지 않나 싶었습니다. 해당 부분 시작 전에도 JS 내장 reduce 방식처럼 acc가 없는 경우 사용하는 방식이라고 소개하셔서 코드 부분에서 더 괴리가 있는 것 같습니다. 또한 acc[Symbol.iterator](); 의 경우 acc는 초기값이고, iterator 프로토콜을 따르는 배열은 인자로 주어진 iter니까 iter[Symbol.iterator]()가 맞지 않나요? const reduce = (f, acc, iter) => { if (!iter) { iter = acc[Symbol.iterator](); acc = iter.next().value; } ... } 강의에서는 위와 같이 작성해주셨는데, 제가 생각했을 때 이해가 되는 코드는 아래와 같습니다. const reduce = (f, iter, acc) => { if (!acc) { iter = iter[Symbol.iterator](); acc = iter.next().value; } ... } acc가 없는 경우 인자가 2개가 들어온다고 생각하면, acc를 3번째 인자로 두어야 acc가 undefined라 !acc가 true 처리되어서 if문을 돌 것 같아서 순서를 바꿔보았습니다. 제가 배움이 얕아 잘못 생각하고 있는 것이라면 어떤 부분에서 잘못 생각하고 있는건지 여쭙고 싶습니다. 감사합니다. ----- 라고 생각했는데, 아예 iter랑 acc를 재지정해주셨다는 걸 알게 되었습니다. 다른 수강생들에게도 도움이 되기 위해 정리해보는데, 혹시 오류가 있다면 짚어주시면 감사하겠습니다. 초기값(acc)이 함수로 전달되지 않는 경우 인자가 당겨져서 if 문 이전까지는 acc가 iterable(배열)이고, iter가 부재해undefined가 됩니다. 그러면 초기값이 없다는 if 문의 판별 조건은 (!iter)가 됩니다. if문 내부에서는 acc가 iterable이니 이를 iter로 다시 지정하는 것이고, acc는 단어 뜻 그대로 초기값으로 설정하기 위해 iter.next().value로 iterable의 첫 값으로 지정합니다. next()를 해서 iterable은 두 번째 값부터 for문에서 iteration을 진행하게 됩니다. iter와 acc 단어 자체의 의미에 집중하다보니 이해가 되지 않았는데, 당겨진다고 생각하니까 바로 납득이 되네요. 오류가 있다면 지적 부탁드립니다. 감사합니다!
- 미해결함수형 프로그래밍과 JavaScript ES6+
병렬프로그래밍
실무에서 web worker는 잘 안쓰나욤?
- 미해결함수형 프로그래밍과 JavaScript ES6+
질문있습니다~
const reduce = curry((f, acc, iter) => { if (!iter) { iter = acc[Symbol.iterator](); acc = iter.next().value; } return go1(acc, function recur(acc) { for (const el of iter) { ////////////////////////////////??????? acc = f(acc, el); console.log(acc); if (acc instanceof Promise) return acc.then((res) => { console.log(res); recur(res); }); } return acc; }); }) for of문을 돌리다 중간에 흐름이 멈추면 강제로 generator return 메서드를 사용해 흐름이 끊기게 되는데, 여기서는 어떻게 acc.then에서 다시 recur(res)를 할 때 멈춘시점의 iter의 값을 기억할 수 있는 걸까요? https://www.inflearn.com/questions/17067 의 내용은 이미 확인한 상태입니다.
- 미해결함수형 프로그래밍과 JavaScript ES6+
알고리즘에서
좋은 강의 감사합니다! 처음부터 쭉 듣고있는데 개인적으로 공부를 했어서 이해가 너무 잘됩니다ㅎㅎ 이렇게 지연평가를 이용하면 알고리즘 문제를 풀때도 많은 시간을 단축할 수 있을 것 같은데 실제로 많이 사용되는지 궁금합니다.
- 미해결함수형 프로그래밍과 JavaScript ES6+
여기부터 막혀서 진도가 안나갑니다 ㅠㅠ 왜 하필 products 가 사라졌는데..
포기했다가 다시 시작하는데 도와주십시오~ products 이 사라진 이유가 궁금합니다 ^^; go( products, products => filter((p) => p.price < 20000)(products), map((p) => p.price), reduce(add), log );