SlideShare uma empresa Scribd logo
1 de 54
Baixar para ler offline
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 carros
LIP 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 hierarquia
sujeito 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@

Mais conteúdo relacionado

Destaque

Paola andrea epe
Paola andrea epePaola andrea epe
Paola andrea epePaola1716
 
ใบงาน 2 คอม
ใบงาน 2 คอมใบงาน 2 คอม
ใบงาน 2 คอมNaCk Wanasanan
 
ใบงานท 10m
ใบงานท  10mใบงานท  10m
ใบงานท 10mNaCk Wanasanan
 
Minecraft Modding e Scala
Minecraft Modding e ScalaMinecraft Modding e Scala
Minecraft Modding e ScalaPaulo Siqueira
 
Minecraft and Scala: Creating a DSL to enable kids to create Minecraft Mods
Minecraft and Scala: Creating a DSL to enable kids to create Minecraft ModsMinecraft and Scala: Creating a DSL to enable kids to create Minecraft Mods
Minecraft and Scala: Creating a DSL to enable kids to create Minecraft ModsPaulo Siqueira
 
Separation of mixtures
Separation of mixturesSeparation of mixtures
Separation of mixturesAnish Lahiri
 
恰如其分的 MySQL 設計技巧 [Modern Web 2016]
恰如其分的 MySQL 設計技巧 [Modern Web 2016]恰如其分的 MySQL 設計技巧 [Modern Web 2016]
恰如其分的 MySQL 設計技巧 [Modern Web 2016]Yi-Feng Tzeng
 
談 Uber 從 PostgreSQL 轉用 MySQL 的技術爭議
談 Uber 從 PostgreSQL 轉用 MySQL 的技術爭議談 Uber 從 PostgreSQL 轉用 MySQL 的技術爭議
談 Uber 從 PostgreSQL 轉用 MySQL 的技術爭議Yi-Feng Tzeng
 

Destaque (9)

ใบงานท 10
ใบงานท  10ใบงานท  10
ใบงานท 10
 
Paola andrea epe
Paola andrea epePaola andrea epe
Paola andrea epe
 
ใบงาน 2 คอม
ใบงาน 2 คอมใบงาน 2 คอม
ใบงาน 2 คอม
 
ใบงานท 10m
ใบงานท  10mใบงานท  10m
ใบงานท 10m
 
Minecraft Modding e Scala
Minecraft Modding e ScalaMinecraft Modding e Scala
Minecraft Modding e Scala
 
Minecraft and Scala: Creating a DSL to enable kids to create Minecraft Mods
Minecraft and Scala: Creating a DSL to enable kids to create Minecraft ModsMinecraft and Scala: Creating a DSL to enable kids to create Minecraft Mods
Minecraft and Scala: Creating a DSL to enable kids to create Minecraft Mods
 
Separation of mixtures
Separation of mixturesSeparation of mixtures
Separation of mixtures
 
恰如其分的 MySQL 設計技巧 [Modern Web 2016]
恰如其分的 MySQL 設計技巧 [Modern Web 2016]恰如其分的 MySQL 設計技巧 [Modern Web 2016]
恰如其分的 MySQL 設計技巧 [Modern Web 2016]
 
談 Uber 從 PostgreSQL 轉用 MySQL 的技術爭議
談 Uber 從 PostgreSQL 轉用 MySQL 的技術爭議談 Uber 從 PostgreSQL 轉用 MySQL 的技術爭議
談 Uber 從 PostgreSQL 轉用 MySQL 的技術爭議
 

Desvendando o Sistema de Tipos do Scala