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

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

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

    1. Scala Uma breve(breve mesmo) introdução @paulosuzart
    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. Nesta apresentação  História  Apresentando Scala  Funcional? Como assim?  Quem usa?  Comunidade/Livros/personalidades  Ferramentas  Exemplos
    4. Agenda  História <-  Apresentando Scala  Funcional? Como assim?  Quem usa?  Comunidade/Livros/personalidades  Ferramentas  Exemplos
    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. Saindo na frente Enquanto o Java era lançado, Odersky apresentava PIZZA (1996). Generics + High-order Functions + Pattern Matching
    7. Agenda  História  Apresentando Scala <-  Funcional? Como assim?  Quem usa?  Comunidade/Livros/personalidades  Ferramentas  Exemplos
    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. Apresentando Scala  Estática, com sabor de dinâmica (sem verbose) val name = \"Felino\" // a string  Scala val age = 23 // a Int def upper(s: String) = s toUpperCase val up = upper(name) // FELINO String name = \"Joshua\"; Integer age = new Integer(8); Java public String upper(final String s) { return s.toUpperCase(); } String upper = upper(name);
    10. Por que estática?  Diminui a possibilidade de erros em Run-time  Refactoring  Documentação  Manutenção
    11. Apresentando Scala  Compilada, mas com cara de script println(\"Hello Acc, I'm a Script\") class Person(age: Int) {   println(\"My age is \" + 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. 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. 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. Apresentando Scala  Traits (principal unidade de reuso) abstract class Animal { def walk : String }  trait Injury extends Animal {                             abstract override def walk = super.walk +  \" But I'm injured :( \" } class Dog extends Animal {  def walk = \"I'm walking.\" } 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. Hierarquia x Linearidade
    16. Agenda  História  Apresentando Scala  Funcional? Como assim? <-  Quem usa?  Comunidade/Livros/personalidades  Ferramentas  Exemplos
    17. Funcional? Como assim? [...] style of programming that emphasizes \"first-class\" functions that are \"pure\". R. Mark Volkmann
    18. Alonzo Church - 1930 Lambda Calculus λ x. x + 2  f(x) = x + 2
    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. 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. 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. 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. 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. 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. 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, \"Gabriel\") val (age, name) = (p.age, p.name) age: Int = 18 name: String = Gabriel
    26. E tem muito mais, Acredite!
    27. Agenda  História  Apresentando Scala  Funcional? Como assim?  Quem usa?  Comunidade/Livros/personalidades <-  Ferramentas  Exemplos
    28. Comunidade/Livros www.scala-lang.org
    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. Agenda  História  Apresentando Scala  Funcional? Como assim?  Quem usa?  Comunidade/Livros/personalidades <-  Ferramentas  Exemplos
    31. Ferramentas (algumas)  lift web (MVC)  Scala/xml  Maven-scala-pluguin  ScalaTest  InteliJ/NetBeas/Eclipse plugin  sbt – Simple Build Tool  Scala X-Ray
    32. Agenda  História  Apresentando Scala  Funcional? Como assim?  Quem usa?  Comunidade/Livros/personalidades <-  Ferramentas  Exemplos
    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. Exemplos (inline XML) class Person(val name : String, val age : Int) val p = new Person(\"Felino\", 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. 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 \\\\ \"person\"       name <­ p \\ \"name\"       age <­ p \\\"age\"       nameV = name.text       ageV = Integer.parseInt(age.text)  } println (\"Name: \"+ nameV +\", age: \"+ ageV)
    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. Exemplo
    38. Exemplo (métodos)
    39. Encontre o código do exemplo aqui: http://dl.getdropbox.com/u/180764/mycache/index.html
    40. Fim

    + paulosuzartpaulosuzart, 5 months ago

    custom

    529 views, 0 favs, 1 embeds more stats

    Uma breve introdução a Scala, essa fantástica li more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 529
      • 482 on SlideShare
      • 47 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 0
    Most viewed embeds
    • 47 views on http://codemountain.wordpress.com

    more

    All embeds
    • 47 views on http://codemountain.wordpress.com

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories