Scala
Uma breve(breve mesmo)
introdução
@paulosuzart
Bio do apresentador

Desenvolvedor Java Enterprise há 5 anos
    Atualmente atua como consultor
             Oracle | BEA
...
Nesta apresentação
   História
   Apresentando Scala
   Funcional? Como assim?
   Quem usa?
   Comunidade/Livros/pers...
Agenda
   História <-
   Apresentando Scala
   Funcional? Como assim?
   Quem usa?
   Comunidade/Livros/personalidade...
História
   Nascida em 2001
   Por Martin Odersky
       Criador do compilador de
        referência Java
       Co-au...
Saindo na frente

Enquanto o Java era lançado, Odersky
     apresentava PIZZA (1996).
            Generics +
      High-or...
Agenda
   História
   Apresentando Scala <-
   Funcional? Como assim?
   Quem usa?
   Comunidade/Livros/personalidade...
Apresentando Scala
   Linguagem de propósito geral
   Orientada a objetos e funcional,
    portanto HÍBRIDA.
   Pronta ...
Apresentando Scala
   Estática, com sabor de dinâmica                 (sem
    verbose)


            val name = quot;Fel...
Por que estática?
   Diminui a possibilidade de erros em
    Run-time
   Refactoring
   Documentação
   Manutenção
