[SCALA] 황조롱이 함수형 프로그래밍 디자인 패턴의 부가가치는 무엇인가? (스칼라)
SCALA황조롱이 함수형 프로그래밍 디자인 패턴의 부가가치는 무엇인가? (스칼라)
그렇게 유용 황조롱이를 사용하여 코드의 부작용 부분을 치우 왜 궁금하네요. 합니까 누군가가 경험이있다? 과 의욕을 설명 할 수있는 방법 정확히 도움 않습니다.
내가 이해하지만 그 순수 기능을 프로그래밍 코드의 제로 부작용 이제부터는 더 나은 디버깅 및 예측에 관한 것입니다. 그러나 황조롱이의 경우는 정말 그렇게 할 수 있도록 도와드립니다 표시되지 않는 이유는 무엇입니까?
베스트,
MM-
해결법
-
==============================
1.요점은 당신이 아마 주위에 거짓말을 한 것으로, 또는 지나가는하고있는 무언가에 대한 새로운 블록을 생성하는 것을 피하기 싶지 않아 중간 변수를 만들지 않도록하는 것입니다. 이제 우리는 루비에서와 황조롱이이 있다고 가정하자 :
요점은 당신이 아마 주위에 거짓말을 한 것으로, 또는 지나가는하고있는 무언가에 대한 새로운 블록을 생성하는 것을 피하기 싶지 않아 중간 변수를 만들지 않도록하는 것입니다. 이제 우리는 루비에서와 황조롱이이 있다고 가정하자 :
implicit class RubyKestrel[A](val repr: A) extends AnyVal { def tap[B](f: A => B) = { f(repr); repr } }
지금하자 우리가 코드의 일부 라인이 있다고 가정합니다 :
xs.map(_ + 7).filter(foo).take(n)
우리는 필터 후 디버깅 메시지를 출력합니다. 탭이 없다면 우리는 그 선을 리팩토링 :
{ val temp = xs.map(_ + 7).filter(foo) println(temp) temp.take(n) }
윽. 이제 우리는 탭이 있다고 가정합니다 :
xs.map(_ + 7).filter(foo).tap(println).take(n)
휴, 더 좋은 방법!
하자 우리가 추가 방법을 가지고 스택이 있다고 가정하고, 우리는 다른 곳에서 사용하기 전에 스택에 무언가를 추가하려고합니다.
def newStack = { val stack = new Stack stack add "whatever" stack }
윽. 그러나 탭과 :
def newStack = (new Stack).tap(_ add "whatever")
아주 편리합니다 - 그것은 정말 당신이 할 수 있습니다 체인 호출에 무언가로 어떤 정상 측면 초래 방법을 설정 할 수 있습니다. 그리고 이후 체인 호출은 종종 큰 승리입니다 종종 낮은 보일러입니다.
from https://stackoverflow.com/questions/23231509/what-is-the-added-value-of-the-kestrel-functional-programming-design-pattern-s by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 어떻게지도의 데이터 집합을 만드는 방법? (0) | 2019.11.17 |
---|---|
[SCALA] 어떻게 스칼라를 사용하여 스파크 2.1 밀리 초와 타임 스탬프에 밀리 세컨드의 문자열 열을 변환하는? (0) | 2019.11.17 |
[SCALA] 스파크 Dataframe 랜덤 UUID는 모든 변환 / 액션 후 변경 (0) | 2019.11.17 |
[SCALA] "반환"과 스칼라에서 "시도 - 캐치 마지막으로"블록 평가 (0) | 2019.11.17 |
[SCALA] 익명 함수 대에 의해-name 매개 변수 (0) | 2019.11.17 |