작년 한 해 동안 나는 스칼라 코드를 작성 했습니다 (자바 배경에서 나옴 ). Val, case 클래스, map / filter / lambda 함수, 암시 적 및 형식 유추를 사용하여 더 간단하고 깔끔한 코드를 만드는 방법이 정말 마음에 들었습니다. 나는 주로 Akka 기반 응용 프로그램에 사용했습니다 .
올해 저는 기능 프로그래밍을 정말 좋아하는 새로운 팀과 함께 스칼라 프로젝트를 진행하고 있습니다. 그들은 Scalaz를 많이 사용 하며 코드는 응용 프로그램, 컨텍스트 범위, 리더 / 라이터 / 상태 모나드로 어디에나 채워져 있으며 주요 방법조차 I / O 모나드에 "랩핑"되어 있습니다. 그들의 추론은 이것이 컴파일러가 코드가 정확하고 각 함수에 부작용이 없다고 주장하는데있어 "우리를 위해 일하게"한다는 것이다.
그럼에도 불구하고, 내 관점 에서이 모든 구문은 실제로 비즈니스 논리를 방해합니다. 예를 들어 "MyBusinessObject"유형은 "List [MyBusinessObject]", "Option [MyBusinessObject]"또는 "Future [MyBusinessObject]"와 같은 유형도 좋습니다. 그들은 모두 명확한 의미와 목적을 가지고 있습니다. 반면에 코드는 다음과 같습니다.
def method[M[_]: Applicative] = {
case (a, b) => (ca[M](a) |@| cb[M](b)) {
case t @ (ra, rb) =>
if (ra.result && rb.result) t.right
else t.left
}
}
프로그램에 복잡성을 추가합니까, 아니면이 프로그래밍 방식에 익숙하지 않은 것이 저입니까?
>>=
과 <$>
, 평균 어떤 것도 당신까지 그들이하는 일을 알아 그러나 그들이 의미하는 바를 배운 후, 그들은 지금 매우 자연스럽고 빠르게 읽습니다. 실제로 대답이 아니라 이와 같은 것들에 대한 객관적인 경험. Scala도 사용하지만 Scalaz 라이브러리에 대한 경험이 없습니다.
for(i=0; i<7; ++i) { trivialOperation(i); }
어색한 trivialOperationCount
변수로 작성하지 않겠습니까?). 패턴 일치 기능을 갖춘 함수형 프로그래밍 언어는 때때로 더 많은 변수를 도입합니다. OO에서 접근 자 메서드 호출을 작성하십시오. 결과는 일반적으로 더 간결합니다. 아마도 좀 덜 자명하지만 데이터 선언을 찾아 보면 일반적으로 명확 해집니다. 정적 타이핑은 많은 도움이됩니다. APL과는 다릅니다.