Scala Language
Migliori pratiche
Ricerca…
Osservazioni
Preferisci vals, oggetti immutabili e metodi senza effetti collaterali. Raggiungi per loro prima. Usa vars, oggetti mutabili e metodi con effetti collaterali quando hai una necessità specifica e giustificazione per loro.
- Programmazione in Scala , di Odersky, Spoon e Venners
Ci sono più esempi e linee guida in questa presentazione di Odersky.
Mantienilo semplice
Non complicare eccessivamente compiti semplici. Il più delle volte ti serviranno solo:
- tipi di dati algebrici
- ricorsione strutturale
- api simili a monadi (
map
,flatMap
,fold
)
Ci sono un sacco di cose complicate in Scala, come ad esempio:
-
Cake pattern
oReader Monad
per iniezione di dipendenza. - Passare valori arbitrari come argomenti
implicit
.
Queste cose non sono chiare per i nuovi arrivati: evita di usarle prima di capirle. L'utilizzo di concetti avanzati senza una reale necessità offusca il codice, rendendolo meno manutenibile.
Non imballare troppo in una sola espressione.
- Trova nomi significativi per le unità di calcolo.
- Utilizzare
for
comprensioni omap
per combinare insieme i calcoli.
Diciamo che hai qualcosa del genere:
if (userAuthorized.nonEmtpy) {
makeRequest().map {
case Success(respone) =>
someProcessing(..)
if (resendToUser) {
sendToUser(...)
}
...
}
}
Se tutte le funzioni restituiscono Either
o di un altro Validation
-come tipo, è possibile scrivere:
for {
user <- authorizeUser
response <- requestToThirdParty(user)
_ <- someProcessing(...)
} {
sendToUser
}
Preferisci uno stile funzionale, in modo ragionevole
Di default:
- Usa
val
, nonvar
, ove possibile. Ciò consente di sfruttare senza problemi un certo numero di utility funzionali, compresa la distribuzione del lavoro. - Usa
recursion
ecomprehensions
s, non cicli. - Usa collezioni immutabili. Questo è un correttivo per l'utilizzo di
val
quando possibile. - Concentrati sulle trasformazioni di dati, sulla logica in stile CQRS e non su CRUD.
Ci sono buoni motivi per scegliere lo stile non funzionale:
-
var
può essere utilizzato per lo stato locale (ad esempio, all'interno di un attore). -
mutable
offre prestazioni migliori in determinate situazioni.