Your SlideShare is downloading. ×
Scala: Linguagem Promissora e Funcional
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Scala: Linguagem Promissora e Funcional

351
views

Published on

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.

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.

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
351
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. ScalaLinguagem Promissora e FuncionalMichael Schuenck dos Santos@michaelssTRE-TOquinta-feira, 25 de abril de 13
  • 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. “Iluminar suamente???”quinta-feira, 25 de abril de 13
  • 4. Java x .NETquinta-feira, 25 de abril de 13
  • 5. Por que o interesseem Scala?quinta-feira, 25 de abril de 13
  • 6. TwitterPor que o interesse em Scala?quinta-feira, 25 de abril de 13
  • 7. A Infra e aJVMPor que o interesse em Scala?quinta-feira, 25 de abril de 13
  • 8. Paradigma FuncionalPor que o interesse em Scala?quinta-feira, 25 de abril de 13
  • 9. Interesse por LP’sPor que o interesse em Scala?quinta-feira, 25 de abril de 13
  • 10. quinta-feira, 25 de abril de 13
  • 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. PerformanceO Google fez um benchmark entreC++, Java, Scala e GoUso de memóriaquinta-feira, 25 de abril de 13
  • 13. PerformanceTempoquinta-feira, 25 de abril de 13
  • 14. PerformanceLinhas de códigoquinta-feira, 25 de abril de 13
  • 15. Quem está usandoquinta-feira, 25 de abril de 13
  • 16. Característicasquinta-feira, 25 de abril de 13
  • 17. Uso de {chaves}CaracterísticasMuitas vezesdispensáveisquinta-feira, 25 de abril de 13
  • 18. Uso de {chaves}Características; só com mais de umaexpressão por linhaquinta-feira, 25 de abril de 13
  • 19. ConcisãoCaracterísticasquinta-feira, 25 de abril de 13
  • 20. Alto NívelCaracterísticasquinta-feira, 25 de abril de 13
  • 21. CaracterísticasTipagem Estáticaquinta-feira, 25 de abril de 13
  • 22. CaracterísticasTipagem Estática• Erros em tempo de compilaçãoquinta-feira, 25 de abril de 13
  • 23. CaracterísticasTipagem Estática• Erros em tempo de compilação• Refatorações segurasquinta-feira, 25 de abril de 13
  • 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. Documentação, Clareza ePrevisibilidadevar a = “Palmas”if (b == 0) a = 10println(a * 2) ?Característicasquinta-feira, 25 de abril de 13
  • 26. TipagemC#C++Estática DinâmicaJSCaracterísticasquinta-feira, 25 de abril de 13
  • 27. CaracterísticasOOFuncionalquinta-feira, 25 de abril de 13
  • 28. ParadigmaOO FuncionalC# Haskell SchemeLispSmalltalk F#quinta-feira, 25 de abril de 13
  • 29. OO(Scala) > OO(Java)quinta-feira, 25 de abril de 13
  • 30. Não se utiliza os tiposprimitivosOO(Scala) > OO(Java)intdoublefloatbooleanbyteshortIntDoubleFloatBooleanByteShortquinta-feira, 25 de abril de 13
  • 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. 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. Paradigma Funcionalquinta-feira, 25 de abril de 13
  • 34. Interesse crescente:Resolver o problemade multicoresParadigma Funcionalquinta-feira, 25 de abril de 13
  • 35. OO FuncionalComposição deobjetosComposição defunçõesAlteração deestadoAusência deefeitos colateraisAlgoritmositerativosAlgoritmosrecursivosParadigma Funcionalquinta-feira, 25 de abril de 13
  • 36. Imutabilidadeval x = “Olá”x = “Oi” // Errovar y = “Olá”y = “Oi” // OkParadigma Funcionalquinta-feira, 25 de abril de 13
  • 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. 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. 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. 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. Curryingdef mul(x: Int) = (y: Int) => x * yParadigma Funcionalquinta-feira, 25 de abril de 13
  • 42. Curryingdef mul(x: Int) = (y: Int) => x * ymul(6)(7)Paradigma Funcionalquinta-feira, 25 de abril de 13
  • 43. Curryingdef mul(x: Int) = (y: Int) => x * ymul(6)(7) (y: Int) => 6 * yParadigma Funcionalquinta-feira, 25 de abril de 13
  • 44. Recursos de Scalaquinta-feira, 25 de abril de 13
  • 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. 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. Pré-condiçõesclass Racional(x: Int, y: Int) {require(y > 0, “Denominador deve serpositivo”)...}Recursos de Scalaquinta-feira, 25 de abril de 13
  • 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. 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. 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. 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. AtoresRecursos de Scala≅quinta-feira, 25 de abril de 13
  • 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. REPL: Read-Evaluate-Print Loopquinta-feira, 25 de abril de 13
  • 55. Frameworksquinta-feira, 25 de abril de 13
  • 56. Adoçãoquinta-feira, 25 de abril de 13
  • 57. Nivelamento da EquipeAdoçãoquinta-feira, 25 de abril de 13
  • 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. • Comunidade pequena, mas crescente• Acessível• Scala Days scaladays.orgAdoçãoquinta-feira, 25 de abril de 13
  • 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. ScalaLinguagem Promissora e FuncionalMichael Schuenck dos Santos@michaelssTRE-TOif (abertoPerguntas())publico.perguntar()quinta-feira, 25 de abril de 13