A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Introdução ao F# Michel Pavan Macedo

Apresentações semelhantes


Apresentação em tema: "Introdução ao F# Michel Pavan Macedo"— Transcrição da apresentação:

1 Introdução ao F# Michel Pavan Macedo

2 O que é o F#? Linguagem.NET – É possível usar qualquer biblioteca.NET do F# – É possível usar qualquer biblioteca F# de outras linguagens para.NET Combina dois paradigmas de programação importantes – Programação Orientada a Objeto – Programação Funcional – Também muito útil para script

3 Por que F#? Programação funcional é o foco da linguagem Que linguagens utilizaremos em um futuro próximo? – Algumas características do F# poderão ser incorporadas em outras linguagens e bibliotecas Desenvolvida pela Microsoft Research – Bem testada e otimizada – Comunidade crescente Graças ao.NET pode ser utilizada como parte de um projeto maior

4 Agenda F# #light F# funcional F# orientado a objetos F# interativo F# real

5 Sintaxe Estaticamente tipado (como o Java e C#, não como Ruby, Python e JavaScript) – Tipos são inferidos pelo contexto – Usa tipos parametrizados quando possível // valor inteiro (int) let n = 42 // valor do tipo texto (string) let str = "Hello world!" // Função (int -> int) let add10(n) = n + 10 // Função identidade ('a -> 'a) let id(sth) = sth

6 Valores É possível representar 0, 1 ou mais valores Algum valor ou nenhum valor // valor do tipo unit (unit) let nada = () // valor inteiro (int) let numero = (5) // tupla de inteiro e string (int * String) let tupla = (5, Cinco) // um valor Int32 e um valor String let valor, nome = tupla // Função de tipo int -> int option let positivo n = if n > 0 then Some(n) else None

7 Funções Toda função tem um parâmetro e um retorno // recebe unit, retorna unit: unit -> unit let imprime5() = printf %s é igual a %d cinco 5 // recebe inteiro, retorna inteiro: int -> int let maisUm(n) = n + 1 // recebe inteiro, retorna inteiro: int -> int let maisDois n = n + 2 // recebe tupla de inteiros (int * int) -> int let soma(a, b) = a + b // recebe tupla de inteiros int -> int -> int let potencia a b = a ** b

8 Discriminated Union Discriminated union em F# type Option = | None | Some of 'T type List = | Nil | Cons of 'T * List Option Option.Some valor: 'T Option.None

9 DEMO Interativo

10 Agenda F# #light F# funcional F# orientado a objetos F# interativo F# real

11 Funcional vs Imperativo Abordagem imperativa – Atribuição é a operação mais importante Abordagem funcional – Baseado em recursividade – Todas as estruturas são imutáveis por padrão – Funções funcionais puras não tem efeitos colaterais Fácil de testar e depurar Fácil de paralelizar

12 Funcional vs Imperativo Em F# você pode combinar ambas abordagens – Imperativo é bom para interoperabilidade com.NET Funcional Imperativo // Fatorial (funcional) let rec fat_f n = if (n = 0) then 1 else n * fat_f(n – 1) // Fatorial (imperativo) let fat_i n = let mutable ret = 1 for i = 1 to n do ret <- ret * i done ret

13 Imutabilidade Além de unidades e records open System // declara unidades de medida [ ] type copinho [ ] type litro [ ] type dia // declara constante de conversão let copinhoPorLitro : float = 6.0 // declara função de conversão let emLitros (c:float ) = c / copinhoPorLitro // declara um record type Programador = { Nome: String; Cafe: float } // instancia um programador let euDoPassado = { Nome = Michel; Cafe = 1.5 } // tenta alterar o programador, mas ele é imutável euDoPassado.Cafe ) / 1.0 // instancia um novo programador let eu = { euDoPassado with Cafe = emLitros(6 )/1.0 }

14 DEMO Tutorial Introdutório

15 Agenda F# #light F# funcional F# orientado a objetos F# interativo F# real

16 De Amanda Laucher e Josh Graham Problema: encontrar a passagem mais barata para uma determinada viagem // direção type direction = |To |From |Return // classe da passagem type ticketClass = |Standard |First // passagem type ticket = {Price:decimal; Class:ticketClass; Direction:direction}

17 continuação type Journey (tickets) = let lowestPrice cls dir = (tickets |> List.filter(fun x -> x.Class = cls && x.Direction = dir) |> List.min).Price let getCheapestList cls dir = tickets |> List.filter (fun x -> x.Class = cls && x.Direction = dir && x.Price = (lowestPrice cls dir)) let getTicketsByClass cls = tickets |> List.filter (fun x -> x.Class = cls) let getTicketsByDirection dir = tickets |> List.filter (fun x -> x.Direction = dir)

18 continuação member x.CheapestStdTo = getCheapestList Standard To member x.CheapestFirstTo = getCheapestList First To member x.CheapestStdFrom = getCheapestList Standard From member x.CheapestFirstFrom = getCheapestList First From member x.CheapestStdReturn = getCheapestList Standard Return member x.CheapestFirstReturn = getCheapestList First Return member x.StandardCheapestBoth = if ((lowestPrice First To) + (lowestPrice First From)) > (lowestPrice First Return) then x.CheapestFirstReturn else x.CheapestFirstTo member x.AllOutwardTickets = getTicketsByDirection To member x.AllInwardTickets = getTicketsByDirection From member x.AllReturnTickets = getTicketsByDirection Return member x.AllStandardTickets = getTicketsByClass Standard member x.AllFirstTickets = getTicketsByClass First

19 Agenda F# #light F# funcional F# orientado a objetos F# interativo F# real

20 F# interativo Três motivos porque eu amo Shell – Consiste apenas de um core de operadores – Esses poucos operadores são para trabalhar com pipes – É fácil e prático de testar O que faz uma linguagem de script? – O código deve ser o mais conciso possível – Normalmente são interpretadas (F# é compilado) – F# tem verificação estática

21 DEMO Visualização 3D

22 Agenda F# #light F# funcional F# orientado a objetos F# interativo F# real

23 De um slide de Don Syme Ive been coding in F# lately, for a production task. F# allows you to move smoothly in your programming style... I start with pure functional code, shift slightly towards an objected-oriented style, and in production code, I sometimes have to do some imperative programming. I can start with a pure idea, and still finish my project with realistic code. Youre never disappointed in any phase of the project! Julien Laugel, Chief Software Architect,

24 DEMO ASP.NET MVC WebForms (C#) Razor (C#)

25 Referências HubFS (comunidade de F#) InfoQ (tem ótimas palestras de F#) Try F# Exemplos de F# (aqueles dessa apresentação)

26 Referências Bastantes tutoriais de recursos do F# Ótimo blog de F# (inclusive slides base para essa apresentação) Ótimo livro de F# Programming-Examples/dp/ Programming-Examples/dp/


Carregar ppt "Introdução ao F# Michel Pavan Macedo"

Apresentações semelhantes


Anúncios Google