ELC117 PARADIGMAS DE PROGRAMAÇÃO

Documentos relacionados
ELC 117 PARADIGMAS DE PROGRAMAÇÃO

Prof. Esp. Adriano Carvalho

Programação Funcional. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2015.

Curso de Linguagem C

INTRODUÇÃO AO JAVA PARA PROGRAMADORES C

Expressões. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

Pratica JFlex. Prática criando o primeiro analisador léxico

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento Eclipse Introdução à Linguagem de Programação JAVA

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

JavaScript (Funções, Eventos e Manipulação de Formulários)

ETEC DR. EMÍLIO HENRNANDEZ AGUILAR PROGRAMAÇÃO DE COMPUTADORES II PROFESSOR RAFAEL BARRETO DELPHI FORMULÁRIO COM ABAS E BUSCAS DE REGISTROS

2 Orientação a objetos na prática

AULA 1: PARADIGMAS DE PROGRAMAÇÃO

Programação de Computadores - I. Profª Beatriz Profº Israel

Aluísio Eustáquio da Silva

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza.

INTRODUÇÃO OBJECT PASCAL/DELPHI

Sintaxe e Semântica. Fases da Compilação. programa fonte

Especificação do 3º Trabalho

Os objetivos indicados aplicam-se a duas linguagens de programação: C e PHP

Programação Estruturada e Orientada a Objetos. Fundamentos Orientação a Objetos

CURSO DE PROGRAMAÇÃO EM JAVA

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento NetBeans Introdução à Linguagem de Programação JAVA

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza

formação em programação em c/c++

Allisson Barros 12/ Daniel Luz 13/ Leandro Bergmann 14/ Luiz Fernando Vieira 13/ Uriel Silva 12/

Componentes da linguagem C++

Algoritmo. Linguagem natural: o Ambígua o Imprecisa o Incompleta. Pseudocódigo: o Portugol (livro texto) o Visualg (linguagem) Fluxograma

Programação de Computadores

Convertendo Algoritmos para a Linguagem C

OPERADORES E ESTRUTURAS DE CONTROLE

1.6. Tratamento de Exceções

Organização e Arquitetura de Computadores I. de Computadores

2 echo "PHP e outros.";

Python Intermediário. terça-feira, 4 de agosto de 15

Fundamentos de Programação II. Introdução à linguagem de programação C++

Algoritmos em Javascript

Introdução. Hardware X Software. Corpo Humano Parte Física. Capacidade de utilizar o corpo em atividades especificas explorando seus componentes

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira

INF 1005 Programação I

Minicurso de Python Aula 1. Raphael Lupchinski Marcelo Millani

Algoritmos e Programação Conceitos e Estruturas básicas (Variáveis, constantes, tipos de dados)

Faculdade de Computação Programação Funcional (BCC/BSI) 1 Período Aula Prática: Classes e Tipos Algébricos

Algoritmos e Programação Estruturada

PYTHON LISTAS. Introdução à Programação SI2

Coleções. Conceitos e Utilização Básica. c Professores de ALPRO I 05/2012. Faculdade de Informática PUCRS

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Linguagens de programação

Python Funções. Introdução à Programação SI1

Introdução aos cálculos de datas

Organização de programas em Python. Vanessa Braganholo

Recursão em Listas. Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de Programação Funcional

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

Python: Funções. Claudio Esperança

CONVENÇÃO DE CÓDIGO JAVA

CURSO BÁSICO DE PROGRAMAÇÃO AULA 9. Introdução a linguagem C Estruturas de decisão

Noções sobre Objetos e Classes

Programando em C# Orientado a Objetos. By: Maromo

e à Linguagem de Programação Python

Introdução ao Shell Script

ESTRUTURA DE DADOS PILHA

Estrutura de Dados. Introdução a Ponteiros. Prof. Gerson Borges Estrutura de Dados I 1

O código JavaScript deve ser colocado entre tags de comentário para ficar escondido no caso de navegadores antigos que não reconhecem a linguagem.

Sua resposta deve conter entre 50 a 100 palavras, incluindo o exemplo.

Javascript 101. Parte 2

Aprendendo Python na Prática. Dante Moreira Zaupa Mestrando em Computação Aplicada Bolsista de Pesquisa

Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br

Universidade Federal de Itajubá Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI PCO203 Tópicos Especiais em Programação

FUNDAÇÃO EDUCACIONAL DE ITUIUTABA

Começando com Ruby on

FundamentosemInformática

Introdução à Programação

TOTVS BA Guia de Customização Linha Logix

INTRODUÇÃO À LINGUAGEM C++

Introdução a Algoritmos Parte 04

Processamento da Informação Teoria. Algoritmos e Tipos de dados

Desenvolvendo Websites com PHP

Arquivos de Textos no C - Básico

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

2 Desenvolvimento de Software Orientado a Aspectos

Introdução. Capítulo Breve sinopse

Resolução de problemas e desenvolvimento de algoritmos

Linguagem C: Estruturas de Controle. Prof. Leonardo Barreto Campos 1

