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

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

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

Apresentações semelhantes


Apresentação em tema: "Características funcionais de C# 3.0 Seminário Programação Funcional."— 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  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)

4 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

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

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

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

15 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

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 DeclarativoExpressã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  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

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

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

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

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

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 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 Programming.aspx

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


Carregar ppt "Características funcionais de C# 3.0 Seminário Programação Funcional."

Apresentações semelhantes


Anúncios Google