Un esempio tipico se si desidera illustrare la concisione del codice funzionale potrebbe utilizzare le raccolte e le relative operazioni. Per esempio. considera una classe Customer
e un metodo che crea un elenco ordinato di nomi di clienti da un elenco di clienti.
Ecco l'implementazione Java:
class Customer
{
String name;
... // Other attributes.
}
List<String> sortedCustomerNames(List<Customer> customers)
{
List<String> names = new ArrayList<String>();
for (Customer customer : customers)
names.add(customer.name);
Collections.sort(names);
return names;
}
Versione Scala:
class Customer(val name: String, /* ... other attributes */)
def sortedCustomerNames(customers: List[Customer]): List[String] =
customers.map(c => c.name).sorted
Nota
La concisione in termini di sequenze di tasti non è sempre una buona misura della qualità del codice e della manutenibilità.
Inoltre, in generale, non consiglierei di passare da Java a Scala solo perché Scala è più recente. Se la maggior parte dei membri del team ha più familiarità con Java, il team sarà molto più produttivo con Java rispetto a Scala (o qualsiasi altro linguaggio di programmazione che non conoscono bene).
Ho imparato Scala nel mio tempo libero da circa due anni, e solo di recente (dopo aver frequentato un corso online) ho avuto la sensazione di poter essere più produttivo in Scala di quanto lo sia io in Java. Prima di raggiungere questo punto, non avrei considerato l'utilizzo di Scala per la produzione.