Indice
- Prefazione
- Benvenuti a Programmare in Scala
- Convenzioni usate in questo libro
- Usare gli esempi di codice
- Ottenere gli esempi di codice
- Safari® Books Online
- Come contattarci
- Ringraziamenti
- Da zero a sessanta: una introduzione a Scala
- Perché Scala?
- Se siete programmatori Java…
- Se siete programmatori Ruby, Python, &c…
- Una introduzione a Scala
- Le seduzioni di Scala
- Installare Scala
- Per maggiori informazioni
- Un assaggio di Scala
- Un assaggio di concorrenza
- Riepilogo, e poi?
- Scrivere meno, fare di più
- In questo capitolo
- Punti e virgola
- Dichiarazioni di variabile
- Dichiarazioni di metodo
- Argomenti con nome e argomenti predefiniti per i metodi (Scala 2.8)
- Annidare le definizioni di metodo
- Inferire le informazioni di tipo
- Letterali
- Letterali interi
- Letterali in virgola mobile
- Letterali booleani
- Letterali carattere
- Letterali stringa
- Letterali simbolo
- Tuple
Option
, Some
e None
: evitare i valori nulli- Organizzare il codice in file e spazi di nomi
- Importare i tipi e i loro membri
- Le importazioni sono relative
- Tipi astratti e tipi parametrici
- Parole riservate
- Riepilogo, e poi?
- Completare l’indispensabile
- Operatore? Operatore?
- Zucchero sintattico
- Metodi senza parentesi e punti
- Regole di precedenza
- Linguaggi domain-specific
- Le istruzioni
if
in Scala - Le espressioni
for
in Scala- Un semplice esempio
- Filtrare gli elementi
- Produrre gli elementi in uscita
- Ambito esteso
- Altri costrutti di ciclo
- I cicli
while
in Scala - I cicli
do
/while
in Scala - Espressioni generatore
- Operatori condizionali
- Pattern matching
- Una semplice corrispondenza
- Usare variabili nelle corrispondenze
- Corrispondenze sul tipo
- Corrispondenze sulle sequenze
- Corrispondenze su tuple (e guardie)
- Corrispondenze sulle classi
case
- Corrispondenze su espressioni regolari
- Legare variabili annidate nelle clausole
case
- Usare le clausole
try
, catch
e finally
- Considerazioni conclusive sul pattern matching
- Enumerazioni
- Riepilogo, e poi?
- Tratti
- Una introduzione ai tratti
- I tratti come mixin
- Tratti impilabili
- Costruire i tratti
- Classe o tratto?
- Riepilogo, e poi?
- Programmazione orientata agli oggetti in Scala: le basi
- I concetti di base per classi e oggetti
- Classi genitore
- I costruttori in Scala
- Invocare i costruttori della classe genitore
- Classi annidate
- Regole di visibilità
- Visibilità pubblica
- Visibilità protetta
- Visibilità privata
- Visibilità ristretta privata e protetta
- Considerazioni conclusive sulla visibilità
- Riepilogo, e poi?
- Programmazione orientata agli oggetti in Scala: elementi avanzati
- Ridefinire i membri di classi e tratti
- Tentare di ridefinire le dichiarazioni
final
- Ridefinire i metodi astratti e concreti
- Ridefinire i campi astratti e concreti
- Ridefinire i campi astratti e concreti nei tratti
- Ridefinire i campi astratti e concreti nelle classi
- Ridefinire i tipi astratti
- Quando i metodi di accesso e i campi sono indistinguibili: il principio di accesso uniforme
- Oggetti associati
- Il metodo
apply
- Il metodo
unapply
apply
e unapply
per le collezioni- Gli oggetti associati e i metodi statici di Java
- Classi
case
- Zucchero sintattico per le operazioni binarie
- Il metodo
copy
in Scala 2.8 - L’ereditarietà nelle classi
case
- L’uguaglianza tra oggetti
- Il metodo
equals
- I metodi
==
e !=
- I metodi
ne
ed eq
- L’uguaglianza tra array e il metodo
sameElements
- Riepilogo, e poi?
- Il sistema a oggetti di Scala
- L’oggetto
Predef
- Classi e oggetti: dove sono i membri statici?
- Oggetti package
- Gerarchie di classi sigillate
- La gerarchia di tipi di Scala
- Linearizzare la gerarchia di un oggetto
- Riepilogo, e poi?
- La programmazione funzionale in Scala
- Che cos’è la programmazione funzionale?
- Le funzioni in matematica
- Variabili che non sono tali
- La programmazione funzionale in Scala
- Letterali funzione e chiusure
- Purezza interna ed esterna
- Ricorsione
- La ricorsione in coda e la sua ottimizzazione
- Trampolino per le ricorsioni in coda
- Strutture dati funzionali
- Le liste nella programmazione funzionale
- Le mappe nella programmazione funzionale
- Gli insiemi nella programmazione funzionale
- Altre strutture dati nella programmazione funzionale
- Operazioni comuni sulle strutture dati funzionali
- Attraversamento
- Mappatura
- Filtraggio
- Ripiegamento e riduzione
Option
funzionali
- Pattern matching
- Funzioni parziali
- Currying
- Impliciti
- Conversioni implicite
- Parametri di funzione impliciti
- Considerazioni conclusive sugli impliciti
- Invocazione per nome o per valore
- Valori ritardati
- Riepilogo: le astrazioni per i componenti funzionali
- Programmazione concorrente robusta e scalabile con gli attori
- I problemi dello stato condiviso e sincronizzato
- Gli attori
- Gli attori in astratto
- Gli attori in Scala
- Inviare messaggi agli attori
- La mailbox
- Gli attori nel dettaglio
- Attori efficaci
- La concorrenza tradizionale in Scala: thread ed eventi
- Thread una tantum
- Usare
java.util.concurrent
- Eventi
- Riepilogo, e poi?
- Lavorare con XML in Scala
- Leggere XML
- Esplorare XML
- Usare XML con i cicli e il pattern matching
- Scrivere XML
- Un esempio reale
- Riepilogo, e poi?
- Linguaggi domain-specific in Scala
- DSL interni
- Un DSL interno per il libro paga
- Notazione infissa per gli operatori
- Conversioni implicite e tipi definiti dall’utente
- Metodi
apply
- Implementazione delle regole di pagamento come DSL
- DSL interni: considerazioni conclusive
- DSL esterni con la combinazione di riconoscitori
- Informazioni sulla combinazione di riconoscitori
- Un DSL esterno per il libro paga
- Una implementazione in Scala della grammatica di un DSL esterno
- Generare le buste paga con un DSL esterno
- DSL interni vs. esterni: considerazioni finali
- Riepilogo, e poi?
- Il sistema di tipi di Scala
- La riflessione sui tipi
- Capire i tipi parametrici
- Manifesti
- Metodi parametrici
- Varianza in caso di ereditarietà
- La varianza dei tipi mutabili
- Un confronto tra la varianza in Scala e in Java
- Note di implementazione
- Limiti sui tipi
- Limiti superiori sui tipi
- Limiti inferiori sui tipi
- Uno sguardo più attento alle liste
- Viste e limiti sulle viste
Nothing
e Null
- Capire i tipi astratti
- Un confronto tra tipi parametrici e tipi astratti
- Tipi dipendenti dal percorso
- Il percorso
C.this
- Il percorso
C.super
- Il percorso
path.x
- Tipi valore
- Designatori di tipo
- Tuple
- Tipi parametrici
- Tipi annotati
- Tipi composti
- Tipi infissi
- Tipi funzione
- Proiezioni di tipo
- Tipi singleton
- Annotazioni self-type
- Tipi strutturali
- Tipi esistenziali
- Strutture dati infinite ed esecuzione ritardata
- Riepilogo, e poi?
- La progettazione di applicazioni
- Annotazioni
- Un confronto tra enumerazioni e pattern matching
- Considerazioni su annotazioni ed enumerazioni
- Le enumerazioni a confronto con le classi
case
e il pattern matching
- Un confronto tra
null
e Option
Option
e le espressioni for
- Le eccezioni e le alternative
- Astrazioni scalabili
- Regole di visibilità a grana fine
- La composizione dei mixin
- Annotazioni self-type e membri tipo astratti
- La progettazione efficace dei tratti
- I pattern di progettazione
- Il pattern Visitor: un’alternativa migliore
- L’iniezione di dipendenza in Scala: il pattern Cake
- Una progettazione migliore con la progettazione per contratto
- Riepilogo, e poi?
- Strumenti, librerie e IDE per Scala
- Strumenti a riga di comando
- Lo strumento scalac a riga di comando
- Lo strumento scala a riga di comando
- Gli strumenti scalap, javap e jad a riga di comando
- Lo strumento scaladoc a riga di comando
- Lo strumento sbaz a riga di comando
- Lo strumento fsc a riga di comando
- Strumenti di assemblaggio
- Integrazione con gli IDE
- Eclipse
- IntelliJ
- NetBeans
- Editor di testo
- Sviluppo guidato dai test in Scala
- ScalaTest
- Specs
- ScalaCheck
- Altre librerie e strumenti degni di nota per Scala
- Lift
- Scalaz
- Scalax
- MetaScala
- JavaRebel
- Varie librerie minori
- Interoperabilità con Java
- I generici in Java e Scala
- Usare le funzioni Scala in Java
- Proprietà JavaBeans
- I tipi
AnyVal
e i tipi primitivi in Java - Nomi Scala nel codice Java
- Interoperabilità con le librerie Java
- AspectJ
- Spring
- Terracotta
- Hadoop
- Riepilogo, e poi?
- Glossario
- Riferimenti
© 2008–9 O’Reilly Media
© 2009–10 Giulio Piancastelli per la traduzione italiana