인프런 업데이트 소식 🔨👷🏼‍♂️
자바스크립트로 알아보는 함수형 프로그래밍

자바스크립트로 알아보는 함수형 프로그래밍

(87개의 수강평)

6107명의 수강생

무료

평생
초급
수료증
22회 수업, 총 6시간 32분
전성준 프로필

ES6 화살표함수 사용시 curry 함수에서 arguments 사용 질문 전성준 3일 전

curry 함수에서 ES6의 경우 화살표 함수로는 arguments 사용이 안되는것 같은데요 이 경우는 arguments.length 체크를 다르게 해줘야하지 않을까싶습니다.

1
Un known 프로필

console.log가 부수효과를 일으키는점에 대해 궁금합니다 Un known 1달 전

2장 map,filter 초반부에 보면 console.log를 return 으로 바꾸면서 console.log도 부수효과를 가지기때문에

return으로 바꿔준다 하셨는데 어떠한 의미인지 이해가 잘 안됩니다. 

console.log로 값을 변경하거나 할순 없는거 같은데 단순히 함수를 호출했을때 console.log로 뿌려지는 값과

함수의 리턴값을 포함한 두개의 값이 콘솔창에 나와서 그렇게 말씀하신건가요?

1
줄렛(줄렛) 프로필

안녕하세요. 사용하시는 폰트좀 알 수 있을까요 줄렛(줄렛) 2달 전

영상 보는데 폰트가 괜찮아서 혹시나 알 수 있을까요?

 

1
캬우오우오 프로필

_each 다형성 질문입니다. 캬우오우오 2달 전

_each 다형성 부분을 듣고 해보는 중에, 자꾸 오류가 나서 질문드립니다. 변수 _length에 직접 배열을 넣으면 잘 동작하는데, _each에 적용하니 length 가 함수가 아니라고 오류가 뜹니다. 해결방법이 있을까요?

var _length = _get('length');
console.log(_length([1,2,3,4]));
// console.log(_each(null, console.log))

function _each(list, iter){
for(var i = 0, len = _length(list); i<len; i++){
iter(list[i])
}
return list;
}

2
Hae Jun Kim 프로필

강의내용에 대한 질문입니다. Hae Jun Kim 2달 전

자바스크립트 프로그래머가 되기 위해 자바스크립트를 배우면서 저자님의 함수형 프로그래밍을 알게되어 책 구매 후 동영상 수강중입니다.
현재 무료로 배포된 강의는 ES5버젼으로 알고 있는데, 수강해도 현재의 자바스크립트를 구현하는데 도움이 될까요?

1
kyoungwon Lim 프로필

함수형 자바스크립트가 처음이라서요.. kyoungwon Lim 3달 전

지금 쭈욱 강의듣고 있는데요, 많이 생소하고 좀 어렵게 느껴집니다..

어느정도 자바스크립트 문법 좀 알고있다고 생각하는데, 함수형자체가 많이 접해보지 않았던거라서 그런지 어렵게 느껴지네요...

취준생이라서, 자바스크립트 함수형을 잘 익히면 실무에서 효율적으로 일할 수 있을 거 같아서 포기하지 않고 끝까지 완강해보려고합니다.

지금은 이해가 안되더라도, 지금 강의 외에 선생님의 유료강의들도 들어보고 하면 이해되는 시점이 올까요?...

아니면 저한테 잘 안맞는 부분인건가요?... (혼자서 코딩해보라고하면 못할 거 같아요...ㅠㅠ)

아, 그리고 선생님 책 사서 보는게 좀 더 도움이 될까요??

2
아이티티티 프로필

17분쯤 질문드립니다. 아이티티티 3달 전

잘못된 접근을 했을때 에러를 뱉어내는게 더 좋은 방법 아닌가요?

런타임 전에 체크를 강하게 하는 방향으로 바뀌는 것 같던데,,

에러를 내지 않고 undefined를 내는 것의 장점이 무엇인지 궁금합니다.

1
madforre 프로필

인자명인 predicate에 대해서 질문드립니다. madforre 4달 전

안녕하세요 강사님 제가 헷갈리는 부분이 있는데요. 강의중에 함수의 인자 명으로 말씀하신 predicate 의 뜻에 대해 찾아봤는데 인자로 받은 함수가 불린 값을 리턴하는 것이라고 나오는거 같아서요.. 역할을 위임한다는 면에서 인자 이름이 delegate가 더 적당한게 아닌가 해서 여쭤봅니다.

6
송승윤 프로필

일급함수 - 함수에 인자를 함수로 넣을 때... 송승윤 4달 전

함수에 인자를 함수로 넣을 때 

var example1 = (function(){

return {

  }

})();

이 것도 함수에 인자를 함수로 넣은 것인가요??

 

 

1
Eun Shick Bae 프로필

혹시 글로 정리해서 공개로 올려놓아도 괜찮을까요? Eun Shick Bae 4달 전

좋은 강의 감사드립니다~!!

혹시 실례가 안된다면 출처와 함께 블로그에 공개글로 정리해서 올려두어도 괜찮을까요?

3
이이도경 프로필

grep function 만들기 오류 이이도경 4달 전

제가 jquery에 grep함수를 최대한 함수형 프로그래밍스럽게 바꾸고 있습니다.

제가 지금까지 시도한 결과는 아래와 같은데 이상하게 

