Поиск…


замечания

Предпочитают vals, неизменные объекты и методы без побочных эффектов. Сначала доходите до них. Используйте vars, изменяемые объекты и методы с побочными эффектами, когда у вас есть определенная потребность и оправдание для них.

- Программирование в Scala , Odersky, Spoon и Venners

В этом выступлении Одерского есть больше примеров и рекомендаций.

Будь проще

Не перегружайте простые задачи. Большую часть времени вам потребуется только:

  • алгебраические типы данных
  • структурная рекурсия
  • monad-like api ( map , flatMap , fold )

В Scala есть много сложных вещей, таких как:

  • Cake pattern или Reader Monad для 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 , где это возможно. Это позволяет вам воспользоваться преимуществами ряда функциональных утилит, включая распределение работы.
  • Используйте recursion и comprehensions s, а не петли.
  • Используйте неизменяемые коллекции. Это, по возможности, механизм использования val .
  • Сосредоточьтесь на преобразованиях данных, логике стиля CQRS, а не CRUD.

Есть веские причины выбирать нефункциональный стиль:

  • var может использоваться для локального состояния (например, внутри актера).
  • mutable дает лучшую производительность в определенных ситуациях.


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow