scala: primeiros passos com o paradigma funcional · apresentando scala por que utilizar scala?...

33
Introdu¸c˜ ao Paradigma Funcional Sintaxe Exemplos Perguntas Scala: Primeiros passos com o paradigma funcional Diego Saraiva [email protected] Ronualdo Maciel [email protected] 28 de Outubro de 2010 Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Upload: others

Post on 15-Jul-2020

19 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Scala: Primeiros passos com o paradigmafuncional

Diego Saraiva [email protected] Maciel [email protected]

28 de Outubro de 2010

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 2: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Sumario

1 IntroducaoApresentando ScalaPor que utilizar Scala?Uma Linguagem Escalavel

2 Paradigma Funcional

3 Sintaxe

4 Exemplos

5 Perguntas

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 3: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Sumario

1 IntroducaoApresentando ScalaPor que utilizar Scala?Uma Linguagem Escalavel

2 Paradigma Funcional

3 Sintaxe

4 Exemplos

5 Perguntas

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 4: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Sumario

1 IntroducaoApresentando ScalaPor que utilizar Scala?Uma Linguagem Escalavel

2 Paradigma Funcional

3 Sintaxe

4 Exemplos

5 Perguntas

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 5: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Sumario

1 IntroducaoApresentando ScalaPor que utilizar Scala?Uma Linguagem Escalavel

2 Paradigma Funcional

3 Sintaxe

4 Exemplos

5 Perguntas

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 6: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Sumario

1 IntroducaoApresentando ScalaPor que utilizar Scala?Uma Linguagem Escalavel

2 Paradigma Funcional

3 Sintaxe

4 Exemplos

5 Perguntas

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 7: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Apresentando ScalaPor que utilizar Scala?

Introducao

Exigencias do mercado atual

Utilizacao efetiva de maquinas multi-core por programasconcorrentes,Criacao de aplicacoes distribuıdas voltadas para a Web oupara a Internet.

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 8: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Apresentando ScalaPor que utilizar Scala?

Introducao

Linguagens

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 9: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Apresentando ScalaPor que utilizar Scala?

Introducao

Programacao orientada a objetos

Estilo imperativoTenta simular o mundo realA computacao e realizada em termos de estados eexpressoes que podem mudar o estado do programa.

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 10: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Apresentando ScalaPor que utilizar Scala?

Introducao

A Programacao Funcional

Estilo de programacao baseado no uso de funcoesFuncoes sao entidades de 1a classeToda a programacao e baseada na avaliacao de expressoespara gerar valores.Cada valor tem um tipo associado.Funcoes podem ser nomeadas ou anonimas (lambda)

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 11: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Apresentando ScalaPor que utilizar Scala?

Introducao

Scala

O nome Scala significa “linguagem escalavel”Projetada para integrar linguagem orientada a objetos eprogramacao funcionalExecuta na JVM

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 12: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Apresentando ScalaPor que utilizar Scala?

Scala

Historico

O design comecou em 2001 na Ecole PolytechniqueFederale de Lausanne por Matin OderskyPrimeiro release na plataforma Java: no fim de 2003 einıcio de 2004Versao para plataforma .NET liberada em Junho de 2004

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 13: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Apresentando ScalaPor que utilizar Scala?

Scala

Por que utilizar Scala?

Linguagem hıbrida: simplicidade de funcional + poder deobjetosFortemente tipadaLinguagem ConcisaMultiplataforma: JVM e .NET

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 14: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Introducao a programacao funcional

Entidades de primeira-classe

Entidades que podem ser passadas como parametroPodem ser retornadas como resultadoPodem ser armazenadas em estruturas de dados

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 15: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

A Programacao Funcional

Modelo computacional

Funcao de x em y : Mapeamento de valores de entrada emvalores de saıdaAusencia de estado e comandos (atribuicao + controle)

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 16: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Paradigma Funcional

Mudando o foco

sem lacos?sem efeitos colaterais?sem mudar o valor de variaveis?

Aplicacoes

Verificacao de programas: checagem de corretudePrincıpio da invariancia.

Otimizacao de programas para computacao paralela

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 17: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Paradigma Funcional

Linguagem Funcional

O corpo de uma funcao e uma expressaoA aplicacao da funcao a um argumento retorna um valor(expressao)Um programa e uma expressao

O contexto

Mapeamento de identificadores (nomes de funcao) emdefinicoes de funcaoMapeamento de identificadores em valores

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 18: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Sintaxe

Variaveis

1 va l s = ” He l lo World”2

3 var i = 14

5 pr i va t e var j = 3

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 19: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Sintaxe

Definicao de metodos

1 de f ad i c i ona r ( x : Int , y : Int ) : Int = {2 x + y3 }4

