6. Globalcode – Open4education
Sobre
• Desenvolvido pela Microsoft Research
– Incluído junto com Visual Studio in 2010
• Open source
– GitHub
• Cross platform
– Funciona com VS Code (e outros)
7. Globalcode – Open4education
Sobre
• Desenvolvido pela Microsoft Research
– Incluído junto com Visual Studio in 2010
• Open source
– GitHub
• Cross platform
– Funciona com VS Code (e outros)
• Comunidade ativa
– fsharp.org
– F# Slack channel
11. Globalcode – Open4education
Sobre
• Roda em cima do CLR
• Interopera com outras linguagens .NET
• É turing completa
• É possível usufruir de qualquer bibliotecas escritas em/para
C# tal como EntityFramework, ASP.NET, Xamarin, etc.
17. Globalcode – Open4education
Índice
Diferenças entre C# e F#
– Sintaxe
– Inferência de tipos
– Diferentes defaults
– Diferente filosofia
Exclusivo do F#
– Functional-first
– Algebraic type system
18. Globalcode – Open4education
Índice
Diferenças entre C# e F#
– Sintaxe
– Inferência de tipos
– Diferentes defaults
– Diferente filosofia
Exclusivo do F#
– Functional-first
– Algebraic type system
19. Globalcode – Open4education
Índice
Diferenças entre C# e F#
– Sintaxe
– Inferência de tipos
– Diferentes defaults
– Diferente filosofia
Exclusivo do F#
– Functional-first
– Algebraic type system
86. Globalcode – Open4education
F# tem ‘defaults’ diferentes do C#
• Imutável por padrão
• Mutabilidade é caso especial
• Classes e tipos por padrão não nuláveis
• Permitir nulo é um caso especial
87. Globalcode – Open4education
F# tem ‘defaults’ diferentes do C#
• Imutável por padrão
• Mutabilidade é caso especial
• Classes e tipos por padrão não nuláveis
• Permitir nulo é um caso especial
• Igualdade estrutural por padrão
• Igualdade por referencia é caso especial
88. Globalcode – Open4education
F# tem ‘defaults’ diferentes do C#
• Imutável por padrão
• Mutabilidade é caso especial
• Classes e tipos por padrão não nuláveis
• Permitir nulo é um caso especial
• Igualdade estrutural por padrão
• Igualdade por referencia é caso especial
• Todos os valores devem ser sempre totalmente
inicializados
106. Globalcode – Open4education
Diferente filosofia
• C# historicamente é um derivado da linguagem C
• F# veio do ML, uma Meta Linguagem para
se provar coisas
109. Globalcode – Open4education
Objetivo:
Você consegue entender o código usando
apenas informações que você tem bem na sua
frente?
Sem olhar outras partes da base de código!
115. Globalcode – Open4education
C# é mais previsível que JavaScript!
Em C#, se você não corresponder os tipos
corretamente você obtém um erro de
compilação!
116. Globalcode – Open4education
C# é mais previsível que JavaScript!
Em C#, se você não corresponder os tipos
corretamente você obtém um erro de
compilação!
Isso é ótimo!
121. Globalcode – Open4education
Como fazer uma linguagem mais previsível?
• As variáveis não devem poder alterar seu tipo
• Objetos com os mesmos valores devem ser iguais por padrão
125. Globalcode – Open4education
Como fazer uma linguagem mais previsível?
• As variáveis não devem poder alterar seu tipo
• Objetos com os mesmos valores devem ser iguais por padrão
• Comparar tipos diferentes deve dar erro de compilação
130. Globalcode – Open4education
Como fazer uma linguagem mais previsível?
• As variáveis não devem poder alterar seu tipo
• Objetos com os mesmos valores devem ser iguais por padrão
• Comparar tipos diferentes deve dar erro de compilação
• Objetos sempre devem ser inicializados em um estado válido,
caso contrario erro de compilação
135. Globalcode – Open4education
Como fazer uma linguagem mais previsível?
• As variáveis não devem poder alterar seu tipo
• Objetos com os mesmos valores devem ser iguais por padrão
• Comparar objetos de diferentes deve dar erro de compilação
• Objetos sempre devem ser inicializados em um estado válido,
caso contrario erro de compilação
• Uma vez criados, objetos e coleções devem ser imutáveis.
140. Globalcode – Open4education
Como fazer uma linguagem mais previsível?
• As variáveis não devem poder alterar seu tipo
• Objetos com os mesmos valores devem ser iguais por padrão
• Comparar tipos diferentes deve dar erro de compilação
• Objetos sempre devem ser inicializados em um estado válido,
caso contrario erro de compilação
• Uma vez criados, objetos e coleções devem ser imutáveis.
• Dados ou erros ausentes devem ser explicitados. Sem
permitir nulos
141. Globalcode – Open4education
F# tenta ser uma linguagem previsível
• As variáveis não devem poder alterar seu tipo
• Objetos com os mesmos valores devem ser iguais por padrão
• Comparar tipos diferentes deve dar erro de compilação
• Objetos sempre devem ser inicializados em um estado válido,
caso contrario erro de compilação
• Uma vez criados, objetos e coleções (geralmente) são
imutáveis.
• Dados ou erros ausentes (geralmente) são explícitos. Sem
permitir nulos
142. Globalcode – Open4education
F# tenta ser uma linguagem previsível
• As variáveis não devem poder alterar seu tipo
• Objetos com os mesmos valores devem ser iguais por padrão
• Comparar tipos diferentes deve dar erro de compilação
• Objetos sempre devem ser inicializados em um estado válido,
caso contrario erro de compilação
• Uma vez criados, objetos e coleções (geralmente) são
imutáveis.
• Dados ou erros ausentes (geralmente) são explícitos. Sem
permitir nulos
207. Globalcode – Open4education
Exemplo de alguns requisitos:
Aceitamos três formas de pagamento: Dinheiro,
cheque ou cartão.
Para dinheiro, não precisamos de nenhuma
informação extra
208. Globalcode – Open4education
Exemplo de alguns requisitos:
Aceitamos três formas de pagamento: Dinheiro,
cheque ou cartão.
Para dinheiro, não precisamos de nenhuma
informação extra
Para cheques, precisamos do número do cheque
209. Globalcode – Open4education
Exemplo de alguns requisitos:
Aceitamos três formas de pagamento: Dinheiro,
cheque ou cartão.
Para dinheiro, não precisamos de nenhuma
informação extra
Para cheques, precisamos do número do cheque
Para cartões, precisamos do tipo de cartão e do
número do cartão