paradigmas de programação funcional + objetos no liquidificador com scala

15
@abstractj Paradigmas de programação Funcional + Objetos no liquidificador com Scala Sunday, September 12, 2010

Upload: bruno-oliveira

Post on 19-Jun-2015

1.159 views

Category:

Technology


2 download

DESCRIPTION

Aspectos introdutórios de Scala e suas diferenças em relação a Java, e como integrar as duas linguagens na mesma aplicação

TRANSCRIPT

Page 1: Paradigmas de programação funcional + objetos no liquidificador com scala

@abstractj

Paradigmas de programação Funcional + Objetos

no liquidificador com Scala

Sunday, September 12, 2010

Page 2: Paradigmas de programação funcional + objetos no liquidificador com scala

ScalaOOFuncional

• Imutabilidade

• Suporte a concorrência

• Inferência de tipos

• Código mais conciso

• Escopo

• Regras de visibilidade

• Polimorfismo

• ...e outras cositas mas

Sunday, September 12, 2010

Page 3: Paradigmas de programação funcional + objetos no liquidificador com scala

Funções1 class MandaProCaps {2 def upper(strings: String*): Seq[String] = {3 strings.map((s:String) => s.toUpperCase())4 }5 }6 val manda = new MandaProCaps7 Console.println(manda.upper("AfddAfdT","dfaAfddA","dfdaAfdAfd"))

Sunday, September 12, 2010

Page 4: Paradigmas de programação funcional + objetos no liquidificador com scala

Simplicidade 1 public class User { 2 3 public static final int idade = 10 4 5 private String login; 6 private String password; 7 private String name; 8 27 //gets e sets para cada atributo28 }

1 class User {2 3 val idade:Int = 204 var login = ""5 var password = ""6 var name = ""7 }

1 val cores = List("Azul", "Vermelho", "Abobora", "Azul Piscina", "Azul Celeste")2 for (cor <- cores3 if cor.contains("Azul")4 ) println(cor)

Sunday, September 12, 2010

Page 5: Paradigmas de programação funcional + objetos no liquidificador com scala

Singletons12 object RunInferenceTypes{13 def main(args: Array[String]) = {15 val infer = new InferenceTypes16 println("Calcula: " + infer.calcula(4))17 println("Faz nada: " + infer.naoFazNada)18 println("X: " + infer.x)19 println("Y: " + infer.y)20 }21 }

Sunday, September 12, 2010

Page 6: Paradigmas de programação funcional + objetos no liquidificador com scala

Inferência de tipos 1 class InferenceTypes { 2 val x = 1 + 3 * 6 3 val y = x.toString 4 5 def calcula(valor: Int) = { 6 "Valor: " + x + y + valor 7 } 8 def naoFazNada { 9 println("Faco nada nao")10 }11 }

Sunday, September 12, 2010

Page 7: Paradigmas de programação funcional + objetos no liquidificador com scala

Tuples 1 class MilkShake { 2 def opcoes(pedido: Any) = { 3 ("banana", "maca", "morango") 4 } 5 } 6 object AskMilkShake { 7 def main(args: Array[String]) = { 8 val shake = new MilkShake 9 val (x, y, z) = shake.opcoes("Tem o que?")10 11 println(shake.opcoes("Tem o que?"))12 println("Shake: " + x)13 println("Shake: " + y)14 println("Shake: " + z)15 }16 }

Sunday, September 12, 2010

Page 8: Paradigmas de programação funcional + objetos no liquidificador com scala

Pattern Matching1 val tipos = List(1, "QconSP", 10.2)2 for (tipo <- tipos) {3 tipo match {4 case a: Int => println("Inteiro: " + a)5 case b: String => println("String: " + b)6 case c: Double => println("Double: " + c)7 }8 }

1 val lista1 = List(1, 3, 23, 90) 2 val lista2 = List(4, 18, 52, 7) 3 4 for (l <- List(lista1, lista2)) { 5 l match { 6 case List(_, 3, _, _) => println("3") 7 case List(_, _, _, 7) => println("7") 8 } 9 }

Sunday, September 12, 2010

Page 9: Paradigmas de programação funcional + objetos no liquidificador com scala

Deep Match 1 //Script Scala 2 case class Musica(nome: String, estilo: String) 3 4 val rock = new Musica("Metallica", "Rock") 5 val classica = new Musica("Bach", "Classico") 6 7 for (musica <- List(rock, classica)) { 8 musica match { 9 case Musica("Metallica", "Rock") => println("Metaleiro")10 case Musica("Bach", "Classico") => println("Erudito")11 }12 }

Sunday, September 12, 2010

Page 10: Paradigmas de programação funcional + objetos no liquidificador com scala

Yielding 78 def list = { 79 80 val usersDatabase: List[User] = this.dao.listAll() 81 82 val users = for { 83 user <- usersFromDatabase 84 user.setLogin(s.getLogin()) 85 user.setName(s.getName()) 86 } yield user 87 result.include("users", users) 88 }

Sunday, September 12, 2010

Page 11: Paradigmas de programação funcional + objetos no liquidificador com scala

E minha app Java?!!!

Sunday, September 12, 2010

Page 12: Paradigmas de programação funcional + objetos no liquidificador com scala

Scala & VRaptor 62 @Path(Array("/")) 63 @Get 64 def home() = { 65 dao.refresh(userInfo.getUser()) 66 result.include("dvdTypes", DvdType.values) 67 }

69 @Path("/") 70 @Get 71 public void home() { 72 dao.refresh(userInfo.getUser()); 73 result.include("dvdTypes", DvdType.values()); 74 }

Sunday, September 12, 2010

Page 13: Paradigmas de programação funcional + objetos no liquidificador com scala

Scala & VRaptor 62 @Path(Array("/")) 63 @Get 64 def home() = { 65 dao.refresh(userInfo.getUser()) 66 result.include("dvdTypes", DvdType.values) 67 }

69 @Path("/") 70 @Get 71 public void home() { 72 dao.refresh(userInfo.getUser()); 73 result.include("dvdTypes", DvdType.values()); 74 }

Sunday, September 12, 2010

Page 14: Paradigmas de programação funcional + objetos no liquidificador com scala

Ferramentas

• Scala IDE

• Vim

• Netbeans

• Intellij

• SBT

• Gradle

Desenvolvimento Build

Sunday, September 12, 2010

Page 15: Paradigmas de programação funcional + objetos no liquidificador com scala

Pra onde ir?!- http://www.scala-lang.org- http://www.planetscala.com- http://days2010.scala-lang.org- http://github.com/abstractj

Sunday, September 12, 2010