Apresentando Scala
   Compilada, mas com cara de script
         println(quot;Hello Acc, I'm a Scriptquot;)

         cla...
Apresentando Scala
   if sempre ”ternários”
     val x = 21; val y 10
     val max = if (x > y) x else y
     max: Int = ...
Apresentando Scala
   Operadores são métodos
    val sum = 1.+(2) // 1 + 2

   Tuplas
    val (name, age) = (”Felino”, 2...
Apresentando Scala
   Traits   (principal unidade de reuso)

abstract class Animal { def walk : String } 
trait Injury ex...
Hierarquia x Linearidade
Agenda
   História
   Apresentando Scala
   Funcional? Como assim? <-
   Quem usa?
   Comunidade/Livros/personalidade...
Funcional? Como assim?


      [...] style of programming that
              emphasizes quot;first-classquot;
            ...
Alonzo Church - 1930
  Lambda Calculus
      λ x. x + 2 
      f(x) = x + 2
   Imutabilidade
   Clojure
   Currying
   Funções são cidadãs de primeiro nível
   Funções de alto nível
   Pattern...
Imutabilidade
    val p = new Person
    p = new person

    <console>:6: error: reassignment to val
           p = new Pe...
Clojure
def makeOlder(p: Person) = println(p.age + more)

   #Fail! What is more? Tentemos outra vez:
val more = 10 //iss...
Currying
    Funções aplicadas a multiplas listas de argumentos

    Facilita criação novos controles de código

    Lo...
Funções são cidadãs de primeiro nível

   Tudo é uma função
   Funções tem literais e valores
   Uma vairável pode arma...
Funções de alto nível
   Scala Lists possui um grande conjunto de funções
    de alto nível

   Recebem funções como par...
Pattern Match
   Um dos aspectos mais interessantes da linguagem

   Pode ser comparado a um case Java para qualquer
   ...
E tem muito mais, Acredite!
Agenda
   História
   Apresentando Scala
   Funcional? Como assim?
   Quem usa?
   Comunidade/Livros/personalidades <...
Comunidade/Livros



  www.scala-lang.org
Personalidades
Jonas Bonér - @jboner         Robey - @robey
jonasboner.com                robey.lag.net
BEA (Jrockit) :: T...
Agenda
   História
   Apresentando Scala
   Funcional? Como assim?
   Quem usa?
   Comunidade/Livros/personalidades <...
Ferramentas         (algumas)




   lift web (MVC)
   Scala/xml
   Maven-scala-pluguin
   ScalaTest
   InteliJ/NetBe...
Agenda
   História
   Apresentando Scala
   Funcional? Como assim?
   Quem usa?
   Comunidade/Livros/personalidades <...
Exemplos        (high-order functions)


val numbers = List.range(1,6)
numbers: List[Int] = List(1,2,3,4,5)
numbers foreac...
Exemplos (inline XML)
class Person(val name : String, val age : Int)
val p = new Person(quot;Felinoquot;, 24)

val xml = 
...
Exemplos (XPath)
val document = 
<persons>
 <person><name>Paulo</name><age>26</age></person>
 <person><name>Caro</name><ag...
Exemplo prático
   Gerenciador de Cache (OSCache)
   Consulta o cache e atualiza se entrada não
    existe (método <<)
...
Exemplo
Exemplo (métodos)
Encontre o código do exemplo aqui:




http://dl.getdropbox.com/u/180764/mycache/index.html
Fim
Prochain SlideShare
Chargement dans…5
×

Scala - Uma Breve (breve mesmo) Introdução

2 003 vues

Publié le

Uma breve introdução a Scala, essa fantástica linguagem que venho estudando no último ano.

0 commentaire
3 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
2 003
Sur SlideShare
0
Issues des intégrations
0
Intégrations
324
Actions
Partages
0
Téléchargements
0
Commentaires
0
J’aime
3
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Scala - Uma Breve (breve mesmo) Introdução

  1. 1. Scala Uma breve(breve mesmo) introdução @paulosuzart
  2. 2. Bio do apresentador Desenvolvedor Java Enterprise há 5 anos Atualmente atua como consultor Oracle | BEA Pode ser lido em: codemountain.wordpress.com blog.rasea.org stackoverflow.com @paulosuzart
  3. 3. Nesta apresentação  História  Apresentando Scala  Funcional? Como assim?  Quem usa?  Comunidade/Livros/personalidades  Ferramentas  Exemplos
  4. 4. Agenda  História <-  Apresentando Scala  Funcional? Como assim?  Quem usa?  Comunidade/Livros/personalidades  Ferramentas  Exemplos
  5. 5. História  Nascida em 2001  Por Martin Odersky  Criador do compilador de referência Java  Co-autor do Java Generics  Influenciada por: Haskell, Erlang, OCaml, F#, C#, C, C ++, outras.
  6. 6. Saindo na frente Enquanto o Java era lançado, Odersky apresentava PIZZA (1996). Generics + High-order Functions + Pattern Matching
  7. 7. Agenda  História  Apresentando Scala <-  Funcional? Como assim?  Quem usa?  Comunidade/Livros/personalidades  Ferramentas  Exemplos
  8. 8. Apresentando Scala  Linguagem de propósito geral  Orientada a objetos e funcional, portanto HÍBRIDA.  Pronta pra criação de DSL  Extensível  ”Roda” na JVM. Transparência com Java e tudo executável na JMV :)
  9. 9. Apresentando Scala  Estática, com sabor de dinâmica (sem verbose) val name = quot;Felinoquot; // a string  Scala val age = 23 // a Int def upper(s: String) = s toUpperCase val up = upper(name) // FELINO String name = quot;Joshuaquot;; Integer age = new Integer(8); Java public String upper(final String s) { return s.toUpperCase(); } String upper = upper(name);
  10. 10. Por que estática?  Diminui a possibilidade de erros em Run-time  Refactoring  Documentação  Manutenção
  11. 11. Apresentando Scala  Compilada, mas com cara de script println(quot;Hello Acc, I'm a Scriptquot;) class Person(age: Int) {   println(quot;My age is quot; + age) } val p = new Person(21) save as hello.scala and then $ scala hello.scala Hello Acc, I'm a Script My age is 21
  12. 12. Apresentando Scala  if sempre ”ternários” val x = 21; val y 10 val max = if (x > y) x else y max: Int = 21  for podem retornar valor val numbers = List(1,2,3,4) val even =  for { i ← numbers if (i % 2 == 0) } yield i even: List[Int] = List(2, 4)
  13. 13. Apresentando Scala  Operadores são métodos val sum = 1.+(2) // 1 + 2  Tuplas val (name, age) = (”Felino”, 24) name: java.langString = Felino age: Ing = 24
  14. 14. Apresentando Scala  Traits (principal unidade de reuso) abstract class Animal { def walk : String }  trait Injury extends Animal {                             abstract override def walk = super.walk +  quot; But I'm injured :( quot; } class Dog extends Animal {  def walk = quot;I'm walking.quot; } val goodDog = new Dog goodDog.walk // I'm Walking val badDog = new Dog with Injury badDog walk // I'm Walking. But I'm injured :(
  15. 15. Hierarquia x Linearidade
  16. 16. Agenda  História  Apresentando Scala  Funcional? Como assim? <-  Quem usa?  Comunidade/Livros/personalidades  Ferramentas  Exemplos
  17. 17. Funcional? Como assim? [...] style of programming that emphasizes quot;first-classquot; functions that are quot;purequot;. R. Mark Volkmann
  18. 18. Alonzo Church - 1930 Lambda Calculus λ x. x + 2  f(x) = x + 2
  19. 19.  Imutabilidade  Clojure  Currying  Funções são cidadãs de primeiro nível  Funções de alto nível  Pattern Matching  Lazy evaluation
  20. 20. Imutabilidade val p = new Person p = new person <console>:6: error: reassignment to val        p = new Person  Menor quantidade de re-atribuições = menor possibilidade de erros  O estado não muda no decorrer do tempo  2 threads não podem alterar o estado de um objeto, ele é imutável  Concorrência fácil Mas use com responsabilidade
  21. 21. Clojure def makeOlder(p: Person) = println(p.age + more)  #Fail! What is more? Tentemos outra vez: val more = 10 //isso está fora da função def makeOlder(p: Person) = println(p.age + more)  #Win! Estamos fechando (closing/clojuring) o valor capturado de more  Flexibilidade no código, novas formas de resolver velhos problemas  Elegante!
  22. 22. Currying  Funções aplicadas a multiplas listas de argumentos  Facilita criação novos controles de código  Loan pattern fortemente baseado em Currying def useAndClose[T](closeable : {def close() : Unit}*)(op: => T) : T = {   try { op }   finally { for (c <­ closeable if c!= null) c close } }  //pode ser usada em seu Connection, ResultSet e CallableStatement assim: val myInfo = useAndClose(conn, cs, rs) {            cs.registerOutParameter(1, Types.VARCHAR)            cs getString 1      }  //Recupera a informação do banco e ainda fecha os recursos. :)
  23. 23. Funções são cidadãs de primeiro nível  Tudo é uma função  Funções tem literais e valores  Uma vairável pode armazenar uma função val pow = (x: Int) => x*x pow(2) // 4  Funções recebem funções def pow(x: Int)(op : Int => Int) = op(x) * op(x) Pow(2){ 3 + _ } // executa a função de soma 3 + 2 e   // eleva ao quadrado
  24. 24. Funções de alto nível  Scala Lists possui um grande conjunto de funções de alto nível  Recebem funções como parâmetro e executam algum processamento  Alto grau de flexibilidade  Inspira criatividade numbers foreach (x => println(x*x)) println( numbers reduceLeft(_ + _) )
  25. 25. Pattern Match  Um dos aspectos mais interessantes da linguagem  Pode ser comparado a um case Java para qualquer tipo de objeto, mas não é  Exige dedicação para entendimento e bom uso //fatorial com pattern match def fac(x : Int) : Int = x match {        case 0 => 1 case xpto => xpto * fac(xpto ­ 1)        }     //atribuições multiplas com pattern  match val p = new Person(18, quot;Gabrielquot;) val (age, name) = (p.age, p.name) age: Int = 18 name: String = Gabriel
  26. 26. E tem muito mais, Acredite!
  27. 27. Agenda  História  Apresentando Scala  Funcional? Como assim?  Quem usa?  Comunidade/Livros/personalidades <-  Ferramentas  Exemplos
  28. 28. Comunidade/Livros www.scala-lang.org
  29. 29. Personalidades Jonas Bonér - @jboner Robey - @robey jonasboner.com robey.lag.net BEA (Jrockit) :: Terracotta Twitter Alex Miller - @puredanger Ted Neward tech.puredanger.com blogs.tedneward.com BEA :: Terracotta IBM Articles Alex Payne - @al3x Paulo Suzart - @paulosuzart al3x.net codemountain in wordpress Twitter Accurate
  30. 30. Agenda  História  Apresentando Scala  Funcional? Como assim?  Quem usa?  Comunidade/Livros/personalidades <-  Ferramentas  Exemplos
  31. 31. Ferramentas (algumas)  lift web (MVC)  Scala/xml  Maven-scala-pluguin  ScalaTest  InteliJ/NetBeas/Eclipse plugin  sbt – Simple Build Tool  Scala X-Ray
  32. 32. Agenda  História  Apresentando Scala  Funcional? Como assim?  Quem usa?  Comunidade/Livros/personalidades <-  Ferramentas  Exemplos
  33. 33. Exemplos (high-order functions) val numbers = List.range(1,6) numbers: List[Int] = List(1,2,3,4,5) numbers foreach (x => print(x*x)) //1 4 9 16 25  numbers filter (_ > 3) foreach println // 4 5 println {  numbers reduceLeft(_+_) } // 15
  34. 34. Exemplos (inline XML) class Person(val name : String, val age : Int) val p = new Person(quot;Felinoquot;, 24) val xml =  <person><name>{p.name}</name><age>{p.age}</age> </person> xml: scala.xml.Elem =  <person> <name>Felino</name>    <age>24</age> </person>
  35. 35. Exemplos (XPath) val document =  <persons>  <person><name>Paulo</name><age>26</age></person>  <person><name>Caro</name><age>18</age></person> </persons> for { p <­ document  quot;personquot;       name <­ p  quot;namequot;       age <­ p quot;agequot;       nameV = name.text       ageV = Integer.parseInt(age.text)  } println (quot;Name: quot;+ nameV +quot;, age: quot;+ ageV)
  36. 36. Exemplo prático  Gerenciador de Cache (OSCache)  Consulta o cache e atualiza se entrada não existe (método <<)  Consulta o cache e retorna null se entrada não existe (método <<-)  Insere valores retornados de qualquer função (método >>)
  37. 37. Exemplo
  38. 38. Exemplo (métodos)
  39. 39. Encontre o código do exemplo aqui: http://dl.getdropbox.com/u/180764/mycache/index.html
  40. 40. Fim

×