SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
Jug Ancona
Onofrio Panzarino
Twitter: @onof80
onofrio.panzarino@gmail.com
http://it.linkedin.com/in/onofriopanzarino
http://www.google.com/profiles/onofrio.panzarino
Agenda
Scala
 Scopo del linguaggio
 Caratteristiche principali
 Demos
 Vantaggi vs Java
 Scala in practice
 Swing
 Web
why
 Processori sempre più multi-core
 Le applicazioni devono supportare sempre più
parallelismo per sfruttare la CPU
 L’avvento di Web 2.0 porta ad un numero di
interazioni tra sistemi sempre più elevato
 Le applicazioni devono essere sempre più SCALAbili
 Soluzioni
 Sviluppare applicazioni sempre più multi-thread
 Lock, Shared Memory, Thread Pools, …
 Utilizzare paradigmi che supportano scalabilità e
parallelismo naturalmente
why (2)
 Functional Programming (1930s!)
 Oggetti immutabili
 Thread safe: no lock
 Predicibilità: parallelizzazione
 Collaborazione tramite messaggi
 No shared memory
 Funzioni = oggetti che operano su oggetti
 Thread safe: no side effects
Java developer’s frustrations
 Value types e Reference types
 Collections
 Verbosità
 getFoo(), setFoo()
 add(), remove(), register(), unregister()
 XML
 Casting
 NullPointerException
 Equals e ==
 Operatori? 
 Multithreading
 SCAlable LAnguage
 Martin Odersky
 “Designed to grow with demands of its users”
 “Runs on JVM”
 “All Java libraries”!
 A blend of OOP and FP in statically typed language
 Statically typed!
 … but explicit types in just the right spaces
what
how
 Scala = OOP + FP
 OOP
 Objects are responsible for themselves
 Class - Trait - Object
 Mixin composition
 Ogni cosa è un oggetto(anche il nulla!)
 FP
 Le funzioni sono oggetti
 Strutture dati immutabili
 No side effects
how (2)
 Compatibile
 Conciso
 High level
 Statically typed
 Meno errori run-time
 Meno unit testing (Testing proves presence of errors, not their absence)
 Generics
 Type inference
 Refactoring made easy
Let’s go!
object Program {
def main(args: Array[String]): Unit = {
println(“Hello world!”)
}
}
object – class - trait
 Scala supporta le classi
 class
 Scala supporta i singleton nativamente
 object
 Le classi figlie devono specificare esplicitamente i
metodi ridefiniti con la keyword override.
 I trait sono simili alle interfacce ma ammettono
implementazioni parziali o totali
 Si possono aggiungere anche molti trait. La risoluzione
dei metodi avviene attraverso uno specifico algoritmo.
val
 Scala favorisce l’uso di codice scritto in modo
funzionale
 Variabili non riassegnabili:
val a : Int = 280
a = 281 // Errore!
val b : MyMutable = new MyMutable(“test”)
b = new MyMutable(“test2”) // Errore!
b.myString = “test2” // Ok
var
 Ma sono permesse le variabili riassegnabili
 Per esempio nei cicli while e do-while
var i = 0
i = i + 1;
 O nelle classi mutabili
 Si possono e si dovrebbero sempre evitare
 se non ci sono specifiche ragioni (performance,
interazione con codice Java esistente, …)
collections
 Iterable
 Seq
 Lists (immutable)
 Array (mutable)
 ListBuffer (mutable)
 ArrayBuffer (mutable)
 Queue (mutable |
immutable)
 Stack (mutable |
immutable)
 String (immutable)
 Set
 immutable.Set
 immutable.HashSet
 mutable.Set
 mutable.HashSet
 Map
 immutable.Map
 immutable.HashMap
 mutable.Map
 mutable.HashMap
maps
 val nums = Map("i" ->3, "ii" -> 2)
 Crea una mappa
 nums.contains("ii")
 Interroga la mappa
 nums("ii")
 Ottiene un valore dalla mappa
 nums += ("vi" -> 6)
 Aggiunge un elemento
 Se la mappa è immutable ritorna una nuova mappa (var)
 Altrimenti aggiunge l’elemento alla mappa (val o var)
 nums – "ii“
 rimuove un elemento dalla mappa
Class e Object
Java e Scala a confronto con le collection
Funzioni
 Le funzioni sono oggetti
 Possono essere passate come parametri
 Essere anonime
 Per essere scalabili, non devono avere side-effects:
 Concentrare le funzioni di I/O in punti ben precisi del
programma
 Non cambiare lo stato interno degli oggetti: oggetti
immutabili
 Ritornare sempre un valore (nota: tuple)
Trasformare un algoritmo da stile imperativo in funzionale
Pattern matching (1)
 Case classes
 case class MyCaseClass(name: String)
 Scala fornisce per questo tipo di classi
un’implementazione standard:
 Un factory method
 Tutti gli argomenti della classe sono usati come campi
immutabili della stessa
 toString, hashCode, equals
 Sono un po’ più ingombranti ma forniscono un modo
naturale per supportare il pattern matching.
Pattern matching (2)
 Si usano le keyword match e case
 Simile al classico switch – case, tranne che:
 L’argomento di match può essere qualsiasi oggetto
 È un’espressione (ritorna sempre un valore)
 Lancia un MatchError se il caso non è contemplato
 Si può usare un’espressione di default (con wildcard)
 L’espressione in case (pattern) può essere qualsiasi
oggetto, anche parzialmente specificato
 In genere è una case class!
Pattern matching (3)
 Essendo un’espressione
 Può essere utilizzata come parametro
 Può essere usata come partial function
 Esempio
val count = myObjects match {
a : Seq[Int] => a.reduceLeft ( _ + _ )
(x : Int, _ ) => x
_ => 1
}
Realizzare un semplificatore e valutatore di espressioni
matematiche
Ricerca in una lista
Extractors
 Il metodo apply può essere visto come un modo per trattare
un oggetto come una funzione (funtore)
 Il metodo unapply può essere visto come la funzione
inversa: dato un risultato ottiene gli argomenti
 Può essere usato per fare pattern matching:
object EMail {
def apply(user: String, domain: String)
= user +"@"+ domain
def unapply(str: String): Option[(String, String)] = {
val parts = str split "@“
if (parts.length == 2) Some(parts(0), parts(1)) else None
}
}
Utilizzare un extractor per valutare un’espressione
operators = methods
 Identificatore
 Uno o più simboli Unicode o ASCII printable characters
tranne lettere, cifre, parentesi, underscore, semicolon
(;), comma (,), punto (.)
 Esempi
 + ++ ::: <?> :-> <::
 Si definiscono come normali metodi
 Anche unari prefissi
 unary_-
Aggiungere un operatore agli interi
Utilizzo di mappe
Il supporto di Scala per XML
Riferimenti
 http://www.scala-lang.org/
 M. Odersky, L. Spoon, B. Venners, Programming in
Scala, Artima
 Completo, chiaro e dettagliato
 scala-user mailing list
 http://stackoverflow.com/questions/tagged/scala
 Blogs
 http://debasishg.blogspot.com/
 http://james-iry.blogspot.com/
Riferimenti (2)
 http://www.artima.com/index.jsp
 irc://irc.freenode.net/scala
 Le demo:
 http://github.com/onof/it.onof.demo.scala
Enjoy with

Weitere ähnliche Inhalte

Was ist angesagt? (6)

Data mining 04-funzionicustom-classioggetti
Data mining 04-funzionicustom-classioggettiData mining 04-funzionicustom-classioggetti
Data mining 04-funzionicustom-classioggetti
 
Introduzione a R
Introduzione a RIntroduzione a R
Introduzione a R
 
programmazione ad oggetti
programmazione ad oggettiprogrammazione ad oggetti
programmazione ad oggetti
 
Java5
Java5Java5
Java5
 
Presentazione primi principi oop
Presentazione primi principi oopPresentazione primi principi oop
Presentazione primi principi oop
 
Simulatore Grafico Per Reti Ottiche A Pacchetto
Simulatore Grafico Per Reti Ottiche A PacchettoSimulatore Grafico Per Reti Ottiche A Pacchetto
Simulatore Grafico Per Reti Ottiche A Pacchetto
 

Ähnlich wie Introduzione a scala prima parte

Programmazione ad oggetti
Programmazione ad oggettiProgrammazione ad oggetti
Programmazione ad oggetti
mariacaporale
 

Ähnlich wie Introduzione a scala prima parte (20)

Corso Java
Corso JavaCorso Java
Corso Java
 
Scala Programming Linux Day 2009
Scala Programming Linux Day 2009Scala Programming Linux Day 2009
Scala Programming Linux Day 2009
 
Java OCA teoria 1
Java OCA teoria 1Java OCA teoria 1
Java OCA teoria 1
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java Base
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, java
 
