características funcionais de c# 3.0 seminário programação funcional

50
Características funcionais de C# 3.0 Seminário Programação Funcional

Upload: internet

Post on 19-Apr-2015

108 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Características funcionais de C# 3.0 Seminário Programação Funcional

Características funcionais de C# 3.0

Seminário Programação Funcional

Page 2: Características funcionais de C# 3.0 Seminário Programação Funcional

Equipe Felipe Cavalcanti – fcf3 Fernando Kakimoto – fvk Filipe César – fcsa Francisco Magalhães – fpms

Page 3: Características funcionais de C# 3.0 Seminário Programação Funcional

Motivação Construção de APIs de mesmo poder

expressivo das linguagens de consulta – LINQ Project Bancos de dados relacionais XML

Coesão Redução de linhas de código

Uso de expressões lambda Maior entendimento do código (Readability)

Page 4: Características funcionais de C# 3.0 Seminário Programação Funcional

Motivação Uso de extensão de métodos

Trabalhar com coleções de uma variedade de tipos

Uso de Generics

Composability Escrever código livre de efeitos colaterais

Page 5: Características funcionais de C# 3.0 Seminário Programação Funcional

Roteiro Breve Histórico de C# Características funcionais de C# 3.0 Exemplos Conclusão

Page 6: Características funcionais de C# 3.0 Seminário Programação Funcional

Breve Histórico de C# Criada pela Microsoft como parte da

iniciativa .NET Anunciada em Julho de 2000 após aprovação

ECMA-334 Características iniciais

Linguagem orientada a objetos Tipagem forte Portabilidade de código Gerenciador de memória automático Suporte a internacionalização

Page 7: Características funcionais de C# 3.0 Seminário Programação Funcional

Breve Histórico de C# C# 2.0

Divulgada juntamente com o release do Visual Studio 2005

Introduziu extensões à linguagem Generics Anonymous method Iterators Partial types

Page 8: Características funcionais de C# 3.0 Seminário Programação Funcional

Breve Histórico de C# C# 3.0

Corresponde à versão atual Lançada em 19 de Novembro de 2007 Parte do .NET Framework 3.5 Novas características

Linguagens funcionais LINQ

Page 9: Características funcionais de C# 3.0 Seminário Programação Funcional

Características Funcionais de C# 3.0 Implicitly typed local variables Extension methods Tuples Object and collection initializers Anonymous types Query expressions Implicitly typed arrays Lambda expressions Expressions trees

Page 10: Características funcionais de C# 3.0 Seminário Programação Funcional

Implicitly typed local variables Utilizando-se a palavra-chave var, força o

compilador a inferir o tipo da variável ou array de elementos da expressão do lado direito da sentença.

É obrigatório a inicialização da variável var na declaração

A inicialização precisa ter um tipo definido em tempo de compilação, aonde não pode ser null.

A inicialização não pode referenciar a declaração da variável.

Page 11: Características funcionais de C# 3.0 Seminário Programação Funcional

Implicitly typed local variables A declaração da variável local com tipo

implícito é equivalente a declaração com tipo explicito mostrada a baixo:

Page 12: Características funcionais de C# 3.0 Seminário Programação Funcional

Implicitly typed local variables Exemplos de declarações de variáveis locais

utilizando o var incorretamente:

Page 13: Características funcionais de C# 3.0 Seminário Programação Funcional

Implicitly typed local variables Declaração de variável local:

var i = 5;

Inicialização do for: for(var x = 1; x < 10; x++)

Inicialização de um foreach foreach(var item in list){...}

Expressão using using (var file = new StreamReader("C:\\teste.txt"))

{...}

Page 14: Características funcionais de C# 3.0 Seminário Programação Funcional

Extension methods Extension Methods nos permite adicionar

novos métodos em tipos já existentes sem que seja necessário realizar herança ou mesmo recompilar o tipo original

Métodos estáticos que podem ser chamados usando a síntaxe de métodos de instância.

O compilador fica responsável por procurar e invocar o método estendido

Page 15: Características funcionais de C# 3.0 Seminário Programação Funcional

Extension methods Aplica-se para