UNIVERSIDADE FEDERAL DO PARANÁ

Universidade Federal de Minas Gerais Instituto de Ciências Agrárias

Faculdade de Ciências Universidade Agostinho Neto Departamento de Matemática e Engenharia Geográfica Ciências da Computação

O que é o JavaScript?

Nesta aula serão apresentados alguns comandos de condição, repetição e gráficos.

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Comandos de repetição while

CATÁLOGO DE CUSTOMIZAÇÃO Tag xped e nitempedno XML de Faturamento

WEBDESIGN. Professor: Paulo Marcos Trentin - paulo@paulotrentin.com.br Escola CDI de Videira

DESENVOLVIMENTO DE SOFTWARE AULA 06 TEORIA. Prof. Celso Candido ADS / REDES / ENGENHARIA

ESTRUTURA CONDICIONAL

Acumuladores. Paradigma de Programação Funcional. Marco A L Barbosa

Resumo da Matéria de Linguagem de Programação. Linguagem C

Algoritmos e Programação _ Departamento de Informática

Banco de Dados. Um momento crucial na organização dos dados é a forma com que cadastramos estes dados, a estrutura de armazenamento que criamos.

Comandos de Manipulação

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Transcrição:

PROGRAMAÇÃO FUNCIONAL EXEMPLO PRÁTICO ELC117 PARADIGMAS DE PROGRAMAÇÃO Fernando O. Oliveira Jr.

Introdução Este trabalho procurou avaliar alguns exemplos práticos de programação funcional utilizadas atualmente. Depois de avaliar alguns exemplos em haskell: http://www.haskell.org/haskellwiki/example_code http://www.haskell.org/haskellwiki/reactive-banana/examples http://www.haskell.org/haskellwiki/haskell_in_practice E outros encontrados em F# : http://fsharp3sample.codeplex.com/wikipage?title=fsharp3samples http://fsharpsamples.codeplex.com/ http://stackoverflow.com/questions/383848/f-open-source-projects

LINQ Foi analisado também o uso do LINQ Uma importante dúvida surgiu LINQ é ou não é puramente funcional. De acordo com Christopher Bennage, em What Is Functional Programming? Part 4, Linq, http://dotnet.dzone.com/news/what-functionalprogramming-3, LINQ é funcional, tendo nascido sob influência de linguagens funcionais.

LINQ Não é Funcional? Entretanto, de acordo com Don Stewart (Programador funcionald, PhD em ciência da computação e desenvolvedor de finanças quantitativas) num post no blog StackOverflow, http://stackoverflow.com/questions/13396886/why-is-linqnot-purely-functional LINQ não é um modelo de programação puramente funcional pois permite efeitos colaterais, sendo assim, não referencialmente transparente que é uma premissa de uma linguagem puramente funcional.

LINQ É ou não é Funcional? Anders Hejlsberg, Chief Architect do C# Nesta entrevista, http://blogs.msdn.com/b/charlie/archive/2007/01/26/anders -hejlsberg-on-linq-and-functional-programming.aspx Anders explica por que LINQ e programação funcional está mudando a nossa forma de desenvolvermos aplicativos.

LINQ por Anders Hejlsberg Ele explica como as idéias de programação funcional ajudou sua equipe a dar um salto no nível de abstração na prototipagem inicial do LINQ. Fala também sobre expressões lambda, modularidade, o uso de funções de alta ordem, árvores de expressão, programação funcional pura e concorrência. Anders diz: "Ao incorporar alguns dos conceitos funcionais torna-se possível a criação de modelos de programação de alto nível. "

LINQ EXEMPLO DE USO NUM AMBIENTE COMERCIAL

F# EXEMPLO DE USO Um exemplo interessante foi o projeto 101 Samples (http://code.msdn.microsoft.com/f-samples-101-0576cb9f) Este projeto demonstra 101 exemplos em F# Dentre os 101 exemplos extraí alguns que achei mais interessante

F# - map Este exemplo mostra um uso simples do "map" let ListSample2() = let data = [1;2;3;4] let r1 = data > List.map (fun x -> x + 1) printfn "Adicionando '1' usando map = %A" r1 let r2 = data > List.map string printfn "Convertendo para strings usando map = %A" r2 let r3 = data > List.map (fun x -> (x,x)) printfn "Tuplas usando map = %A" r3 Adicionando '1' usando map = [2; 3; 4; 5] Convertendo para strings usando map = ["1"; "2"; "3"; "4"] Tuplas usando map = [(1, 1); (2, 2); (3, 3); (4, 4)]

F# - Exemplo Opção de uma função que indica as horas de abertura de uma loja, se houver. let OptionsSample3() = let horaabertura day = match day with DayOfWeek.Monday DayOfWeek.Tuesday DayOfWeek.Thursday DayOfWeek.Friday -> Some(9,17) DayOfWeek.Wednesday -> Some(9,19) // até mais tarde na quarta _ -> None let hoje = DateTime.Now.DayOfWeek match horaabertura hoje with None -> printfn "A loja não abre hoje" Some(s,f) -> printfn "A loja hoje abre das %02d:00 as %d:00" s f A loja hoje abre das 09:00 as 17:00

