ScalaLinguagem Promissora e FuncionalMichael Schuenck dos Santos@michaelssTRE-TOquinta-feira, 25 de abril de 13
Eu• Bacharel em Sistemas deInformação pelo CEULP/ULBRA e ex-professor• Mestre em Sistemas eComputação pela UFRN eex-profes...
“Iluminar suamente???”quinta-feira, 25 de abril de 13
Java x .NETquinta-feira, 25 de abril de 13
Por que o interesseem Scala?quinta-feira, 25 de abril de 13
TwitterPor que o interesse em Scala?quinta-feira, 25 de abril de 13
A Infra e aJVMPor que o interesse em Scala?quinta-feira, 25 de abril de 13
Paradigma FuncionalPor que o interesse em Scala?quinta-feira, 25 de abril de 13
Interesse por LP’sPor que o interesse em Scala?quinta-feira, 25 de abril de 13
quinta-feira, 25 de abril de 13
História2001 2003 2004Início doprojeto deScalaRedesign:versão 2.0Primeiroreleasepúblico, para aJVM2006Liberadapara .NET201...
PerformanceO Google fez um benchmark entreC++, Java, Scala e GoUso de memóriaquinta-feira, 25 de abril de 13
PerformanceTempoquinta-feira, 25 de abril de 13
PerformanceLinhas de códigoquinta-feira, 25 de abril de 13
Quem está usandoquinta-feira, 25 de abril de 13
Característicasquinta-feira, 25 de abril de 13
Uso de {chaves}CaracterísticasMuitas vezesdispensáveisquinta-feira, 25 de abril de 13
Uso de {chaves}Características; só com mais de umaexpressão por linhaquinta-feira, 25 de abril de 13
ConcisãoCaracterísticasquinta-feira, 25 de abril de 13
Alto NívelCaracterísticasquinta-feira, 25 de abril de 13
CaracterísticasTipagem Estáticaquinta-feira, 25 de abril de 13
CaracterísticasTipagem Estática• Erros em tempo de compilaçãoquinta-feira, 25 de abril de 13
CaracterísticasTipagem Estática• Erros em tempo de compilação• Refatorações segurasquinta-feira, 25 de abril de 13
CaracterísticasTipagem Estática• Erros em tempo de compilação• Refatorações seguras• Scala: inferência de tiposquinta-feir...
Documentação, Clareza ePrevisibilidadevar a = “Palmas”if (b == 0) a = 10println(a * 2) ?Característicasquinta-feira, 25 de...
TipagemC#C++Estática DinâmicaJSCaracterísticasquinta-feira, 25 de abril de 13
CaracterísticasOOFuncionalquinta-feira, 25 de abril de 13
ParadigmaOO FuncionalC# Haskell SchemeLispSmalltalk F#quinta-feira, 25 de abril de 13
OO(Scala) > OO(Java)quinta-feira, 25 de abril de 13
Não se utiliza os tiposprimitivosOO(Scala) > OO(Java)intdoublefloatbooleanbyteshortIntDoubleFloatBooleanByteShortquinta-fei...
Operadores unários ebinários são métodosOO(Scala) > OO(Java)1 + 2==1.+(2)quinta-feira, 25 de abril de 13
EstruturaRetorno:obrigatório emfunções recursivasDispensável seretorno UnitParâmetrosreturndesnecessárioArgumentopadrãoobr...
Paradigma Funcionalquinta-feira, 25 de abril de 13
Interesse crescente:Resolver o problemade multicoresParadigma Funcionalquinta-feira, 25 de abril de 13
OO FuncionalComposição deobjetosComposição defunçõesAlteração deestadoAusência deefeitos colateraisAlgoritmositerativosAlg...
Imutabilidadeval x = “Olá”x = “Oi” // Errovar y = “Olá”y = “Oi” // OkParadigma Funcionalquinta-feira, 25 de abril de 13
Funções de OrdemSuperiorPodem ser passadas e retornadasdef op(x: Int, y: Int, f: (Int, Int) => Int): Int =f(x, y)Paradigma...
Funções de OrdemSuperiorPodem ser passadas e retornadasdef op(x: Int, y: Int, f: (Int, Int) => Int): Int =f(x, y)def soma(...
Funções Anônimasdef op(x: Int, y: Int, f: (Int, Int) => Int): Int =f(x, y)op(1, 2, (a: Int, b: Int) => a + b)Paradigma Fun...
Funções Anônimasdef op(x: Int, y: Int, f: (Int, Int) => Int): Int =f(x, y)op(1, 2, (a: Int, b: Int) => a + b)Paradigma Fun...
Curryingdef mul(x: Int) = (y: Int) => x * yParadigma Funcionalquinta-feira, 25 de abril de 13
Curryingdef mul(x: Int) = (y: Int) => x * ymul(6)(7)Paradigma Funcionalquinta-feira, 25 de abril de 13
Curryingdef mul(x: Int) = (y: Int) => x * ymul(6)(7) (y: Int) => 6 * yParadigma Funcionalquinta-feira, 25 de abril de 13
Recursos de Scalaquinta-feira, 25 de abril de 13
forfor (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...
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): CharRecursos ...
Pré-condiçõesclass Racional(x: Int, y: Int) {require(y > 0, “Denominador deve serpositivo”)...}Recursos de Scalaquinta-fei...
Traitstrait Plural {def pluralizar(x: String) = x + “s”}trait Dupla {def duplicar(x: String) = x + x}class MyString(x: Str...
Pattern Matchingvar sinal = ...val ch: Char = ...ch match {case ‘+’ => sinal = 1case ‘-’ => sinal = -1case _ => sinal = 0}...
Pattern Matching (2)var sinal = ...val ch: Char = ...sinal = ch match {case ‘+’ => 1case ‘-’ => -1case _ => 0}Recursos de ...
Pattern Matching (3)def getInt(obj: Any) = obj match {case x: Int => xcase s: String => Integer.parseInt(s)case _: BigInt ...
AtoresRecursos de Scala≅quinta-feira, 25 de abril de 13
Otimização de Tail-RecursionTail-recursion: não é necessário computaro resultado de chamadas recursivasRecursos de Scalaqu...
REPL: Read-Evaluate-Print Loopquinta-feira, 25 de abril de 13
Frameworksquinta-feira, 25 de abril de 13
Adoçãoquinta-feira, 25 de abril de 13
Nivelamento da EquipeAdoçãoquinta-feira, 25 de abril de 13
• Curva de aprendizado• Código Java-like no início• Uso das demais funcionalidades deScala depoisAdoçãoquinta-feira, 25 de...
• Comunidade pequena, mas crescente• Acessível• Scala Days scaladays.orgAdoçãoquinta-feira, 25 de abril de 13
Recursos• http://twitter.github.com/scala_school/• http://twitter.github.com/effectivescala/• https://www.coursera.org/cou...
ScalaLinguagem Promissora e FuncionalMichael Schuenck dos Santos@michaelssTRE-TOif (abertoPerguntas())publico.perguntar()q...
Próximos SlideShares
Carregando em…5
×

Scala: Linguagem Promissora e Funcional

955 visualizações

Publicada em

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.

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
955
No SlideShare
0
A partir de incorporações
0
Número de incorporações
88
Ações
Compartilhamentos
0
Downloads
17
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Scala: Linguagem Promissora e Funcional

  1. 1. ScalaLinguagem Promissora e FuncionalMichael Schuenck dos Santos@michaelssTRE-TOquinta-feira, 25 de abril de 13
  2. 2. Eu• Bacharel em Sistemas deInformação pelo CEULP/ULBRA e ex-professor• Mestre em Sistemas eComputação pela UFRN eex-professor• Analista de Sistemas noTRE-TOquinta-feira, 25 de abril de 13
  3. 3. “Iluminar suamente???”quinta-feira, 25 de abril de 13
  4. 4. Java x .NETquinta-feira, 25 de abril de 13
  5. 5. Por que o interesseem Scala?quinta-feira, 25 de abril de 13
  6. 6. TwitterPor que o interesse em Scala?quinta-feira, 25 de abril de 13
  7. 7. A Infra e aJVMPor que o interesse em Scala?quinta-feira, 25 de abril de 13
  8. 8. Paradigma FuncionalPor que o interesse em Scala?quinta-feira, 25 de abril de 13
  9. 9. Interesse por LP’sPor que o interesse em Scala?quinta-feira, 25 de abril de 13
  10. 10. quinta-feira, 25 de abril de 13
  11. 11. História2001 2003 2004Início doprojeto deScalaRedesign:versão 2.0Primeiroreleasepúblico, para aJVM2006Liberadapara .NET2011Martin Odersky funda aTypesafe, que logorecebe um investimentode US$ 3 milhõesMartin OderskyProf. na Univ. deLausanne(Suíça)Criador de Generics edo compilador Javaquinta-feira, 25 de abril de 13
  12. 12. PerformanceO Google fez um benchmark entreC++, Java, Scala e GoUso de memóriaquinta-feira, 25 de abril de 13
  13. 13. PerformanceTempoquinta-feira, 25 de abril de 13
  14. 14. PerformanceLinhas de códigoquinta-feira, 25 de abril de 13
  15. 15. Quem está usandoquinta-feira, 25 de abril de 13
  16. 16. Característicasquinta-feira, 25 de abril de 13
  17. 17. Uso de {chaves}CaracterísticasMuitas vezesdispensáveisquinta-feira, 25 de abril de 13
  18. 18. Uso de {chaves}Características; só com mais de umaexpressão por linhaquinta-feira, 25 de abril de 13
  19. 19. ConcisãoCaracterísticasquinta-feira, 25 de abril de 13
  20. 20. Alto NívelCaracterísticasquinta-feira, 25 de abril de 13
  21. 21. CaracterísticasTipagem Estáticaquinta-feira, 25 de abril de 13
  22. 22. CaracterísticasTipagem Estática• Erros em tempo de compilaçãoquinta-feira, 25 de abril de 13
  23. 23. CaracterísticasTipagem Estática• Erros em tempo de compilação• Refatorações segurasquinta-feira, 25 de abril de 13
  24. 24. CaracterísticasTipagem Estática• Erros em tempo de compilação• Refatorações seguras• Scala: inferência de tiposquinta-feira, 25 de abril de 13
  25. 25. Documentação, Clareza ePrevisibilidadevar a = “Palmas”if (b == 0) a = 10println(a * 2) ?Característicasquinta-feira, 25 de abril de 13
  26. 26. TipagemC#C++Estática DinâmicaJSCaracterísticasquinta-feira, 25 de abril de 13
  27. 27. CaracterísticasOOFuncionalquinta-feira, 25 de abril de 13
  28. 28. ParadigmaOO FuncionalC# Haskell SchemeLispSmalltalk F#quinta-feira, 25 de abril de 13
  29. 29. OO(Scala) > OO(Java)quinta-feira, 25 de abril de 13
  30. 30. Não se utiliza os tiposprimitivosOO(Scala) > OO(Java)intdoublefloatbooleanbyteshortIntDoubleFloatBooleanByteShortquinta-feira, 25 de abril de 13
  31. 31. Operadores unários ebinários são métodosOO(Scala) > OO(Java)1 + 2==1.+(2)quinta-feira, 25 de abril de 13
  32. 32. EstruturaRetorno:obrigatório emfunções recursivasDispensável seretorno UnitParâmetrosreturndesnecessárioArgumentopadrãoobrigatórias p/mais de uma linhaquinta-feira, 25 de abril de 13
  33. 33. Paradigma Funcionalquinta-feira, 25 de abril de 13
  34. 34. Interesse crescente:Resolver o problemade multicoresParadigma Funcionalquinta-feira, 25 de abril de 13
  35. 35. OO FuncionalComposição deobjetosComposição defunçõesAlteração deestadoAusência deefeitos colateraisAlgoritmositerativosAlgoritmosrecursivosParadigma Funcionalquinta-feira, 25 de abril de 13
  36. 36. Imutabilidadeval x = “Olá”x = “Oi” // Errovar y = “Olá”y = “Oi” // OkParadigma Funcionalquinta-feira, 25 de abril de 13
  37. 37. Funções de OrdemSuperiorPodem ser passadas e retornadasdef op(x: Int, y: Int, f: (Int, Int) => Int): Int =f(x, y)Paradigma Funcionalquinta-feira, 25 de abril de 13
  38. 38. Funções de OrdemSuperiorPodem ser passadas e retornadasdef op(x: Int, y: Int, f: (Int, Int) => Int): Int =f(x, y)def soma(a: Int, b: Int) = a + bop(1, 2, soma)Paradigma Funcionalquinta-feira, 25 de abril de 13
  39. 39. Funções Anônimasdef op(x: Int, y: Int, f: (Int, Int) => Int): Int =f(x, y)op(1, 2, (a: Int, b: Int) => a + b)Paradigma Funcionalquinta-feira, 25 de abril de 13
  40. 40. Funções Anônimasdef op(x: Int, y: Int, f: (Int, Int) => Int): Int =f(x, y)op(1, 2, (a: Int, b: Int) => a + b)Paradigma Funcionalquinta-feira, 25 de abril de 13
  41. 41. Curryingdef mul(x: Int) = (y: Int) => x * yParadigma Funcionalquinta-feira, 25 de abril de 13
  42. 42. Curryingdef mul(x: Int) = (y: Int) => x * ymul(6)(7)Paradigma Funcionalquinta-feira, 25 de abril de 13
  43. 43. Curryingdef mul(x: Int) = (y: Int) => x * ymul(6)(7) (y: Int) => 6 * yParadigma Funcionalquinta-feira, 25 de abril de 13
  44. 44. Recursos de Scalaquinta-feira, 25 de abril de 13
  45. 45. forfor (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 Scalaquinta-feira, 25 de abril de 13
  46. 46. 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): CharRecursos de Scalaquinta-feira, 25 de abril de 13
  47. 47. Pré-condiçõesclass Racional(x: Int, y: Int) {require(y > 0, “Denominador deve serpositivo”)...}Recursos de Scalaquinta-feira, 25 de abril de 13
  48. 48. Traitstrait Plural {def pluralizar(x: String) = x + “s”}trait Dupla {def duplicar(x: String) = x + x}class MyString(x: String) extends Pluralwith Dupla { }Recursos de Scalaquinta-feira, 25 de abril de 13
  49. 49. Pattern Matchingvar sinal = ...val ch: Char = ...ch match {case ‘+’ => sinal = 1case ‘-’ => sinal = -1case _ => sinal = 0}Recursos de Scalaquinta-feira, 25 de abril de 13
  50. 50. Pattern Matching (2)var sinal = ...val ch: Char = ...sinal = ch match {case ‘+’ => 1case ‘-’ => -1case _ => 0}Recursos de Scalaquinta-feira, 25 de abril de 13
  51. 51. Pattern Matching (3)def getInt(obj: Any) = obj match {case x: Int => xcase s: String => Integer.parseInt(s)case _: BigInt => Int.MaxValuecase _=> 0}Recursos de Scalaquinta-feira, 25 de abril de 13
  52. 52. AtoresRecursos de Scala≅quinta-feira, 25 de abril de 13
  53. 53. Otimização de Tail-RecursionTail-recursion: não é necessário computaro resultado de chamadas recursivasRecursos de Scalaquinta-feira, 25 de abril de 13
  54. 54. REPL: Read-Evaluate-Print Loopquinta-feira, 25 de abril de 13
  55. 55. Frameworksquinta-feira, 25 de abril de 13
  56. 56. Adoçãoquinta-feira, 25 de abril de 13
  57. 57. Nivelamento da EquipeAdoçãoquinta-feira, 25 de abril de 13
  58. 58. • Curva de aprendizado• Código Java-like no início• Uso das demais funcionalidades deScala depoisAdoçãoquinta-feira, 25 de abril de 13
  59. 59. • Comunidade pequena, mas crescente• Acessível• Scala Days scaladays.orgAdoçãoquinta-feira, 25 de abril de 13
  60. 60. Recursos• http://twitter.github.com/scala_school/• http://twitter.github.com/effectivescala/• https://www.coursera.org/course/progfun• E livros (só em inglês por enquanto)quinta-feira, 25 de abril de 13
  61. 61. ScalaLinguagem Promissora e FuncionalMichael Schuenck dos Santos@michaelssTRE-TOif (abertoPerguntas())publico.perguntar()quinta-feira, 25 de abril de 13

×