Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Scala: Linguagem Promissora e Funcional

Scala: Linguagem Promissora e Funcional

Apresentação no FORTES 2013 (Fórum de Tecnologias e Engenharia de Software). Aborda a motivação do porquê estudar Scala, quais os benefícios da programação funcional e recursos de Scala.

michaelss

April 24, 2013
Tweet

More Decks by michaelss

Other Decks in Programming

Transcript

  1. Eu • Bacharel em Sistemas de Informação pelo CEULP/ ULBRA

    e ex-professor • Mestre em Sistemas e Computação pela UFRN e ex-professor • Analista de Sistemas no TRE-TO quinta-feira, 25 de abril de 13
  2. A Infra e a JVM Por que o interesse em

    Scala? quinta-feira, 25 de abril de 13
  3. História 2001 2003 2004 Início do projeto de Scala Redesign:

    versão 2.0 Primeiro release público, para a JVM 2006 Liberada para .NET 2011 Martin Odersky funda a Typesafe, que logo recebe um investimento de US$ 3 milhões Martin Odersky Prof. na Univ. de Lausanne (Suíça) Criador de Generics e do compilador Java quinta-feira, 25 de abril de 13
  4. Performance O Google fez um benchmark entre C++, Java, Scala

    e Go Uso de memória quinta-feira, 25 de abril de 13
  5. Performance O Google fez um benchmark entre C++, Java, Scala

    e Go Uso de memória quinta-feira, 25 de abril de 13
  6. Performance O Google fez um benchmark entre C++, Java, Scala

    e Go Uso de memória quinta-feira, 25 de abril de 13
  7. Uso de {chaves} Características ; só com mais de uma

    expressão por linha quinta-feira, 25 de abril de 13
  8. Características Tipagem Estática • Erros em tempo de compilação •

    Refatorações seguras quinta-feira, 25 de abril de 13
  9. Características Tipagem Estática • Erros em tempo de compilação •

    Refatorações seguras • Scala: inferência de tipos quinta-feira, 25 de abril de 13
  10. Documentação, Clareza e Previsibilidade var a = “Palmas” if (b

    == 0) a = 10 println(a * 2) ? Características quinta-feira, 25 de abril de 13
  11. Não se utiliza os tipos primitivos OO(Scala) > OO(Java) int

    double float boolean byte short Int Double Float Boolean Byte Short quinta-feira, 25 de abril de 13
  12. Operadores unários e binários são métodos OO(Scala) > OO(Java) 1

    + 2 == 1.+(2) quinta-feira, 25 de abril de 13
  13. Estrutura Retorno: obrigatório em funções recursivas Dispensável se retorno Unit

    Parâmetros return desnecessário Argumento padrão obrigatórias p/ mais de uma linha quinta-feira, 25 de abril de 13
  14. OO Funcional Composição de objetos Composição de funções Alteração de

    estado Ausência de efeitos colaterais Algoritmos iterativos Algoritmos recursivos Paradigma Funcional quinta-feira, 25 de abril de 13
  15. Imutabilidade val x = “Olá” x = “Oi” // Erro

    var y = “Olá” y = “Oi” // Ok Paradigma Funcional quinta-feira, 25 de abril de 13
  16. Funções de Ordem Superior Podem ser passadas e retornadas def

    op(x: Int, y: Int, f: (Int, Int) => Int): Int = f(x, y) Paradigma Funcional quinta-feira, 25 de abril de 13
  17. Funções de Ordem Superior Podem ser passadas e retornadas def

    op(x: Int, y: Int, f: (Int, Int) => Int): Int = f(x, y) def soma(a: Int, b: Int) = a + b op(1, 2, soma) Paradigma Funcional quinta-feira, 25 de abril de 13
  18. Funções Anônimas def op(x: Int, y: Int, f: (Int, Int)

    => Int): Int = f(x, y) op(1, 2, (a: Int, b: Int) => a + b) Paradigma Funcional quinta-feira, 25 de abril de 13
  19. Funções Anônimas def op(x: Int, y: Int, f: (Int, Int)

    => Int): Int = f(x, y) op(1, 2, (a: Int, b: Int) => a + b) Paradigma Funcional quinta-feira, 25 de abril de 13
  20. Currying def mul(x: Int) = (y: Int) => x *

    y Paradigma Funcional quinta-feira, 25 de abril de 13
  21. Currying def mul(x: Int) = (y: Int) => x *

    y mul(6)(7) Paradigma Funcional quinta-feira, 25 de abril de 13
  22. Currying def mul(x: Int) = (y: Int) => x *

    y mul(6)(7) (y: Int) => 6 * y Paradigma Funcional quinta-feira, 25 de abril de 13
  23. for for (i <- 1 to 10) println(i) for (i

    <- 1 to 9; j <- 1 to 9) println(i) for (i <- 1 to 9 if i != 5) println(i) val x = for (i <- 1 to 9) yield i * i //(1, 4, 9, 16, 25, 36, ..., 81) Recursos de Scala quinta-feira, 25 de abril de 13
  24. O método apply • Uma espécie de método padrão “Michael”(1)

    // “i” Classe String tem o método: def apply(n: Int): Char Recursos de Scala quinta-feira, 25 de abril de 13
  25. Pré-condições class Racional(x: Int, y: Int) { require(y > 0,

    “Denominador deve ser positivo”) ... } Recursos de Scala quinta-feira, 25 de abril de 13
  26. Traits trait Plural { def pluralizar(x: String) = x +

    “s” } trait Dupla { def duplicar(x: String) = x + x } class MyString(x: String) extends Plural with Dupla { } Recursos de Scala quinta-feira, 25 de abril de 13
  27. Pattern Matching var sinal = ... val ch: Char =

    ... ch match { case ‘+’ => sinal = 1 case ‘-’ => sinal = -1 case _ => sinal = 0 } Recursos de Scala quinta-feira, 25 de abril de 13
  28. Pattern Matching (2) var sinal = ... val ch: Char

    = ... sinal = ch match { case ‘+’ => 1 case ‘-’ => -1 case _ => 0 } Recursos de Scala quinta-feira, 25 de abril de 13
  29. Pattern Matching (3) def getInt(obj: Any) = obj match {

    case x: Int => x case s: String => Integer.parseInt(s) case _: BigInt => Int.MaxValue case _=> 0 } Recursos de Scala quinta-feira, 25 de abril de 13
  30. Otimização de Tail- Recursion Tail-recursion: não é necessário computar o

    resultado de chamadas recursivas Recursos de Scala quinta-feira, 25 de abril de 13
  31. • Curva de aprendizado • Código Java-like no início •

    Uso das demais funcionalidades de Scala depois Adoção quinta-feira, 25 de abril de 13
  32. • Comunidade pequena, mas crescente • Acessível • Scala Days

    scaladays.org Adoção quinta-feira, 25 de abril de 13
  33. Scala Linguagem Promissora e Funcional Michael Schuenck dos Santos @michaelss

    TRE-TO if (abertoPerguntas()) publico.perguntar() quinta-feira, 25 de abril de 13