Share via


Conceitos e terminologia (transformação funcional) (LINQ to XML)

Este tópico apresenta os conceitos e a terminologia de transformações funcionais puras. A abordagem de transformação funcional para transformar dados gera códigos que geralmente são mais rápidos de programar, mais expressivos e mais fáceis de depurar e manter do que a programação mais tradicional e imperativa.

Observe que os artigos desta seção não se destinam a explicar totalmente a programação funcional. Em vez disso, eles identificam alguns dos recursos de programação funcional que facilitam a transformação de XML de um formato para outro.

O que é a transformação funcional pura

Na transformação funcional pura, um conjunto de funções, chamadas funções puras, define como transformar um conjunto de dados estruturados de sua forma original em outra forma. A palavra "pura" indica que as funções são combináveis, o que exige que elas sejam o seguinte:

  • Autocontidas, de modo que elas possam ser ordenadas e reorganizadas livremente sem complicação ou interdependências com o restante do programa. As transformações puras não têm nenhum conhecimento de efetuam-no ou em cima do seu ambiente. Isto é, as funções usadas na transformação não têm efeito colateral.
  • Sem monitoração de estado, de modo que a execução da mesma função ou conjunto específico de funções, na mesma entrada, sempre resultará na mesma saída. As transformações puras não têm memória do seu uso prévio.

Importante

No restante deste tutorial, o termo “function” pura é usado em um sentido geral indicar uma abordagem de programação, e não em um recurso de linguagem específica.

Observe que as funções puras devem ser implementadas como métodos em C# e como funções no Visual Basic.

Além disso, você não deve confundir funções puras com os métodos virtuais puros em C++. O último indica que a classe recipiente é abstrato e que nenhum corpo do método é fornecido.

Programação funcional

A programação funcional é uma abordagem de programação que dá suporte diretamente à transformação funcional pura.

Historicamente, as linguagens de programação funcionais de uso geral, como o ML, Scheme, Haskell e F#, têm sido, principalmente, de interesse da comunidade acadêmica. Embora é sempre possível escrever transformações e puras em C# e Visual Basic, a dificuldade de fazer isso que não irá fazer uma opção atrativas a maioria de programadores. Em versões recentes dessas linguagens, no entanto, novos constructos de linguagem, como expressões lambda e inferência de tipos, tornam a programação funcional muito mais fácil e produtiva.

Para saber mais sobre a programação funcional, confira Programação funcional versus programação imperativa.

Linguagens de programação funcional específicas de um domínio

Embora as linguagens de programação funcional gerais não tenham sido amplamente adotadas, algumas linguagens de programação funcional específicas de um domínio fizeram mais sucesso. Por exemplo, as CSS (folhas de estilos em cascata) são usadas para determinar a aparência de muitas páginas da Web, e as folhas de estilo XSLT (Extensible Stylesheet Language Transformations) são usadas extensivamente na manipulação de dados XML. Para obter mais informações sobre XSLT, consulte Transformações XSLT.

Terminologia

A tabela a seguir define os termos relacionados às transformações funcionais.

função (de primeira classe) de pedido superior
Uma função que pode ser tratado como um objeto através de programação. Por exemplo, uma função de pedido superior pode ser passada para ou retornado de outras funções. Em C# e Visual Basic, representantes e expressões lambda são recursos de linguagem que suportam funções de pedido superior. Para gravar uma função de pedido superior, você declara um ou mais argumentos para tomar representantes, e você frequentemente usa expressões lambda para chamá-lo. Muitos dos operadores de consulta padrão são funções de pedido superior.

Para saber mais, confira Visão geral de operadores de consulta padrão (C#) e Visão geral de operadores de consulta padrão (Visual Basic).

expressão lambda
Essencialmente, uma função anônimo embutido que pode ser usada em que um tipo delegate é esperada. Essa é uma definição simplificada das expressões lambda, mas é suficiente para a finalidade deste tutorial.

Para saber mais, confira Expressões lambda (Guia de programação em C#) e Expressões lambda (Visual Basic).

Coleção
Um conjunto estruturada de dados, geralmente um tipo de uniforme. Para ser compatível com LINQ, uma coleção deve implementar a interface de IEnumerable ou a interface de IQueryable (ou uma de suas contrapartes genéricos, de IEnumerator<T> ou de IQueryable<T>).

tuple (tipos anônimos)
Um conceito matemático, um tuple é uma sequência finito rotuladas de objetos, cada um de um tipo específico. Um tuple também é conhecido como uma lista ordenada. Tipos anônimos são uma implementação de linguagem desse conceito, que permitem que um tipo sem nome da classe ser declarados e um objeto do tipo a ser instanciada ao mesmo tempo.

Para saber mais, confira Tipos anônimos (Guia de programação em C#) ou Tipos anônimos (Visual Basic).

inferência de tipos (digite implícito)
A capacidade de um compilador de determinar o tipo de uma variável na ausência de uma declaração de tipo explícita.

Para saber mais, confira Variáveis locais de tipo implícito (Guia de programação em C#) e Inferência de tipo local (Visual Basic).

execução adiada e avaliação lazy
O atraso de avaliação de uma expressão até que o valor resolvido é realmente necessário. A execução adiada é suportado em coleções.

Para saber mais sobre C#, confira Introdução a consultas LINQ (C#) e Execução adiada e avaliação lenta em LINQ to XML (C#).

Para saber mais sobre o Visual Basic, confira Operações de consulta básica (Visual Basic) e Execução adiada e avaliação lenta em LINQ to XML (Visual Basic).

Esses recursos de idioma serão usados em exemplos de código em todo esta seção.

Confira também