수색…


비고

vals, 불변의 객체 및 부작용없는 메소드를 선호합니다. 그들에게 먼저 도달하십시오. vars, 변경 가능 객체 및 부작용이있는 메소드를 사용할 필요가있을 때이를 사용하십시오.

- Odersky, Spoon, Venners에 의한 Scala 프로그래밍

이 프레젠테이션 에는 Odersky의 더 많은 예제와 지침 있습니다.

단순하게 유지하십시오.

간단한 작업을 지나치게 복잡하게하지 마십시오. 대부분의 경우 다음과 같은 경우에만 필요합니다.

  • 대수 데이터 유형
  • 구조 재귀
  • 모나드 같은 API ( map , flatMap map , fold )

스칼라에는 다음과 같이 복잡한 것들이 많이 있습니다.

  • 의존성 주입을위한 Cake pattern 또는 Reader Monad .
  • 임의의 값을 implicit 인수로 전달합니다.

이 점을 처음 접하는 사람들에게는 명확하지 않습니다. 이해하기 전에 사용하지 마십시오. 실제 필요없이 고급 개념을 사용하면 코드를 난독 화하여 유지 관리하기가 쉽지 않습니다 .

하나의 표현에 너무 많이 넣지 마십시오.

  • 계산 단위의 의미있는 이름을 찾습니다.
  • 사용 for 지능형 또는 map 함께 계산을 결합 할 수 있습니다.

다음과 같은 것을 가정 해 봅시다.

if (userAuthorized.nonEmtpy) {
  makeRequest().map {
    case Success(respone) =>
      someProcessing(..)
      if (resendToUser) {
        sendToUser(...)
      }
    ...
  }
}

모든 함수가 Either 또는 다른 Validation 과 같은 유형을 리턴하면 다음과 같이 작성할 수 있습니다.

for {
  user     <- authorizeUser
  response <- requestToThirdParty(user)
  _        <- someProcessing(...)
} {
  sendToUser
}

합리적으로 기능적 스타일 선호

기본적으로:

  • 사용 val ,하지 var 가능한 한. 따라서 작업 분배를 포함한 여러 기능 유틸리티를 완벽하게 활용할 수 있습니다.
  • 루프가 아닌 recursioncomprehensions 사용하십시오.
  • 불변의 콜렉션을 사용하십시오. 가능할 때마다 val 을 사용하는 것은 비천한 일입니다.
  • 데이터 변환, CRQ가 아닌 CQRS 스타일 논리에 중점을 둡니다.

비 기능적 스타일을 선택해야하는 좋은 이유가 있습니다.

  • var 는 로컬 상태 (예 : 액터 내부)에 사용될 수 있습니다.
  • mutable 은 특정 상황에서 더 나은 성능을 제공합니다.


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow