Michel Pavan Macedo michelpm@gmail.com Introdução ao F# Michel Pavan Macedo michelpm@gmail.com.

Slides:



Advertisements
Apresentações semelhantes
Estruturação de Linguagens (Pascal e C++)
Advertisements

Creating an Eclipse-based IDE for the D programming language
Ruby Introdução.
C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
Linguagem de Programação I
Laboratório de Programação
3 Paradigmas e Linguagens de Programação
Parte I Capítulo 5 Reutilizando código e escrevendo funções.
Programação Orientada aos Objectos Paulo Marques Departamento de Eng. Informática Universidade de Coimbra Set/2005 Uma Introdução Usando.
Shell Script Professor: João Paulo
Algoritmos e Estrutura de Dados I
Teste de Software Parte 3.
PRDS - Programa de Residência em Desenvolvimento de Software Laboratório de Engenharia de Software (LES) da PUC-Rio Carlos Lucena
2002 LCG/UFRJ. All rights reserved. 1 Tópicos em C++ Claudio Esperança Paulo Roma Cavalcanti.
Rafael Pinto Frederico Corrêa
Linguagens de programação
APL/SNOBOL As primeiras linguagens dinâmicas
Universidade Federal do Espírito Santo
7 Abstração Genérica Unidades genéricas e instanciação.
Introdução a Linguagem JAVA
Laboratório de Programação de Computadores I
Programação Web com PHP
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Introdução a linguagem Python
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso.
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 27 (1) Programação com MPI Tópicos: Modelo de Programação Funções de Ambiente Funções Básicas.
Paradigmas de Programação
Linguagem Técnica de Programação VI Prof.: Luiz Gustavo Jordão Soares.
Programação II Estruturas de Dados Aula 02 - continuação
Curso de ISI (Implantação de Sistemas de Informação)
O Portal do Estudante de Computação
Estudo dos Conceitos e Paradigmas de Programação
Expressões e Instrução de Atribuição
Linguagem Funcional 2 Linguagem Funcional 2 - LF2 Estende LF1 com funções de alta ordem Uma função passa a ser um valor O contexto inclui um único componente:
Paradigma Funcional Apresentação de LF1.
Centro de Informática – UFPE
Augusto Sampaio e Paulo Borba Centro de Informática
Ruby Viviane Souza (vess).
Introdução à Programação Orientada a Objetos com Java Paulo Borba Centro de Informática Universidade Federal de Pernambuco Programação Imperativa (e Ponteiros.
Linguagem de Programação - III Ementa: Uma linguagem com o paradigma funcional (LF: Linguagem Funcional) Conteúdo: Contexto das Linguagens, Histórico de.
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa This.
Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato
Paradigma funcional.
Paradigmas de Linguagens de Programação Aula 2
Laboratório de Programação Prof. Oscar Luiz Monteiro de Farias
Linguagem de Programação JAVA Técnico em Informática Professora Michelle Nery.
Linguagens de Programação
® Tópicos Avançados em Linguagens Computacionais – IF724 Aula Prática – FSharp (F#) Leandro Mitsuo Rodrigo Lumack Professor:
Acabias Marques Luiz. I - Introdução ao Ruby Parte 1 – Introdução a linguagem  O que é Ruby  Instalação  O IRB  Operadores Aritméticos  Tipos de.
Java Básico Instrutor: Davi Pires
Ruby André Braga Patrícia Lustosa. Yukihiro Matsumoto (“Matz”), 1993 Perl Smalltalk Eiffel Ada Lisp “Natural, not simple” “More powerful than Perl and.
Linguagem de programação. Histórico  Concebida em 1993 por Yukihiro Matsumoto  Primeiro livro em inglês saiu em setembro de 2000  Ruby on Rails é lançado.
1 Reestruturação das Linguagens da Disciplina “Paradigmas de Linguagens de Programação” para Java 1.5 Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt)
Metaprogramação Estática André Knabben Pricilla Padaratz.
Haskell Programação Funcional Diego Lima Rubem Moreira.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Aula Prática 13 Orientação a Objeto Monitoria
Copyright 2000, Departamento de Informática, UFPE. Todos os direitos reservados sob a legislação em vigor. Orientação a Objetos e Java.
PLP – Paradigma de Linguagens de Programação
1 IO em LF1 Paradigmas de Linguagens de Programação 2007 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier.
Programação Funcional 4a. Seção de Slides Tuplas e Definição de Funções Locais em Haskell.
Módulo II Capítulo 1: Orientação a Objetos
Functional-First Web Development Rodrigo Vidal F# VTEX Twitter &
Revisão Turma – WEB JavaScript.
1 Programação Multi-Paradigma Cristiano Bertolini – Ellison Siqueira – Guilherme Avelino –
Lua – O simples é tudo Aluno: Flávio Henrique Schuindt da Silva Características das Linguagens de Programação.
Variáveis, expressões e comandos Dilvan Moreira. Lembrando …  Instalação normal (para utilizar no PC com Windows) 
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Ambientação com a Sintaxe de Java: parte 2 Prof. Gustavo Wagner Slides Originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB  Centro de.
Transcrição da apresentação:

Michel Pavan Macedo michelpm@gmail.com Introdução ao F# Michel Pavan Macedo michelpm@gmail.com

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

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

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

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

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

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 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

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

Demo Interativo

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

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

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

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

Demo Tutorial Introdutório

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

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}

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)

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.CheapestFirstFrom @ 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

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

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

Demo Visualização 3D

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

De um slide de Don Syme I’ve 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. You’re never disappointed in any phase of the project! Julien Laugel, Chief Software Architect, www.eurostocks.com

Demo ASP.NET MVC WebForms (C#) Razor (C#)

Referências HubFS (comunidade de F#) http://cs.hubfs.net/ InfoQ (tem ótimas palestras de F#) http://www.infoq.com/ Try F# http://www.tryfsharp.org/ Exemplos de F# (aqueles dessa apresentação) http://fsharpsamples.codeplex.com/

Referências Bastantes tutoriais de recursos do F# http://leibnizdream.wordpress.com/ Ótimo blog de F# (inclusive slides base para essa apresentação) http://www.tomasP.net/ Ótimo livro de F# http://www.amazon.com/Real-World-Functional- Programming-Examples/dp/1933988924