Classes, classes abstratas e interfaces Tipos parametrizados e não-parametrizados

Passos Definir uma classe estática Definir um método estático cujo primeiro

argumento seja do tipo para o qual se deseja estender

Usar a palavra chave this no primeiro argumento

Page 16: Características funcionais de C# 3.0 Seminário Programação Funcional

Extension methods Exemplo:

Page 17: Características funcionais de C# 3.0 Seminário Programação Funcional

Extension methods É muito utilizado em query operators que

adicionam novas funcionalidades para tipos já existentes como IEnumerable.

Page 18: Características funcionais de C# 3.0 Seminário Programação Funcional

Tuples Um dos tipos muito utilizados na programação

funcional. Listas de valores fortemente tipadas, tal

como o conjunto de argumentos para um método.

Page 19: Características funcionais de C# 3.0 Seminário Programação Funcional

Tuples Exemplo:

Page 20: Características funcionais de C# 3.0 Seminário Programação Funcional

Object and collection initializers Criam objetos e coleções em contextos de

expressões ao invés de declarações

Inicialização in-line de objetos

Mais conveniente de implementar

Mais fácil de ler

Page 21: Características funcionais de C# 3.0 Seminário Programação Funcional

Object and collection initializers Exemplo

Declarativo Expressão

Page 22: Características funcionais de C# 3.0 Seminário Programação Funcional

Object and collection initializers Passar como argumento de funções

Objetos dentro de objetos

Page 23: Características funcionais de C# 3.0 Seminário Programação Funcional

Object and collection initializers Inicializador com construtores

Page 24: Características funcionais de C# 3.0 Seminário Programação Funcional

Object and collection initializers Inicializadores de coleções

Consiste numa sequência de inicializadores, limitados por chaves e separados por vírgulas

Page 25: Características funcionais de C# 3.0 Seminário Programação Funcional

Até agora Implicitly typed local variables

Realiza inferência do tipo de variável Extension methods

Estender tipos através de classes estáticas Tuples

Listas de valores fortemente tipadas Object and collection initializers

Inicialização in-line de objetos e coleções

Page 26: Características funcionais de C# 3.0 Seminário Programação Funcional

Mais pra frente Anonymous types Query expressions Implicitly typed arrays Lambda expressions Expressions trees

Page 27: Características funcionais de C# 3.0 Seminário Programação Funcional

Anonymous types Define, declara e instancia um tipo e um

objeto em um único passo (classe sem nome)

Utiliza a idéia de tuplas – conjunto de pares nome/valor

Limitado ao scopo local

Exemplo

Page 28: Características funcionais de C# 3.0 Seminário Programação Funcional

Anonymous types Utilizado em projeções

Criar um subconjunto de valores

Page 29: Características funcionais de C# 3.0 Seminário Programação Funcional

Query expressions Provê uma sintaxe integrada para consultas

semelhante à linguagens relacionais e hierárquicas como SQL e XQuery.

Iniciam com a cláusula from e terminam com a cláusula select ou group.

A cláusula from inicial pode ter em seguida zero ou mais from, let, where ou join.

Page 30: Características funcionais de C# 3.0 Seminário Programação Funcional

Query expressions Cada let computa um valor e o coloca em um

identificador.

Cada where é um filtro que exclui itens do resultado

Joins comparam as chaves especificadas das duas sequências, retornando os valores iguais.

Page 31: Características funcionais de C# 3.0 Seminário Programação Funcional

Query expressions Orderby ordena o resultado de acordo com o

critério desejado

O último select ou group especificam o formato do resultado.

Cláusula Into permite a junção de consultas tratando o resultado de uma consulta como um gerador de uma subsequente.

Page 32: Características funcionais de C# 3.0 Seminário Programação Funcional

Query expressions Ambiguidades evitadas com expressões sendo

identificadas por from e qualquer token válido, exceto ";", "=" or ",".

Para utilizar qualquer uma das palavras-chaves, deve colocar o @ na frente.

Page 33: Características funcionais de C# 3.0 Seminário Programação Funcional

Query expressions Exemplo

Page 34: Características funcionais de C# 3.0 Seminário Programação Funcional

