스칼라 민속에서 그런 자리를 차지할만한 플랫 맵의 강력한 점은 무엇입니까?
for
언어 참조에서 표현식을 처리하는 방법에 대한 섹션을 읽으십시오 . 힌트를 줄 수 있습니다.
스칼라 민속에서 그런 자리를 차지할만한 플랫 맵의 강력한 점은 무엇입니까?
for
언어 참조에서 표현식을 처리하는 방법에 대한 섹션을 읽으십시오 . 힌트를 줄 수 있습니다.
답변:
이 문구 뒤에있는 이유는 flatMap (및 기타 고차 함수)에 대한 호출로 작성하는 지루한 if / then / else 코드를 많이 대체 할 수 있기 때문입니다.
이것은 특히 옵션의 경우에 해당됩니다 ( http://tonymorris.github.io/blog/posts/scalaoption-cheat-sheet/ 참조 )
그러나 그것은 다른 모나드에도 적용됩니다 (정확히 인정해야하지만 아직 세부 사항을 정확히 이해하지는 못합니다)
각 함수가 null을 반환 할 수있는 함수 (또는 일련의 함수)를 적용하려는 컬렉션이있는 상황을 상상해보십시오. 실제로 null을 사용하면 코드가 null 검사로 가득 차게됩니다. 그러나 값 대신 옵션을 사용하는 경우 원하는 함수로 값을 평면 매핑하고 여러 함수의 경우 함수를 연결하고 null이 아닌 결과만으로 컬렉션을 얻을 수 있습니다. 당신이 원합니다.
그 설명이 다소 복잡하기 때문에 "그냥 플랫 맵"이라는 짧은 조언이 확립되었습니다.
내가 들었던 이야기는 두 명의 뛰어난 Scala 프로그래머 중 한 명이 다음과 같은 코드를 작성하기 시작했을 때 짝을 이룬다는 것입니다.
option match {
case Some ...
어느 시점에서 다른 사람이 "이게 뭐야? 아마추어 시간? 평면지도 그거!"
에 대한 강력한 기능에 관해서 flatMap
는 ... 첫째, 기본 모나드 연산자입니다. 이는 예를 들어 컨테이너 (예 : Option
, 컬렉션 등), 연속, 상태 등에 의해 공유되는 일반적인 작업임을 의미합니다 . 둘째,를 분해 할 수 있지만 Option
,는, 반대로 flatMap
모나드 작업이 아닙니다. , 따라서 널리 적용될 수 없습니다. 또한 조작하는 데이터에 대한 지식이 너무 많이 필요합니다.
참고 : 이전에 일치가 더 느리다고 말했습니다. flatMap
사실이 글을 쓰는 시점의 가장 최근 버전 인 2.10.1까지 그 반대가 사실입니다.)
val res = for (a <- ma; b <- mb; c <- mc; d <- md) yield f(a,b,c,d)
. 더 많은 모나드를 추가하고, 모나드를 제거해도 동일하게 유지됩니다. 또한로 분해되지 않고로 분해 String
됩니다 Option[String]
. 사실, 그것은 전혀 분해되지 않습니다. 일부 사람들이 컨테이너를 모나드의 예로 사용하는 것을 좋아하지 않는 이유 중 하나는 컨테이너에서 물건을 꺼낼 수 있지만 모든 모나드가 그렇게 할 수있는 것은 아니기 때문입니다.
중요한 점은 flatMap
Scala의 모나 딕 바인딩 작업 표현이라는 것입니다. 웹에는 모나드의 목적과 그것이 왜 그렇게 유용한 지 설명하는 수많은 튜토리얼이 있습니다. James Iry는 몇 가지 세부 사항에 대해 설명합니다.
Option
하며 많은 flatMap
사용 사례 중 하나에 불과 합니다. 물론, "자연 서식지"에서 모나드를 관찰하고 싶다면 Haskell을 확인해야합니다. 유일한 차이점은 Haskellers가 "그냥 >> = 저거!"라고 말하는 것입니다.