ALord
26
2019-06-22 13:16:35 작성 2019-06-22 13:21:39 수정됨
4
292

함수형 프로그래밍 고수님, 선배님들께 여쭙니다!!


안녕하세요!!

올해부터 웹 개발자로 일하게 된 개린이입니다.


제가 얼마 전에 미디엄에서 '함수형 프로그래밍'에 대한 글을 읽고 관심이 생겨 공부를 하게 되었는데요,


So You Want to be a Functional Programmer (Part 1)


이 글에서는 '순수 함수'를 구현하기 위해 '불변성'을 유지해야 하고,

이를 위해 for 문을 사용하는 대신 재귀함수를 호출하는 것 같더라고요.


근데 예제에 나온 재귀함수는 더하기 함수에 대한 재귀함수 밖에 사용하지 못하기 때문에

제가 나름대로 함수 객체를 파라미터로 넘겨주면 해당 함수를 재귀적으로 수행하는

함수를 짜봤습니다.


그런데 이 함수가 '함수적 프로그래밍'의 원칙에 부합하는지에 대해 자신이 없습니다. ㅜㅜ;;

이에 대해 고수님들, 선배님들께 피드백을 받고 싶습니다.


시간을 내어 읽어주셔서 감사합니다!!


/*________________________________________________________
 *
 * Fucntional Programming add
 ________________________________________________________*/

const add = x => y => x + y;

const add_10 = add(10);

console.log(`add_10(1) : ${add_10(1)}`);

/*________________________________________________________
*
* Fucntional Programming multiple
________________________________________________________*/

const multi = x => y => x * y;

const multi_10 = multi(10);

console.log(`multi_10(5) : ${multi_10(5)}`);

/*________________________________________________________
 *
 * Fucntional Programming composing
 ________________________________________________________*/

const compose = (f, g) => x => f(g(x));

const multi_100_after_add_5 = compose(multi(100), add(5));

console.log(`multi_100_after_add_5(10) : ${multi_100_after_add_5(10)}`);

/*________________________________________________________
 *
 * Fucntional Programming recursive for specific function
 ________________________________________________________*/

const recursive_f = f => (start, end, acc, g) => { // g is function itself returned
    if(start <= end) {
        return  g(start + 1, end, f(start)(acc), g);
    }else {
        return acc;
    }
}

const recursive_multi = recursive_f(multi);

console.log(`recursive_multi(1, 5, 1, recursive_multi) :
${recursive_multi(1, 5, 1, recursive_multi)}`);

const recursive_add = recursive_f(add);

console.log(`recursive_add(0, 10, 0, recursive_add) :
${recursive_add(0, 10, 0, recursive_add)}`);


0
0
  • 답변 4

  • 방가방가2
    1k
    2019-06-22 13:39:26

    함수형이니 객체형이니 하는건 DSL 앞에서 의미가 없습니다. 중요한건 DSL입니다.

    0
  • cxcscxcc
    6
    2019-06-22 14:16:56
    for문 사용해도 괜찮습니다

    함수형 프로그래밍이란건 side effect가 있는 code와 순수함수를 잘 분리해서 프로그래밍하는 방법론이지 특별한게 있는게 아닙니다.

    그리고 본문에 있는 코드는 side effect가 없는 순수 함수들 밖에 없기 때문에 함수형이라고 부를 수 있지만
    1
  • cxcscxcc
    6
    2019-06-22 14:17:50

    좀 더 복잡한 프로그램을 가져오시는게 좋을 것 같습니다. ㅎㅎ 

    1
  • ALord
    26
    2019-06-24 17:21:26 작성 2019-06-24 17:25:41 수정됨

    @방가방가2

    공부해야 하는 주제가 늘어났네요 ㅎㅎ

    방향을 제시해 주셔서 감사합니다 ^^7


    @cxcscxcc

    개인적으로 함수형 프로그래밍이 재미가 붙어서 너무 성급했네요 ㅋㅋ;;

    사이드 이펙트의 유무에 따라 함수의 순수성이 결정된다고 이해하고 가겠습니다!!

    좀더 공부해서 선배님께서 고민하실 만한 코드를 가져와 보겠습니다 ^^7

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.