SLIDE 1
Desvendando o Sistema de Tipos Do Scala Paulo Jcranky - - PowerPoint PPT Presentation
Desvendando o Sistema de Tipos Do Scala Paulo Jcranky - - PowerPoint PPT Presentation
Desvendando o Sistema de Tipos Do Scala Paulo Jcranky Siqueira @ @ Paulo.siqueira gmail.com / jcranky Quem Sou Eu ? Developer ( ) Scala, Java @ JCranky Quem Sou Eu ? Gamer Minecraft E outros Jogos Indie @ JCranky Quem
SLIDE 2
SLIDE 3
JCranky @
Quem Sou Eu?
Gamer
Minecraft E outros Jogos Indie
SLIDE 4
JCranky @
Quem Sou Eu?
Musician
Wannabe!
SLIDE 5
JCranky @
Para quem trabalho
TecSinapse
Dealers de carros LIP Inova
- e Pesquisa
– çã
SLIDE 6
JCranky @
Alvos:
Sistema de Tipos Varios Tipos de … Tipos Inferencia de Tipos Implicits
SLIDE 7
JCranky @
Sistema de Tipos
a type system is a collection of rules that assign a property called a type to the various constructs, such as variables, expressions, functions or modules)
– wikipedia
SLIDE 8
JCranky @
Sistema de Tipos
Limita o que podemos fazer com os elementos do c digo ó
SLIDE 9
JCranky @
Sistema de Tipos
Int
Valores inteiros entre e
- 2147483648
- 2147483648
SLIDE 10
JCranky @
Sistema de Tipos
String
Conjunto de caracteres
SLIDE 11
JCranky @
Sistema de Tipos
Char
Um nico caracter ú
SLIDE 12
JCranky @
Sistema de Tipos
JsValue
Qualquer implementacao trait da API de Json do Play ( )
SLIDE 13
JCranky @
Sistema de Tipos
JsValue
JsString, JsArray, JsNumber Etc
SLIDE 14
JCranky @
Inferencia de Tipos
Primitivos Classes Objetos
SLIDE 15
JCranky @
Inferencia de Tipos
Retorno de m todos / é Functions
SLIDE 16
JCranky @
Inferencia de Tipos
Alguns casos que N o funcionam ã
SLIDE 17
JCranky @
Inferencia de Tipos
Inferencia com Tipos Parametrizados
SLIDE 18
JCranky @
Tipos existenciais
Tipos Paramatrizados s o ã
- brigat rios
ó N o existem Raw Types ã “ ” como em JAva
SLIDE 19
JCranky @
Tipos existenciais
Pode ser problema ao integrar com Java
- ex. subitens
SLIDE 20
JCranky @
Inferencia: Boas Pr ticas á
Ajudar o compilador Ajudar nossos amiguinhos Documentar APIs
SLIDE 21
JCranky @
Inferencia: Boas Pr ticas á
Qual o tipo do nome? val nome = Some EasyForger (" ")
SLIDE 22
JCranky @
Inferencia: Boas Pr ticas á
E em java... N o use raw types ã
SLIDE 23
JCranky @
M todos com Tipos é Parametrizados
def foo T param: T [ ]( ) foo File new File [ ]( ())
SLIDE 24
JCranky @
M todos com Tipos é Parametrizados
Utilidade limitada por enquanto At vermos é Type Bounds
SLIDE 25
JCranky @
Upper Type Bounds
Aceita filhos de ' ' T : Type <
SLIDE 26
JCranky @
Upper Type Bounds
jsonprint
SLIDE 27
JCranky @
Structural Types
Tipo Estrutural... Oferece a estrutura a ser seguida
SLIDE 28
JCranky @
Lower Type Bounds
Aceita Pais de ' ' T : Type >
SLIDE 29
JCranky @
Lower Type Bounds
Calculo do tipo da lista resultante: def :: B : A x: B : List B [ > ] ( ) [ ]
SLIDE 30
JCranky @
Co / in / Contra
Variance Assunto mala
SLIDE 31
JCranky @
Covariance
Relac o de heranca ã Com tipos parametrizados Parametro filho de ' '
SLIDE 32
JCranky @
Invariancia
Tipo parametrizado n o ã varia N o existe relac o de ã ã heranca
SLIDE 33
JCranky @
ContraVariancia
Tipo parametrizado varia no sentido oposto da heranca Parametro pai de ' '
SLIDE 34
JCranky @
Convers es implicitas õ
Ou implicit views “ ”
SLIDE 35
JCranky @
Convers es implicitas õ
Em tipos primitivos, todas as linguagens tem Int Long →
SLIDE 36
JCranky @
Convers es implicitas õ
Ou o oposto, mas n o ã é implicito Long Int →
SLIDE 37
JCranky @
Convers es implicitas õ
Com classes, temos apenas uma mudanca na vis o ã convers o na refer ncia ( ã ê ) JsValue JsString →
SLIDE 38
JCranky @
Convers es implicitas õ
Casting subindo a hierarquia sujeito a exception ( ) JsString JsValue →
SLIDE 39
JCranky @
Convers es implicitas õ
Contexto: convers es entre õ quaisquer tipos N o autom tico ã é 100% á Mas vai parecer!
SLIDE 40
JCranky @
Convers es implicitas õ
- ex. json
SLIDE 41
JCranky @
Convers es implicitas õ
- Ex. DSL EasyForger
Item / Block / ItemStack
SLIDE 42
JCranky @
Convers es implicitas õ
Grande ferramenta para evitar repetic o de c digo ã ó
SLIDE 43
JCranky @
Convers es implicitas õ
Grande ferramenta para escrever DSLs e pega erros em ( tempo de compilac o ã )
SLIDE 44
JCranky @
Convers es implicitas õ
“Pimp my library” Ex.: Predef + RichInt / StringWarpper etc
SLIDE 45
JCranky @
Type Classes
Simplificando: Uma forma de classificar
- utras classes
E oferecer funcionalidade extra
SLIDE 46
JCranky @
Type Classes
Uso de Parametros impl citos í
SLIDE 47
JCranky @
Type Classes
Metodo TraversableOnce.sum Classe Numeric
SLIDE 48
JCranky @
Itens avancados
Sugest es para quem tem õ Estomado N o vamos ver! p ã =
SLIDE 49
JCranky @
Itens avancados
trait CanBuildFrom From, Elem, To [-
- +
] type projection phantom types path dependent types Lenses Etc ...
SLIDE 50
JCranky @
Sugest es de Estudo: õ
Existential Types x Raw Types:
http://typelevel.org/blog/ / / 2015 02 26 /rawtypes.html
SLIDE 51
JCranky @
Sugest es de Estudo: õ
Infer ncia de Tipos a Fundo: ê
https://skillsmatter.com/skillscasts / demystifying type inference 5841-
SLIDE 52
SLIDE 53
JCranky @
Questions ! ?
Throw them at me!
If it pleases you...
SLIDE 54