Programação funcional em relação à programação obrigatória
Este tópico compara e contrasta programação funcional com programação (procedural) imperativa mais tradicional.
Programação com funcional.Programação imperativa
O paradigma funcional de programação foi criado explicitamente para suportar uma abordagem funcional pura a resolução de problemas. Programação funcional é um formulário de programação declarativa. Por outro lado, a maioria das linguagens do grosso de preenchimento, incluindo linguagens de (OOP) de programação orientada a objeto como C#, Visual Basic, C++, e Java, – foram criados para suportar primeiro programação (procedural) imperativa .
Com uma abordagem imperativa, um desenvolvedor escreve o código que descreve detalhadamente exigente as etapas que o computador deve executar para fazer o objetivo. Isso é às vezes chamado de programação algorítmica . Por outro lado, uma abordagem funcional envolve compõem o problema como um conjunto de funções a ser executadas. Você define cuidadosamente entrada a cada função, e o que cada função retorna. A tabela a seguir descreve algumas das diferenças gerais entre essas duas abordagens.
Característica |
Abordagem imperativa |
Abordagem funcional |
---|---|---|
Foco do programador |
Como executar tarefas (algoritmos) e como controlar alterações no estado. |
Informações que é desejada e que transformações são necessárias. |
Alterações de estado |
Importante. |
Inexistente. |
Ordem de execução |
Importante. |
Baixa importância. |
Controle de fluxo primária |
Loop, condições, e chamadas de função (método). |
Chamadas de função, incluindo a recursão. |
Unidade principal de manipulação |
Instâncias das classes ou estruturas. |
Funções como objetos de primeira classe e coleções de dados. |
Embora a maioria das linguagens sejam criados para oferecer suporte a um paradigma específico de programação, vários idiomas gerais é flexível o suficiente para suportar várias paradigma. Por exemplo, a maioria das linguagens que contêm ponteiros de função podem ser usados para oferecer suporte digna de crédito programação funcional. Além disso, em C# 3,0 e no Visual Basic 9,0, as extensões de linguagem explícitas foram adicionados para suportar programação funcional, incluindo expressões lambda e inferência de tipos. A tecnologia LINQ é um formulário de programação declarativa, funcional.
Programação funcional usando XSLT
Muitos desenvolvedores XSLT estão familiarizados com a abordagem funcional pura. A maioria de modo eficiente desenvolver uma folha de estilos XSLT é manipular cada modelo como uma transformação isolado, passível de composição. A ordem de execução de- é completamente sublinhado. XSLT não permite efeitos colaterais (exceto mecanismos de escape para executar o código procedural pode gerar os efeitos colaterais que resultam na impureza funcional). No entanto, embora XSLT é uma ferramenta eficaz, algumas de suas características não são ótimas. Por exemplo, expressar construções de programação em XML torna o código relativamente detalhado, e portanto difícil manter. Além disso, confiança pesada na recursão para o controle de fluxo pode resultar em código que é difícil de ler. Para obter mais informações sobre XSLT, consulte Transformações XSLT.
No entanto, XSLT provou o valor de usar uma abordagem funcional pura para transformar XML de uma forma para outra. Programação funcional pura com LINQ to XML é semelhante de várias maneiras a fonte. No entanto, as construções de programação introduzidas por LINQ to XML 3,0 e C# e Visual Basic 9,0 permitem que você escreva as transformações e puras que são mais legíveis e sustentável de fonte.
Vantagens de funções puras
O principal motivo para implementar transformações e como funções puras é que as funções puras são passível de composição: isto é, independentemente e sem estado. Essas características trazem um número de benefícios, incluindo o seguinte:
Legibilidade e sustentabilidade aumentadas. Isso ocorre porque cada função é criada para realizar uma tarefa específica determinada seus argumentos. A função não confiar em qualquer estado externo.
Desenvolvimento reiterative mais fácil. Porque o código é mais fácil refatorar, alterações no design são geralmente mais fácil de implementar. Por exemplo, suponha o escrever uma transformação complicada, e realize-o em que qualquer código é repetido várias vezes na transformação. Se você refatora com um método puro, você pode chamar o método puro na vontade sem se preocupar sobre efeitos colaterais.
Teste e depuração mais fácil. Como as funções puras podem acessar mais facilmente seja testado no isolamento, você pode escrever código de teste que chama a função pura com valores típicos, caso válidos de borda casos, e inválidas de borda.
Fazer a transição para OOP desenvolvedores
Em programação orientada a objeto tradicional (OOP), a maioria dos desenvolvedores estão acostumados a programação estilo obrigatório/procedural. Para alternar a ficar em um estilo funcional puro, eles precisam fazer uma transição no seu pensamento e a abordagem ao desenvolvimento.
Para resolver problemas, OOP hierarquias de classe de design de desenvolvedores, centram-se sobre encapsulamento apropriada, e pensam-se em termos de contratos de classe. O comportamento e o estado dos tipos de objeto são primordiais, e os recursos de linguagem, como classes, interfaces, herança, herança e polimorfismo, são fornecidos para resolver esses interesses.
Por outro lado, a programação funcional aproxima problemas computacionais como um exercício a avaliação de transformações e puras de coleções de dados. Programação funcional evita o estado e dados mutáveis, e sublinha ao aplicativo de funções.
Felizmente, C# e Visual Basic não requerem o pulo completo para programação funcional, porque ele suporta abordagens imperativas e funcionais de programação. Um desenvolvedor pode escolher qual abordagem é a mais adequado para um cenário específico. De fato, os programas combinam geralmente as duas abordagens.
Consulte também
Conceitos
Introdução às transformações funcionais puras