Java Lezione 1
Java Lezione 1Java Lezione 1
Java Lezione 1
 
Corso Object Oriented Analysis and Design
Corso Object Oriented Analysis and DesignCorso Object Oriented Analysis and Design
Corso Object Oriented Analysis and Design
 
Intro to JavaScript
Intro to JavaScriptIntro to JavaScript
Intro to JavaScript
 
Object Oriented with Java Programmazione Base
Object Oriented with Java Programmazione BaseObject Oriented with Java Programmazione Base
Object Oriented with Java Programmazione Base
 
Template
TemplateTemplate
Template
 
C# Language Evolution
C# Language EvolutionC# Language Evolution
C# Language Evolution
 
Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5
 
Java codestyle & tipstricks
Java codestyle & tipstricksJava codestyle & tipstricks
Java codestyle & tipstricks
 
Design Pattern
Design PatternDesign Pattern
Design Pattern
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018
 
Programmazione a oggetti tramite la macchina del caffé (pt. 3)
Programmazione a oggetti tramite la macchina del caffé (pt. 3)Programmazione a oggetti tramite la macchina del caffé (pt. 3)
Programmazione a oggetti tramite la macchina del caffé (pt. 3)
 
Riepilogo Java C/C++
Riepilogo Java C/C++Riepilogo Java C/C++
Riepilogo Java C/C++
 
Programmazione ad oggetti
Programmazione ad oggettiProgrammazione ad oggetti
Programmazione ad oggetti
 
corso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascriptcorso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascript
 
Il web 2.0
Il web 2.0Il web 2.0
Il web 2.0
 

Introduzione a scala prima parte

  • 1. Jug Ancona Onofrio Panzarino Twitter: @onof80 onofrio.panzarino@gmail.com http://it.linkedin.com/in/onofriopanzarino http://www.google.com/profiles/onofrio.panzarino
  • 2. Agenda Scala  Scopo del linguaggio  Caratteristiche principali  Demos  Vantaggi vs Java  Scala in practice  Swing  Web
  • 3. why  Processori sempre più multi-core  Le applicazioni devono supportare sempre più parallelismo per sfruttare la CPU  L’avvento di Web 2.0 porta ad un numero di interazioni tra sistemi sempre più elevato  Le applicazioni devono essere sempre più SCALAbili  Soluzioni  Sviluppare applicazioni sempre più multi-thread  Lock, Shared Memory, Thread Pools, …  Utilizzare paradigmi che supportano scalabilità e parallelismo naturalmente
  • 4. why (2)  Functional Programming (1930s!)  Oggetti immutabili  Thread safe: no lock  Predicibilità: parallelizzazione  Collaborazione tramite messaggi  No shared memory  Funzioni = oggetti che operano su oggetti  Thread safe: no side effects
  • 5. Java developer’s frustrations  Value types e Reference types  Collections  Verbosità  getFoo(), setFoo()  add(), remove(), register(), unregister()  XML  Casting  NullPointerException  Equals e ==  Operatori?   Multithreading
  • 6.  SCAlable LAnguage  Martin Odersky  “Designed to grow with demands of its users”  “Runs on JVM”  “All Java libraries”!  A blend of OOP and FP in statically typed language  Statically typed!  … but explicit types in just the right spaces what
  • 7. how  Scala = OOP + FP  OOP  Objects are responsible for themselves  Class - Trait - Object  Mixin composition  Ogni cosa è un oggetto(anche il nulla!)  FP  Le funzioni sono oggetti  Strutture dati immutabili  No side effects
  • 8. how (2)  Compatibile  Conciso  High level  Statically typed  Meno errori run-time  Meno unit testing (Testing proves presence of errors, not their absence)  Generics  Type inference  Refactoring made easy
  • 9. Let’s go! object Program { def main(args: Array[String]): Unit = { println(“Hello world!”) } }
  • 10. object – class - trait  Scala supporta le classi  class  Scala supporta i singleton nativamente  object  Le classi figlie devono specificare esplicitamente i metodi ridefiniti con la keyword override.  I trait sono simili alle interfacce ma ammettono implementazioni parziali o totali  Si possono aggiungere anche molti trait. La risoluzione dei metodi avviene attraverso uno specifico algoritmo.
  • 11. val  Scala favorisce l’uso di codice scritto in modo funzionale  Variabili non riassegnabili: val a : Int = 280 a = 281 // Errore! val b : MyMutable = new MyMutable(“test”) b = new MyMutable(“test2”) // Errore! b.myString = “test2” // Ok
  • 12. var  Ma sono permesse le variabili riassegnabili  Per esempio nei cicli while e do-while var i = 0 i = i + 1;  O nelle classi mutabili  Si possono e si dovrebbero sempre evitare  se non ci sono specifiche ragioni (performance, interazione con codice Java esistente, …)
  • 13. collections  Iterable  Seq  Lists (immutable)  Array (mutable)  ListBuffer (mutable)  ArrayBuffer (mutable)  Queue (mutable | immutable)  Stack (mutable | immutable)  String (immutable)  Set  immutable.Set  immutable.HashSet  mutable.Set  mutable.HashSet  Map  immutable.Map  immutable.HashMap  mutable.Map  mutable.HashMap
  • 14. maps  val nums = Map("i" ->3, "ii" -> 2)  Crea una mappa  nums.contains("ii")  Interroga la mappa  nums("ii")  Ottiene un valore dalla mappa  nums += ("vi" -> 6)  Aggiunge un elemento  Se la mappa è immutable ritorna una nuova mappa (var)  Altrimenti aggiunge l’elemento alla mappa (val o var)  nums – "ii“  rimuove un elemento dalla mappa
  • 15. Class e Object Java e Scala a confronto con le collection
  • 16. Funzioni  Le funzioni sono oggetti  Possono essere passate come parametri  Essere anonime  Per essere scalabili, non devono avere side-effects:  Concentrare le funzioni di I/O in punti ben precisi del programma  Non cambiare lo stato interno degli oggetti: oggetti immutabili  Ritornare sempre un valore (nota: tuple)
  • 17. Trasformare un algoritmo da stile imperativo in funzionale
  • 18. Pattern matching (1)  Case classes  case class MyCaseClass(name: String)  Scala fornisce per questo tipo di classi un’implementazione standard:  Un factory method  Tutti gli argomenti della classe sono usati come campi immutabili della stessa  toString, hashCode, equals  Sono un po’ più ingombranti ma forniscono un modo naturale per supportare il pattern matching.
  • 19. Pattern matching (2)  Si usano le keyword match e case  Simile al classico switch – case, tranne che:  L’argomento di match può essere qualsiasi oggetto  È un’espressione (ritorna sempre un valore)  Lancia un MatchError se il caso non è contemplato  Si può usare un’espressione di default (con wildcard)  L’espressione in case (pattern) può essere qualsiasi oggetto, anche parzialmente specificato  In genere è una case class!
  • 20. Pattern matching (3)  Essendo un’espressione  Può essere utilizzata come parametro  Può essere usata come partial function  Esempio val count = myObjects match { a : Seq[Int] => a.reduceLeft ( _ + _ ) (x : Int, _ ) => x _ => 1 }
  • 21. Realizzare un semplificatore e valutatore di espressioni matematiche Ricerca in una lista
  • 22. Extractors  Il metodo apply può essere visto come un modo per trattare un oggetto come una funzione (funtore)  Il metodo unapply può essere visto come la funzione inversa: dato un risultato ottiene gli argomenti  Può essere usato per fare pattern matching: object EMail { def apply(user: String, domain: String) = user +"@"+ domain def unapply(str: String): Option[(String, String)] = { val parts = str split "@“ if (parts.length == 2) Some(parts(0), parts(1)) else None } }
  • 23. Utilizzare un extractor per valutare un’espressione
  • 24. operators = methods  Identificatore  Uno o più simboli Unicode o ASCII printable characters tranne lettere, cifre, parentesi, underscore, semicolon (;), comma (,), punto (.)  Esempi  + ++ ::: <?> :-> <::  Si definiscono come normali metodi  Anche unari prefissi  unary_-
  • 25. Aggiungere un operatore agli interi Utilizzo di mappe Il supporto di Scala per XML
  • 26. Riferimenti  http://www.scala-lang.org/  M. Odersky, L. Spoon, B. Venners, Programming in Scala, Artima  Completo, chiaro e dettagliato  scala-user mailing list  http://stackoverflow.com/questions/tagged/scala  Blogs  http://debasishg.blogspot.com/  http://james-iry.blogspot.com/
  • 27. Riferimenti (2)  http://www.artima.com/index.jsp  irc://irc.freenode.net/scala  Le demo:  http://github.com/onof/it.onof.demo.scala Enjoy with