이야기를 나눠요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
함수형 인터페이스 활용
여기에 질문 내용을 남겨주세요.영한님, 항상 좋은 강의 감사드립니다! 🙇♂최근에 람다와 함수형 인터페이스 강의를 들으며 그동안 아무 생각 없이 사용하던 optional 의 orElseThrow() 같은 메서드들이사실 supplier 같은 함수형 인터페이스를 활용한 구조라는 걸 더 명확히 이해할수 있었던것 같습니다.다만 한 가지 궁금한 점이 있습니다. 실무에서도 직접 함수형 인터페이스를 정의해서 사용하는 경우가 많은지 궁금합니다! 강의 덕분에 이제 개념은 어느 정도 이해했는데, 막상 제가 진행 중인 프로젝트에 “이걸 어떻게 녹여내야 유지보수성이 올라갈까?” 하는 부분이 아직 감이 잘 오지 않는것 같습니다. 혹시 영한님이 실무에서 함수형 인터페이스나 람다를 적용할 때 ‘이럴 때 쓰면 좋다’ 싶은 포인트가 있다면 조언 부탁드립니다! 항상 좋은 인사이트와 강의 주셔서 감사합니다 🙏
-
[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
노트북사용
안녕하세요 강의 잘 듣고있습니다. 빠른 답변감사드립니다. 컴퓨터가아닌 노트북으로 플러터를 이용해 어플을 만드는 목적인데 혹시 추천해주실만한 노트북사양이나 제품이 있을까요?
-
[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
2강부터 너무 어렵네요
1강을 3번 정도 보면서 익히려고 노력하는데 머릿속에 다 들어오거나 외운 느낌은 아니에요. 그렇게 2강을 듣기 시작했는데 너무 어렵네요. 공부방법을 어떻게 하면 좋죠? 1강은 강사님이 알려주신거 코드 직접해보고 자료로만들고 했는데... 2강오니 이해안되는 부분들이 많아요.
-
함수형 프로그래밍과 JavaScript ES6+
products가 사라지는 과정
저도 완벽하게 이해했다고 볼 수는 없지만, 정리해봤어요. 혹시 틀리신 부분 지적해주시면 감사합니다! const filter = curry((f, iter) => { let res = []; for (const a of iter) { if (f(a)) res.push(a); } return res; }); filter 자체를 log해보면 ..const anonymous = (a, ..._) => .length ? f(a, ..._) : (..._) => f(a, ..._)이런 형태에요.이를 filter에 맞게 풀어보면 ..const filter = (a, ..._) => { _.length ? ( const anonymous = (a, ..._) => { let res = []; for (const b of _) { if (a(b)) res.push(b); } return res; } ) : ( const anonymous = (a) => (..._) => { let res = []; for (const b of _) { if (a(b)) res.push(b); } return res; } }; 여기서 (p) => p.price < 20000) 가 a에 들어가면..... (a) => (..._) => { let res = []; for (const b of _) { if (a(b)) res.push(b); } return res; } ... const anonymous = (..._) => { let res = []; for (const b of _) { if ((b) => b.price < 20000) res.push(b); } return res; }이렇게 되는 거에요.go 부분을 풀어보기 전에 reduce를 풀어보면 ..const reduce = (a, ..._) => { _.length ? ( // 여기서 acc에 ..._이 할당되고 iter는 undefined입니다. const anonymous = (a, acc, iter) => { if (!iter) { iter = acc[Symbol.iterator](); acc = iter.next().value; } for (const b of iter) { acc = a(acc, b); } return acc; } ) : ( const anonymous = (a) => (acc, iter) => { if (!iter) { iter = acc[Symbol.iterator](); acc = iter.next().value; } for (const b of iter) { acc = a(acc, b); } return acc; } ) } go의 reduce는 ..const go = (...args) => reduce((a, f) => f(a), args); const go = (...args) => { let iter = args[Symbol.iterator](); let acc = iter.next().value; for (const b of iter) { acc = b(acc); } return acc; }종합했을 때, go(products, filter(p => p.price < 20000), log)는 다음과 같습니다.// args는 [products, filter(p => p.price < 20000), log] const go = (...args) => { // iter = [filter(p => p.price < 20000), log] // acc = products let iter = args[Symbol.iterator](); let acc = iter.next().value; // 원래 for문 자리지만, 2개 뿐이니까 나열할게요. // for (const b of iter) { // acc = b(acc); // } // 1. filter 평가 -> iter[0] let res = []; // for (const b of products) { // if ((b) => b.price < 20000) res.push(b); // } if ((b = { name: "반팔티", price: 15000 }) => b.price < 20000) res.push(b); if ((b = { name: "긴팔티", price: 20000 }) => b.price < 20000) res.push(b); if ((b = { name: "핸드폰케이스", price: 15000 }) => b.price < 20000) res.push(b); if ((b = { name: "후드티", price: 30000 }) => b.price < 20000) res.push(b); if ((b = { name: "바지", price: 25000 }) => b.price < 20000) res.push(b); // res = [15000, 15000]; // filter 끝의 return res와 // go의 for문에서 acc = b(acc);에 의해 acc = res; // 2. log 수행 -> iter[1] acc = log(acc); // console.log의 리턴은 undefined, 출력은 정상 return acc; } 봐주셔서 감사합니다! 👏
-
함수형 프로그래밍과 JavaScript ES6+
세상에서 제일 신기한 기본기..
이것도 모르고 js를 써왔던 내 인생이 레전드네요..