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 patternoReader Monadper 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
forcomprensioni omapper 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
recursionecomprehensionss, non cicli. - Usa collezioni immutabili. Questo è un correttivo per l'utilizzo di
valquando 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:
-
varpuò essere utilizzato per lo stato locale (ad esempio, all'interno di un attore). -
mutableoffre prestazioni migliori in determinate situazioni.