Desvendando o sistema de tipos do scala

54
Desvendando o Sistema de Tipos Do Scala Paulo Jcranky Siqueira Paulo.siqueira gmail.com @ / jcranky @

Transcript of Desvendando o sistema de tipos do scala

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@