Desvendando o
Sistema de Tipos
Do Scala
Paulo Jcranky Siqueira“ ”
Paulo.siqueira gmail.com@ / jcranky@
JCranky@
Quem Sou Eu?
Developer
Scala, Java( )
JCranky@
Quem Sou Eu?
Gamer
Minecraft
E outros Jogos Indie
JCranky@
Quem Sou Eu?
Musician
Wannabe!
JCranky@
Para quem trabalho
TecSinapse
Dealers de carrosLIP Inova o e Pesquisa– çã
JCranky@
Alvos:
Sistema de Tipos
Varios Tipos de … Tipos
Inferencia de Tipos
Implicits
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
JCranky@
Sistema de Tipos
Limita o que podemos fazer
com os elementos do c digoó
JCranky@
Sistema de Tipos
Int
Valores inteiros entre
e -2147483648 -2147483648
JCranky@
Sistema de Tipos
String
Conjunto de caracteres
JCranky@
Sistema de Tipos
Char
Um nico caracterú
JCranky@
Sistema de Tipos
JsValue
Qualquer implementacao
trait da API de Json do Play( )
JCranky@
Sistema de Tipos
JsValue
JsString, JsArray, JsNumber Etc
JCranky@
Inferencia de Tipos
Primitivos
Classes
Objetos
JCranky@
Inferencia de Tipos
Retorno de m todos /é
Functions
JCranky@
Inferencia de Tipos
Alguns casos que
N o funcionamã
JCranky@
Inferencia de Tipos
Inferencia com Tipos
Parametrizados
JCranky@
Tipos existenciais
Tipos Paramatrizados s o ãobrigat riosó
N o existem Raw Types ã “ ”como em JAva
JCranky@
Tipos existenciais
Pode ser problema ao
integrar com Java
ex. subitens
JCranky@
Inferencia: Boas Pr ticasá
Ajudar o compilador
Ajudar nossos amiguinhos
Documentar APIs
JCranky@
Inferencia: Boas Pr ticasá
Qual o tipo do nome?
val nome =Some EasyForger(" ")
JCranky@
Inferencia: Boas Pr ticasá
E em java...
N o use raw typesã
JCranky@
M todos com Tipos éParametrizados
def foo T param: T[ ]( )
foo File new File [ ]( ())
JCranky@
M todos com Tipos éParametrizados
Utilidade limitada por enquanto
At vermos é Type Bounds
JCranky@
Upper Type Bounds
Aceita filhos de' '
T : Type<
JCranky@
Upper Type Bounds
jsonprint
JCranky@
Structural Types
Tipo Estrutural...
Oferece a estrutura a ser seguida
JCranky@
Lower Type Bounds
Aceita Pais de' '
T : Type>
JCranky@
Lower Type Bounds
Calculo do tipo da lista resultante:
def :: B : A x: B : List B[ > ] ( ) [ ]
JCranky@
Co / in / Contra
Variance
Assunto mala
JCranky@
Covariance
Relac o de herancaãCom tipos parametrizados
Parametro filho de' '
JCranky@
Invariancia
Tipo parametrizado n o ãvaria
N o existe relac o de ã ãheranca
JCranky@
ContraVariancia
Tipo parametrizado varia no
sentido oposto da heranca
Parametro pai de' '
JCranky@
Convers es implicitasõ
Ou implicit views“ ”
JCranky@
Convers es implicitasõ
Em tipos primitivos, todas as linguagens tem
Int Long→
JCranky@
Convers es implicitasõ
Ou o oposto, mas n o ã éimplicito
Long Int→
JCranky@
Convers es implicitasõ
Com classes, temos apenas
uma mudanca na vis oã
convers o na refer ncia( ã ê )
JsValue JsString→
JCranky@
Convers es implicitasõ
Casting subindo a hierarquiasujeito a exception( )
JsString JsValue→
JCranky@
Convers es implicitasõ
Contexto: convers es entre õquaisquer tipos
N o autom ticoã é 100% áMas vai parecer!
JCranky@
Convers es implicitasõ
ex. json
JCranky@
Convers es implicitasõ
Ex. DSL EasyForger
Item / Block / ItemStack
JCranky@
Convers es implicitasõ
Grande ferramenta para
evitar repetic o de c digoã ó
JCranky@
Convers es implicitasõ
Grande ferramenta para
escrever DSLs
e pega erros em ( tempo de compilac oã )
JCranky@
Convers es implicitasõ
“Pimp my library”
Ex.: Predef +
RichInt / StringWarpper etc
JCranky@
Type Classes
Simplificando:
Uma forma de classificar outras classes
E oferecer funcionalidade extra
JCranky@
Type Classes
Uso de Parametros
impl citosí
JCranky@
Type Classes
Metodo TraversableOnce.sum
Classe Numeric
JCranky@
Itens avancados
Sugest es para quem temõEstomado
N o vamos ver! pã =
JCranky@
Itens avancados
trait CanBuildFrom From, Elem, To[- - + ]type projection
phantom types
path dependent types
Lenses
Etc ...
JCranky@
Sugest es de Estudo:õ
Existential Types x Raw Types:
http://typelevel.org/blog/ / /2015 02 26/rawtypes.html
JCranky@
Sugest es de Estudo:õ
Infer ncia de Tipos a Fundo:ê
https://skillsmatter.com/skillscasts/ demystifying type inference5841- - -
JCranky@
Questions !?
Throw them at me!
If it pleases you...
Paulo Jcranky Siqueira“ ”
Paulo.siqueira gmail.com@ / jcranky@