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

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

Características funcionais de C# 3.0

Apresentações semelhantes


Apresentação em tema: "Características funcionais de C# 3.0"— Transcrição da apresentação:

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

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

3 Motivação Coesão Uso de expressões lambda
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) Query expressions: which provide a language integrated syntax for queries that is similar to relational and hierarchical query languages such as SQL and XQuery. Lambda expressions: an evolution of anonymous methods that provides improved type inference and conversions to both delegate types and expression trees.

4 Motivação Uso de extensão de métodos Composability
Trabalhar com coleções de uma variedade de tipos Uso de Generics Composability Escrever código livre de efeitos colaterais Extension methods: which make it possible to extend existing types and constructed types with additional methods. Composability: is one of the key concepts of functional transformations.  If you write code that does not exhibit side effects, you gain composability.  This means that anywhere in a pure functional transformation, you can refactor by writing a pure method, and calling it with impunity, knowing that your transformation will continue to operate properly.

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

6 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 C# 1.0: First-class functions (delegates), created only from named methods. Environment=object, code=method. C# 2.0: Parameterized types and polymorphic methods (generics) Anonymous methods: creation of delegate objects from code bodies, closure-converted by C# compiler Iterators: stream abstraction, like generators from Clu C# 3.0: Lambda expressions: lightweight syntax for anonymous methods whose bodies are expressions Type inference for locals and lambdas (Also, not discussed: expression trees for lambdas)

7 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 Generics: permit classes, structs, interfaces, delegates, and methods to be parameterized by the types of data they store and manipulate. Generics are useful because they pro- vide stronger compile-time type checking, require fewer explicit conversions between data types, and reduce the need for boxing operations and runtime type checks. Anonymous methods: allow code blocks to be written ìin-lineî where delegate values are expected. Anonymous methods are similar to lambda functions in the Lisp pro- gramming language. C# 2.0 supports the creation of ìclosuresî where anonymous methods access surrounding local variables and parameters. Iterators: are methods that incrementally compute and yield a sequence of values. Itera- tors make it easy for a type to specify how the foreach statement will iterate over its elements. Partial types: allow classes, structs, and interfaces to be broken into multiple pieces stored in different source ?les for easier development and maintenance. Additionally, partial types allow separation of machine-generated and user-written parts of types so that it is easier to augment code generated by a tool.

8 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

9 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

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

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

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

13 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")) {...}

14 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 -> the compiler will find and bind to the extension method Vocês queriam dizer aqui a utilização de delegate??? Função de primeira-ordem??? Alguem pode me dizer pra eu nao colocar besteira.. Quem escreveu isso aqui?

15 Extension methods Aplica-se para Passos
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

16 Extension methods Exemplo:

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

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

19 Tuples Exemplo:

20 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

21 Object and collection initializers
Exemplo Declarativo Expressão

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

23 Object and collection initializers
Inicializador com construtores

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

25 Até agora Implicitly typed local variables Extension methods Tuples
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

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

27 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 O compilador cria a classe automaticamente e infere os seus tipos

28 Anonymous types Utilizado em projeções Criar um subconjunto de valores
You often have one set of data and want to create another set of data from it.  You may want to see a subset of the fields.  The data may be filtered so that there is less of it.  The data may be combined with other data to create an entirely new shape of data.  This is called projection.

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

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

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

32 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 na frente.

33 Query expressions Exemplo
Practical Application: "var q" <-- Anonymous Type (+). An anonymous type that holds an Anonymous Type with one property "staff.Name". Also, "var" lets you create an Implicitly typed local variable (+) . This means,    a) You didn't have to declare/write a class structure to hold a type with one property called "Name" of data type string.    b) You don't have to maintain that either - you can change the structure of the above query, and "it just works" :)

34 Query expressions Exemplo

35 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

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

37 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

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

39 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 xpression trees are efficient in-memory data representations of lambda expressions and make the structure of the expression transparent and explicit.

40 Expression trees Exemplo

41 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

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

43 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

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

45 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 xpression trees are efficient in-memory data representations of lambda expressions and make the structure of the expression transparent and explicit.

46 Expression trees Exemplo

47 Expression trees Exemplo[1]

48 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

49 Referências [1] “C# programming guide”, disponível em: [2] Andrew Kennedy, “C# is a functional programming language”, Microsoft Research Cambridge [3] “Is C# becoming a functional language?”, disponível em: functional-language.aspx [4] Eric White, “Query Composition using Functional Programming Techniques in C# 3.0”, disponível em: [5] “Recommended blog for C# 3.0 and functional programming”, disponível em: Programming.aspx

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


Carregar ppt "Características funcionais de C# 3.0"

Apresentações semelhantes


Anúncios Google