Desvendando o sistema de tipos do scala

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

    17-Jul-2015
  • Category

    Software

  • view

    95
  • download

    2

Embed Size (px)

Transcript of Desvendando o sistema de tipos do scala

  • Desvendando o

    Sistema de Tipos

    Do Scala

    Paulo Jcranky Siqueira

    Paulo.siqueira [email protected] / [email protected]

  • [email protected]

    Quem Sou Eu?

    Developer

    Scala, Java( )

  • [email protected]

    Quem Sou Eu?

    Gamer

    Minecraft

    E outros Jogos Indie

  • [email protected]

    Quem Sou Eu?

    Musician

    Wannabe!

  • [email protected]

    Para quem trabalho

    TecSinapse

    Dealers de carrosLIP Inova o e Pesquisa

  • [email protected]

    Alvos:

    Sistema de Tipos

    Varios Tipos de TiposInferencia de Tipos

    Implicits

  • [email protected]

    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

  • [email protected]

    Sistema de Tipos

    Limita o que podemos fazer

    com os elementos do c digo

  • [email protected]

    Sistema de Tipos

    Int

    Valores inteiros entre

    e -2147483648 -2147483648

  • [email protected]

    Sistema de Tipos

    String

    Conjunto de caracteres

  • [email protected]

    Sistema de Tipos

    Char

    Um nico caracter

  • [email protected]

    Sistema de Tipos

    JsValue

    Qualquer implementacao

    trait da API de Json do Play( )

  • [email protected]

    Sistema de Tipos

    JsValue

    JsString, JsArray, JsNumber Etc

  • [email protected]

    Inferencia de Tipos

    Primitivos

    Classes

    Objetos

  • [email protected]

    Inferencia de Tipos

    Retorno de m todos /Functions

  • [email protected]

    Inferencia de Tipos

    Alguns casos que

    N o funcionam

  • [email protected]

    Inferencia de Tipos

    Inferencia com Tipos

    Parametrizados

  • [email protected]

    Tipos existenciais

    Tipos Paramatrizados s o obrigat rios

    N o existem Raw Types como em JAva

  • [email protected]

    Tipos existenciais

    Pode ser problema ao

    integrar com Java

    ex. subitens

  • [email protected]

    Inferencia: Boas Pr ticas

    Ajudar o compilador

    Ajudar nossos amiguinhos

    Documentar APIs

  • [email protected]

    Inferencia: Boas Pr ticas

    Qual o tipo do nome?val nome =

    Some EasyForger(" ")

  • [email protected]

    Inferencia: Boas Pr ticas

    E em java...

    N o use raw types

  • [email protected]

    M todos com Tipos Parametrizados

    def foo T param: T[ ]( )

    foo File new File [ ]( ())

  • [email protected]

    M todos com Tipos Parametrizados

    Utilidade limitada por enquanto

    At vermos Type Bounds

  • [email protected]

    Upper Type Bounds

    Aceita filhos de' 'T : Type

  • [email protected]

    Upper Type Bounds

    jsonprint

  • [email protected]

    Structural Types

    Tipo Estrutural...

    Oferece a estrutura a ser seguida

  • [email protected]

    Lower Type Bounds

    Aceita Pais de' 'T : Type>

  • [email protected]

    Lower Type Bounds

    Calculo do tipo da lista resultante:

    def :: B : A x: B : List B[ > ] ( ) [ ]

  • [email protected]

    Co / in / Contra

    Variance

    Assunto mala

  • [email protected]

    Covariance

    Relac o de herancaCom tipos parametrizados

    Parametro filho de' '

  • [email protected]

    Invariancia

    Tipo parametrizado n o varia

    N o existe relac o de heranca

  • [email protected]

    ContraVariancia

    Tipo parametrizado varia no

    sentido oposto da heranca

    Parametro pai de' '

  • [email protected]

    Convers es implicitas

    Ou implicit views

  • [email protected]

    Convers es implicitas

    Em tipos primitivos, todas as linguagens tem

    Int Long

  • [email protected]

    Convers es implicitas

    Ou o oposto, mas n o implicito

    Long Int

  • [email protected]

    Convers es implicitas

    Com classes, temos apenas

    uma mudanca na vis o

    convers o na refer ncia( )

    JsValue JsString

  • [email protected]

    Convers es implicitas

    Casting subindo a hierarquiasujeito a exception( )JsString JsValue

  • [email protected]

    Convers es implicitas

    Contexto: convers es entre quaisquer tipos

    N o autom tico 100% Mas vai parecer!

  • [email protected]

    Convers es implicitas

    ex. json

  • [email protected]

    Convers es implicitas

    Ex. DSL EasyForger

    Item / Block / ItemStack

  • [email protected]

    Convers es implicitas

    Grande ferramenta para

    evitar repetic o de c digo

  • [email protected]

    Convers es implicitas

    Grande ferramenta para

    escrever DSLs

    e pega erros em ( tempo de compilac o )

  • [email protected]

    Convers es implicitas

    Pimp my libraryEx.: Predef +

    RichInt / StringWarpper etc

  • [email protected]

    Type Classes

    Simplificando:

    Uma forma de classificar outras classes

    E oferecer funcionalidade extra

  • [email protected]

    Type Classes

    Uso de Parametros

    impl citos

  • [email protected]

    Type Classes

    Metodo TraversableOnce.sum

    Classe Numeric

  • [email protected]

    Itens avancados

    Sugest es para quem temEstomado

    N o vamos ver! p =

  • [email protected]

    Itens avancados

    trait CanBuildFrom From, Elem, To[- - + ]type projection

    phantom types

    path dependent types

    Lenses

    Etc ...

  • [email protected]

    Sugest es de Estudo:

    Existential Types x Raw Types:

    http://typelevel.org/blog/ / /2015 02 26/rawtypes.html

  • [email protected]

    Sugest es de Estudo:

    Infer ncia de Tipos a Fundo:https://skillsmatter.com/skillscasts/ demystifying type inference5841- - -

  • [email protected]

    Questions !?

    Throw them at me!

    If it pleases you...

  • Paulo Jcranky Siqueira

    Paulo.siqueira [email protected] / [email protected]

    Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Slide 41Slide 42Slide 43Slide 44Slide 45Slide 46Slide 47Slide 48Slide 49Slide 50Slide 51Slide 52Slide 53Slide 54