Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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
Upcoming SlideShare
Loading in …5
×

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

2,017 views

Published on

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

Published in: Technology, News & Politics
  • Be the first to comment

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

×