5 de f ad i c i ona r ( x : Int , y : Int ) = x + y6

7 de f fazerAlgumaCoisa ( t ex t : S t r ing ) {8 // fazendo alguma co i s a9 }

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 20: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Sintaxe

Chamadas a metodos

1 meuObjeto . meuMetodo (1 )2 meuObjeto meuMetodo (1 )3 meuObjeto meuMetodo 14

5 meuObjeto . outroMetodo (1 , 2)6 meuObjeto outroMetodo (1 , 2)7

8 meuObjeto . metodoSemParametros ( )9 meuObjeto . metodoSemParametros

10 meuObjeto metodoSemParametros

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 21: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Sintaxe

Classes - Scala

1 c l a s s Pessoa ( va l nome : S t r ing )

Classes - Java

1 pub l i c c l a s s Pessoa{2 pr i va t e f i n a l S t r ing nome ;3

4 pub l i c Pessoa ( S t r ing nome) { t h i s . nome = nome ;}5

6 pub l i c S t r ing getNome ( ) { re turn nome ;}7 }

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 22: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Sintaxe

Classes - Scala

1 c l a s s Pessoa ( var nome : S t r ing )

Classes - Java

1 pub l i c c l a s s Pessoa{2 pr i va t e S t r ing nome ;3

4 pub l i c Pessoa ( S t r ing nome) { t h i s . nome = nome}5

6 pub l i c void getNome ( ) { re turn nome ;}7

8 pub l i c void setNome ( St r ing nome) { t h i s . nome = nome ;}9 }

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 23: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Sintaxe

If

1 i f ( condicao ) {2 // pr ime i ro caso3 } e l s e i f ( outraCondicao ) {4 // segundo caso5 } e l s e {6 // entao7 }

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 24: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Sintaxe

For

1 f o r ( i <− 1 to 5) {2 . . .3 }4

5 f o r ( i <− 1 un t i l 5) {6 . . .7 }8

9 f o r ( s <− args ) {10 p r i n t l n ( s )11 }

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 25: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Sintaxe

While

1 whi le ( condicao ) {2 . . . .3 }4

5 do {6 . . .7 } whi le ( condicao )

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 26: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Sintaxe

Try

1 whi le ( condicao ) {2 . . . .3 }4

5 do {6 . . .7 } whi le ( condicao )

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 27: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Principais conceitos

Funcoes como entidades de primeira ordem

As funcoes podem ser criadas em qualquer lugar doprogramaAs funcoes podem armazenadas em estruturas de dadosAs funcoes podem ser passadas como argumento paraoutras funcoesAs funcoes podem retornar outras funcoes como resultados

1 ( x : Int , y : Int ) => x + y

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 28: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Principais conceitos

Funcoes de alta-ordem

Recebem uma ou mais funcoes como entradaRetornam uma funcao como saıda

Exemplo: map

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 29: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Principais conceitos

Closures

Um closure e uma funcao que referencia variaveis livres nocontexto lexico.Funcao anonima definida on-the-fly dentro de uma funcaoou expressaoUma closure pode ser definida pelo compilador comoresultado de outra funcaoClosure e diferente de uma funcao anonima

1 va l incremento = 12 va l ad ic ionar Incremento = (x : Int ) => x + incremento

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 30: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Principais conceitos

Currying

Uma funcao ”curried”transforma uma funcao que recebemultiplos parametros em uma funcao que pode ser chamadacomo uma cadeia de funcoes que recebem somente umparametro cada vez.

Visao informal

Uma funcao ”curried”quando ela possui mais de uma lista deparametros, sendo assim, a mesma funcao e invocada em cadeiapara cada lista de parametro.

1 de f funcaoCurr ied (x : Int ) ( y : Int ) = x + y

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 31: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Principais conceitos

Pattern Matching

Pattern matching e uma forma de associar nomes a coisas epossivelmente quebrar as expressoes em sub-expressoes aomesmo tempo em que associa cada sub-expressao a cosias.

Reconhecer valoresAssociar variaveis para reconhecer valores“Quebrar”valores em partes

1 va l r e s = myObject match {2 case i : Int i f i == 1 => ”Found an i n t ”3 case s : S t r ing => ”Found a St r ing ”4 case other => ”Unknown ” + other5 }

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 32: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Exemplos

Some code. . .

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional

Page 33: Scala: Primeiros passos com o paradigma funcional · Apresentando Scala Por que utilizar Scala? Introdu˘c~ao Exig^encias do mercado atual Utiliza˘c~ao efetiva de m aquinas multi-core

IntroducaoParadigma Funcional

SintaxeExemplosPerguntas

Fim

Perguntas ???

Diego, Ronualdo Scala: Primeiros passos com o paradigma funcional