```

my_grep([0,1,2,3], function(k){return k<3}, true)

```

이렇게 실행해보면   

```
evalmachine.<anonymous>:16 matches.push( elems[ p ] ); ^ TypeError: matches.push is not a function
```

이런 오류를 뱉어내는데, 이유를 도무지 모르겠습니다. 제 코드는 아래와 같습니다

```
function my_grep(elems, callback, invert) { var callbackInverse, matches = [], i = 0, length = elems.length, callbackExpect = !invert; let fun = matches => { let r = R.range(0,length); let modify = R.curry( p=>{ let callbackInverse = !callback( elems[ p ], p ); if ( callbackInverse !== callbackExpect ) { matches.push( elems[ p ] ); } } ); R.map(modify,r); return matches; }; fun(length); }
```

원래 동작의 의도는 invert가 true면 callback인자의 조건이 false인 배열을 elems중에서 걸러내서 리턴하는 것 같습니다.

1
이이도경 프로필

jquery 함수들을 완전한 함수형 프로그래밍으로 바꾸려고 합니다. 이이도경 4달 전

jquery 함수들을 완전한 함수형 프로그래밍으로 바꾸려고 합니다.

for loop같은 것들도 모두 함수로 고쳐보고 싶은데 제가 바꾸려는 것이   

 

  each: function( obj, callback ) {

            var length, i = 0;

 

            if ( isArrayLike( obj ) ) {

                length = obj.length;

                for ( ; i < length; i++ ) {

                    if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {

                        break;

                    }

                }

            } else {

                for ( i in obj ) {

                    if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {

                        break;

                    }

                }

            }

 

            return obj;

        },

이 함수인데 제가 생각하기엔 

 

  each: function( obj, callback ){

length = obj.length;

let fisrt_if = R.curry( 

    i=> {

        R.range(0,length).some(function(i){

                    if ( callback.call( obj[ i ], i, obj[ i ] ) === false )

                        return i;

                    }

                );

    });

 

let first_else = R.curry(

    i=>{

          R.keys(obj).some(function(i){

                    if ( callback.call( obj[ i ], i, obj[ i ] ) === false )

                        return i;

                        }

                );

    }

);

 

let arraylike = obj =>{

    if ( isArrayLike( obj ) ) 

        return true;

    else

        return false;

}

let main = 

    R.ifElse(

    x=> arrayLike(obj),

        first_if,

        first_else

    )

}

 

밑에 함수가 그럴싸해보이는데 어디가 틀린건지 알 수 있을까요 ?ㅠㅠ

3
송이준 프로필

_curry 에서 질문 또 있어요 송이준 5달 전

function _curry(fn){

return function(a, b){

return arguments.length === 2 ? fn(a,b) : function(b){ return fn(a, b); };

}

}

var add = _curry(function (a, b){

return a + b;

});

var add10 = add(10);

console.log(add10); ---> function(b){ return fn(a,b); }

console.log(add10(5)); ---> 15

제가 이해가 안가는 부분은 _curry 함수에서 전달받는 매개변수가 두개가 아닌 경우에

항상 function(b){ return fn(a,b); } 가 실행되니까, a + b 라는 최종적으로 실행하게 될 연산에 대해 계속해서 b 라는 변수에만 값을 할당해주게 되는데, 어떻게 10 + 5라는 연산이 되는지 모르겠어요.

add(10)의 최종 결과는 a + 10이 되고 , 여기서 add(10)을 add10 이라는 변수에 담고 다시

add10(5)를 실행하게 되면....어떻게 되는건지 상상이 안되요.

3
송이준 프로필

_curry 에서 질문있습니다. 송이준 5달 전

``` function _curry(fn){

return function(a, b){

return arguments.length === 2 ? fn(a,b) : function(b){ return fn(a, b); };

}

}

var add = _curry(function (a, b){

return a + b;

});

var add10 = add(10);

여기서 위의 _curry 함수에서요..삼항 연산자 뒤에 부분인

function(b){ return fn(a, b); }; 이 부분에서,

function(a){ return fn(a, b); }; 이렇게 하면 결과가 이상하게 나올까요...?

전자의 경우 최종적인 결과가 a + 10 이 되는것이고,

후자의 경우 최종적인 결과가 10 + b 가 되는것인데... 둘다 매개변수 하나는 비어있는 값인 것 아닌가요?

1
송이준 프로필

=== 대신 == 를 쓰는 이유 . (함수형 자바스크립트) 송이준 6달 전

``` // 2. _get 만들어 좀 더 간단하게 하기

function _get(obj, key){

return obj == null ? undefined : obj[key];

}

var user1 = users[0];

console.log(user1.name);

console.log(_get(user1, 'name'));

// console.log(users[10].name); <-- 에러가 난다. 없는 값이므로.

console.log(_get(users[10], 'name'));

위에서 return obj === null ? 이 아니라 obj == null 이라고 쓰는 이유가 있으신거 같은데,

전 자바스크립트 배울때 항상 === 이렇게 세개를 사용하라고 배웠거든요.

고급 수준 이상이 되면 == 와 ===의 차이를 이용해서 코딩을 하기도 한다고 들었는데..

위의 _get 함수를 === 세개짜리를 사용해서 동일하게 작동하도록 하려면 어떻게 코딩 해야할까요?

1