2016-10-27 7 views
4

우리는 직장에서 매우 훌륭한 ramda 라이브러리를 사용하고 있습니다. 이는 대충 포인트가없는 스타일의 코드를 사용할 수 있기 때문에 좋습니다. 이 문제는 문제가 발생할 때 코드에서 뭔가를 가리킬 때 보이는 장소가 훨씬 적다는 것입니다. 대부분의 런타임 오류는 구성된 ramda 기능의 오용으로 인해 발생합니다. 이 기능을 리디렉션을 많이 사용하는 프레임 워크에 전달할 때 (리액턴스/리덕션), 종종 잘못되었을 때 라이브러리 전용 코드가 깊어서 내가 어디로 갔는지 알기가 매우 어렵습니다. 잘못된.포인트 프리 디버깅

포인트가없는 스타일에서 벗어나지 않으면 서이 문제를 완화 할 수있는 방법이 있습니까?

답변

5

하나의 옵션과 같이, R.tap을 사용하는 것입니다

const f = R.pipe(
    R.tap(console.log), // logs x 
    g, 
    R.tap(console.log), // logs g(x) 
    h, 
    R.tap(console.log), // logs h(g(x)) 
    i, 
    R.tap(console.log), // logs i(h(g(x))) 
    j, 
    R.tap(console.log) // logs j(i(h(g(x)))) 
); 

f(x); 

또 다른 옵션은 함수가 잘못된 유형의 인수에 적용될 때 정보 예외를 제기 Sanctuary을 사용하는 것입니다.

+3

Raine Virta의 [treis] (https://github.com/raine/treis)와 Seb Insua의 [Ramda-debug] (https://github.com/sebinsua/ramda-debug)도 유용합니다. –

+0

특정 문제를 디버깅하기 위해 이미 탭된 콘솔 로그를 사용합니다 (그런데'log'가'console'에 묶이지 않아서 예제가 작동하지 않습니다). 더 일반적인 방법으로 코드를 작성하는 방법에 대해 궁금합니다. ramda 함수를 잘못 호출하면 합리적인 오류가 발생합니다. 그 libs 정말 도움이되지만. 흐름/타이프립트에 대한 장점은 무엇입니까? – jstaab

+1

'R.tap (console.log)'는 노드에서는 작동하지만 브라우저에서는 작동하지 않습니다. 'R.tap (console.log.bind (console))'은 두 환경 모두에서 작동하지만 입력하기가 조금 짜증납니다. 물론 별칭을 정의 할 수 있습니다. :) – davidchambers

3

내 사이드 ​​프로젝트에서 Ramda와 동일한 문제가 발생했습니다. 그것은 내가 생산에서 그것을 포기하게 만들었습니다.

이 답변을 작성하는 시점에서 JavaScript로 포인트가없는 스타일 프로그램을 디버깅하는 것은 매우 어렵습니다. 그것이 내가 그것을 사용하지 않는 유일한 이유이다. 단위 테스트 범위가 좋더라도 개발주기가 너무 길고 디버깅이 어렵다는 것을 알았습니다.

확장 할 예정입니다. Ramda-debug 및 R.tap()과 같은 도구가 있지만 활성 디버깅 도구이므로 프로젝트에 추가해야하며 경우에 따라 코드에 추가하고 나중에 프로덕션에서 제거해야합니다 . 그러나 오류 메시지가 나타나면 유용한 스택 추적을 얻지 못하고 디버거에서 흐름을 파악할 수 없으므로 미리 흐름을 알아야합니다.

+0

혹시 흐름이나 타이프립트 같은 것을 시도해 보셨습니까? – jstaab

+0

나는 형식 문자를 찾고 있는데, –

+3

@jstaab 나는 TypeScript를 매일 Ramda 또는 Lodash/fp와 함께 사용한다. TS는 함수형 프로그래밍을 좋아하지 않습니다. 카레 드 함수에 대한 인터페이스를 정의하는 것은 가능하지만 다소 고통 스럽습니다. 어쨌든, 그것은 디버깅에 도움이되지 않습니다. 그것은 약간의 정적 타입 안전성을 가져올뿐입니다. 그러나이 질문의 범위를 벗어나는 다른 장점이 있습니다. – RIAstar