Query expressions Exemplo

Page 35: Características funcionais de C# 3.0 Seminário Programação Funcional

Implicitly typed arrays Declarar arrays de tipos implícitos

O tipo é inferido de acordo com seus elementos

Todos os elementos devem ter um único tipo inferido Caso contrário, erro de complilação

Exemplo

Page 36: Características funcionais de C# 3.0 Seminário Programação Funcional

Implicitly typed arrays Pode ser combinados com inicializadores de

objetos anônimos Cria uma estrutura de dado de tipo anônimo

Page 37: Características funcionais de C# 3.0 Seminário Programação Funcional

Lambda expressions Expressam a implementação de um método

ou a instanciação de um delegate a partir de uma construção sintática simples

Usada em delegações e em árvores de expressões

Exemplo

Page 38: Características funcionais de C# 3.0 Seminário Programação Funcional

Lambda expressions Statement lambda expressions

Expressões mais complicadas Uso de chaves

Page 39: Características funcionais de C# 3.0 Seminário Programação Funcional

Expression trees Permitem que expressões lamda sejam

representadas como estruturas de dados ao invés de código executável.

Eficientes em termos de memória

Explicita e deixam transparentes a estrutura das expressões lambda

Page 40: Características funcionais de C# 3.0 Seminário Programação Funcional

Expression trees Exemplo

Page 41: Características funcionais de C# 3.0 Seminário Programação Funcional

Implicitly typed arrays Declarar arrays de tipos implícitos

O tipo é inferido de acordo com seus elementos

Todos os elementos devem ter um único tipo inferido Caso contrário, erro de complilação

Exemplo

Page 42: Características funcionais de C# 3.0 Seminário Programação Funcional

Implicitly typed arrays Pode ser combinados com inicializadores de

objetos anônimos Cria uma estrutura de dado de tipo anônimo

Page 43: Características funcionais de C# 3.0 Seminário Programação Funcional

Lambda expressions Expressam a implementação de um método

ou a instanciação de um delegate a partir de uma construção sintática simples

Usada em delegações e em árvores de expressões

Exemplo

Page 44: Características funcionais de C# 3.0 Seminário Programação Funcional

Lambda expressions Statement lambda expressions

Expressões mais complicadas Uso de chaves

Page 45: Características funcionais de C# 3.0 Seminário Programação Funcional

Expression trees Permitem que expressões lambda sejam

representadas como estruturas de dados ao invés de código executável.

Eficientes em termos de memória

Explicita e deixam transparentes a estrutura das expressões lambda

Page 46: Características funcionais de C# 3.0 Seminário Programação Funcional

Expression trees Exemplo

Page 47: Características funcionais de C# 3.0 Seminário Programação Funcional

Expression trees Exemplo[1]

Page 48: Características funcionais de C# 3.0 Seminário Programação Funcional

Conclusão C# 3.0 e LINQ adotam muitos termos e

mecanismos das linguagens de programação funcional

Alto poder de coesão através das características apresentadas Diminui linhas de código Facilita a leitura Ajuda na manutenção e extensão

Apesar das várias características funcionais, C# é limitada, não se tornando verdadeiramente multiparadigma

Page 49: Características funcionais de C# 3.0 Seminário Programação Funcional

Referências [1] “C# programming guide”, disponível em:

http://msdn.microsoft.com/en-us/library/67ef8sbd.aspx [2] Andrew Kennedy, “C# is a functional programming

language”, Microsoft Research Cambridge [3] “Is C# becoming a functional language?”,

disponível em: http://blogs.msdn.com/madst/archive/2007/01/23/is-c-becoming-a-functional-language.aspx

[4] Eric White, “Query Composition using Functional Programming Techniques in C# 3.0”, disponível em: http://blogs.msdn.com/ericwhite/pages/FP-Tutorial.aspx

[5] “Recommended blog for C# 3.0 and functional programming”, disponível em: http://blog.falafel.com/2007/09/04/RecommendedBlogForC30AndFunctionalProgramming.aspx

Page 50: Características funcionais de C# 3.0 Seminário Programação Funcional

Características funcionais de C# 3.0

Seminário Programação Funcional