F# - Exemplo Criar um histograma das ocorrências de determinados caracteres Unicode usando o Microsoft.FSharp.Collections.Map. let SampleMap1() = let data = "The quick brown fox jumps over the lazy dog" let histogram = data.tochararray() > Seq.groupBy (fun c -> c) > Map.ofSeq > Map.map (fun k v -> Seq.length v) for (KeyValue(c,n)) in histogram do printfn "Numero de caracteres '%c' = %d" c n

F# - Exemplo Número de caracteres ' ' = 8 Número de caracteres 'T' = 1 Número de caracteres 'a' = 1 Número de caracteres 'b' = 1 Número de caracteres 'c' = 1 Número de caracteres 'd' = 1 Número de caracteres 'e' = 3 Número de caracteres 'f' = 1 Número de caracteres 'g' = 1 Número de caracteres 'h' = 2...

F# - Exemplo Este exemplo constroi uma uma lista para leitura sob demanda de um arquivo CSV usando utilitários e abstrações de E/S do.net Let EnumerateCSVFile1() = // Grava um arquivo teste System.IO.File.WriteAllLines(@"teste.csv", [ "Desmond, Barrow, Market Place, 2"; "Molly, Singer, Band, 12" ]); /// Essa função constroi uma lista que realiza a separação sob demanda /// das linhas de um dado arquivo CSV let CSVFileEnumerator(fileName) = // Esta função é implementada usando uma expressão de seqüência seq { use sr = System.IO.File.OpenText(fileName) while not sr.endofstream do let line = sr.readline() let words = line.split [ ',';' ';'\t' ] yield words } // Testa no arquivo teste criado, repetindo todo o arquivo let test = CSVFileEnumerator(@"test.csv") printfn "-------Enumeration 1------"; test > Seq.iter (string >> printfn "line %s"); // Repete, dessa vez determinando o número de entradas de cada linha // Note que o arquivo é lido desde o início novamente, uma vez que cada // enumeração é independente printfn "-------Enumeration 2------"; test > Seq.iter (Array.length >> printfn "line has %d entries"); // Repete, dessa vez determinando o número de entradas de cada linha printfn "-------Enumeration 3------"; test > Seq.iter (Array.map (fun s -> s.length) >> string >> printfn "lengths of entries: %s")

F# - Exemplo Calculadora Outro exemplo de projeto estudado foi o de uma calculadora http://www.c-sharpcorner.com/uploadfile/f5b919/implementingcalculator-in-wpf-using-fsharp/ Além das definições, estrutura do projeto, referências, abreviações e definições de tipo o projeto contém também um Xaml para o design gráfico da calculadora que possui esta aparência:

F# - Exemplo Calculadora O código principal do projeto é a classe abaixo que gerencia todo o processamento. namespace FSharp_XAML_demo type Calculator(callback : string -> unit) = let mutable value = "" let mutable oldvalue : float option = None let mutable op : (float -> float -> float) option = None let mutable append = true //checa float member private this.getvalue() = try float value with _ -> 0. //se acrescenta dígito ao número member this.applydigit d = if append then value <- value + d else append <- true value <- d callback value //exceção do caracter de decimal. member this.setdot() = if append then value <- value + "." else append <- true value <- "." callback value //realiza operação, baseada no valor anterior e atual member this.setop newop = match op, oldvalue with Some opv, Some oldvaluev -> oldvalue <- Some(opV oldvaluev (this.getvalue())) value <- "" op <- Some newop _ -> oldvalue <- Some(this.GetValue()) value <- "" op <- Some newop callback "0" //atualiza resultado = member this.eq() = value <- match op, oldvalue with Some opv, Some oldvaluev -> opv oldvaluev (this.getvalue()) > string _ -> value oldvalue <- None op <- None append <- false callback value

F# - Exemplo Calculadora Na classe onde o projeto é executado encontramos as respectivas chamadas : //carrega o xaml new () = Calc(window "Calc.xaml") //trata e chama cada uma das operações aritméticas member this.op_click (sender : obj) (_ : eargs) = let asbutton = sender :?> btn match asbutton.content.tostring() with "+" -> calc.setop (+) "-" -> calc.setop (-) "x" -> calc.setop (*) "Ã " -> calc.setop (/) _ -> ()

REFERÊNCIA Christopher Bennage, What Is Functional Programming? Part 4, Linq, http://dotnet.dzone.com/news/whatfunctional-programming-3 http://dev.bennage.com/blog/2010/09/22/what-isfunctional-programming-part-4-linq/ https://www.autobugfix.com/2010/03/is-linq-functional.html http://msdn.microsoft.com/en-us/library/bb669144.aspx http://blogs.msdn.com/b/ericwhite/archive/2006/10/04/fptutorial.aspx http://blogs.msdn.com/b/charlie/archive/2007/01/26/ander s-hejlsberg-on-linq-and-functional-programming.aspx