Scala Language
Лучшие практики
Поиск…
замечания
Предпочитают 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
дает лучшую производительность в определенных ситуациях.