Caractersticas funcionais de C 3 0 Seminrio Programao

  • Slides: 50
Download presentation
Características funcionais de C# 3. 0 Seminário Programação Funcional

Características funcionais de C# 3. 0 Seminário Programação Funcional

Equipe Felipe Cavalcanti – fcf 3 Fernando Kakimoto – fvk Filipe César – fcsa

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

Motivação Construção de APIs de mesmo poder expressivo das linguagens de consulta – LINQ

Motivação Construção de APIs de mesmo poder expressivo das linguagens de consulta – LINQ Project Coesão Bancos de dados relacionais XML Redução de linhas de código Uso de expressões lambda Maior entendimento do código (Readability)

Motivação Uso de extensão de métodos Trabalhar com coleções de uma variedade de tipos

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

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

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

Breve Histórico de C# Criada pela Microsoft como parte da iniciativa. NET Anunciada em

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

Breve Histórico de C# 2. 0 Divulgada juntamente com o release do Visual Studio

Breve Histórico de C# 2. 0 Divulgada juntamente com o release do Visual Studio 2005 Introduziu extensões à linguagem Generics Anonymous method Iterators Partial types

Breve Histórico de C# 3. 0 Corresponde à versão atual Lançada em 19 de

Breve Histórico de 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

Características Funcionais de C# 3. 0 Implicitly typed local variables Extension methods Tuples Object

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

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

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.

Implicitly typed local variables A declaração da variável local com tipo implícito é equivalente

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:

Implicitly typed local variables Exemplos de declarações de variáveis locais utilizando o var incorretamente:

Implicitly typed local variables Exemplos de declarações de variáveis locais utilizando o var incorretamente:

Implicitly typed local variables Declaração de variável local: Inicialização do for: for(var x =

Implicitly typed local variables Declaração de variável local: Inicialização do for: for(var x = 1; x < 10; x++) Inicialização de um foreach var i = 5; foreach(var item in list){. . . } Expressão using (var file = new Stream. Reader("C: \teste. txt")) {. . . }

Extension methods Extension Methods nos permite adicionar novos métodos em tipos já existentes sem

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

Extension methods Aplica-se para Classes, classes abstratas e interfaces Tipos parametrizados e não-parametrizados Passos

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

Extension methods Exemplo:

Extension methods Exemplo:

Extension methods É muito utilizado em query operators que adicionam novas funcionalidades para tipos

Extension methods É muito utilizado em query operators que adicionam novas funcionalidades para tipos já existentes como IEnumerable.

Tuples Um dos tipos muito utilizados na programação funcional. Listas de valores fortemente tipadas,

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.

Tuples Exemplo:

Tuples Exemplo:

Object and collection initializers Criam objetos e coleções em contextos de expressões ao invés

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

Object and collection initializers Exemplo Declarativo Expressão

Object and collection initializers Exemplo Declarativo Expressão

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

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

Object and collection initializers Inicializador com construtores

Object and collection initializers Inicializador com construtores

Object and collection initializers Inicializadores de coleções Consiste numa sequência de inicializadores, limitados por

Object and collection initializers Inicializadores de coleções Consiste numa sequência de inicializadores, limitados por chaves e separados por vírgulas

Até agora Implicitly typed local variables Extension methods Estender tipos através de classes estáticas

Até agora Implicitly typed local variables Extension methods Estender tipos através de classes estáticas Tuples Realiza inferência do tipo de variável Listas de valores fortemente tipadas Object and collection initializers Inicialização in-line de objetos e coleções

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

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

Anonymous types Define, declara e instancia um tipo e um objeto em um único

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

Anonymous types Utilizado em projeções Criar um subconjunto de valores

Anonymous types Utilizado em projeções Criar um subconjunto de valores

Query expressions Provê uma sintaxe integrada para consultas semelhante à linguagens relacionais e hierárquicas

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.

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

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 duas sequências, retornando os valores iguais.

Query expressions Orderby ordena o resultado de acordo com o critério desejado O último

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.

Query expressions Ambiguidades evitadas com expressões sendo identificadas por from e qualquer token válido,

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.

Query expressions Exemplo

Query expressions Exemplo

Query expressions Exemplo

Query expressions Exemplo

Implicitly typed arrays Declarar arrays de tipos implícitos O tipo é inferido de acordo

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

Implicitly typed arrays Pode ser combinados com inicializadores de objetos anônimos Cria uma estrutura

Implicitly typed arrays Pode ser combinados com inicializadores de objetos anônimos Cria uma estrutura de dado de tipo anônimo

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

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

Lambda expressions Statement lambda expressions Expressões mais complicadas Uso de chaves

Lambda expressions Statement lambda expressions Expressões mais complicadas Uso de chaves

Expression trees Permitem que expressões lamda sejam representadas como estruturas de dados ao invés

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

Expression trees Exemplo

Expression trees Exemplo

Implicitly typed arrays Declarar arrays de tipos implícitos O tipo é inferido de acordo

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

Implicitly typed arrays Pode ser combinados com inicializadores de objetos anônimos Cria uma estrutura

Implicitly typed arrays Pode ser combinados com inicializadores de objetos anônimos Cria uma estrutura de dado de tipo anônimo

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

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

Lambda expressions Statement lambda expressions Expressões mais complicadas Uso de chaves

Lambda expressions Statement lambda expressions Expressões mais complicadas Uso de chaves

Expression trees Permitem que expressões lambda sejam representadas como estruturas de dados ao invés

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

Expression trees Exemplo

Expression trees Exemplo

Expression trees Exemplo[1]

Expression trees Exemplo[1]

Conclusão C# 3. 0 e LINQ adotam muitos termos e mecanismos das linguagens de

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

Referências [1] “C# programming guide”, disponível em: http: //msdn. microsoft. com/en-us/library/67 ef 8 sbd.

Referências [1] “C# programming guide”, disponível em: http: //msdn. microsoft. com/en-us/library/67 ef 8 sbd. 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-afunctional-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/Recommended. Blog. For. C 30 And. Fu nctional. Programming. aspx

Características funcionais de C# 3. 0 Seminário Programação Funcional

Características funcionais de C# 3. 0 Seminário Programação Funcional