Scala Language
Bästa metoder
Sök…
Anmärkningar
Föredrar vals, immutable objekt och metoder utan biverkningar. Nå först efter dem. Använd varianter, muterbara objekt och metoder med biverkningar när du har ett specifikt behov och motivering för dem.
- Programmering i Scala , av Odersky, Spoon och Venners
Det finns fler exempel och riktlinjer i denna presentation av Odersky.
Håll det enkelt
Överkomplicera inte enkla uppgifter. För det mesta behöver du bara:
- algebraiska datatyper
- strukturell rekursion
- monadliknande api (
map
,flatMap
,fold
)
Det finns massor av komplicerade saker i Scala, som:
-
Cake pattern
ellerReader Monad
för beroende injektion. - Att överföra godtyckliga värden som
implicit
argument.
Dessa saker är inte tydliga för nykomlingar: undvik att använda dem innan du förstår dem. Att använda avancerade koncept utan ett verkligt behov gör att koden blir obesvärd, vilket gör den mindre underhållbar.
Packa inte för mycket i ett uttryck.
- Hitta meningsfulla namn för beräkningsenheter.
- Används
for
förstå ellermap
att kombinera beräkningar tillsammans.
Låt oss säga att du har något liknande:
if (userAuthorized.nonEmtpy) {
makeRequest().map {
case Success(respone) =>
someProcessing(..)
if (resendToUser) {
sendToUser(...)
}
...
}
}
Om alla dina funktioner returnerar Either
eller någon annan typ av Validation
, kan du skriva:
for {
user <- authorizeUser
response <- requestToThirdParty(user)
_ <- someProcessing(...)
} {
sendToUser
}
Föredrar en funktionell stil, rimligt
Som standard:
- Använd
val
, intevar
, där det är möjligt. Detta gör att du kan dra nytta av ett antal funktionella verktyg, inklusive arbetsdistribution. - Använd
recursion
ochcomprehensions
, inte slingor. - Använd oföränderliga samlingar. Detta är ett samband med att använda
val
när det är möjligt. - Fokusera på datatransformationer, logik i CQRS-stil och inte CRUD.
Det finns goda skäl att välja icke-funktionell stil:
-
var
kan användas för lokal stat (till exempel i en skådespelare). -
mutable
ger bättre prestanda i vissa situationer.