Fiz uma pesquisa rápida sobre Functional Programming, e abaixo fiz uma pequena compilação do que encontrei. Alguns dos trechos de texto dispostos aqui forma copiados de sites, e acredito que todos estão referenciados nos links.
REGRAS BÁSICAS
- Não há variáveis em Functional Programming;
- Recursão é usada ao invés de estruturas de loop;
- Imutabilidade cria códigos mais simples e seguros;
Mais informações: https://medium.com/@cscalfani/so-you-want-to-be-a-functional-programmer-part-1-1f15e387e536#.ksj3rzo7d
PURE FUNCTIONS
- Operam apenas sobre seus parâmetros de entrada;
- Devem retornar alguma coisa (nunca são void);
- Sempre produzem o mesmo output quando dados os mesmos inputs;
- Não há efeitos colaterais
Mais informações: https://medium.com/@cscalfani/so-you-want-to-be-a-functional-programmer-part-1-1f15e387e536#.ksj3rzo7d
REGRAS BÁSICAS
- Não há variáveis em Functional Programming;
- Recursão é usada ao invés de estruturas de loop;
- Imutabilidade cria códigos mais simples e seguros;
Mais informações: https://medium.com/@cscalfani/so-you-want-to-be-a-functional-programmer-part-1-1f15e387e536#.ksj3rzo7d
PURE FUNCTIONS
- Operam apenas sobre seus parâmetros de entrada;
- Devem retornar alguma coisa (nunca são void);
- Sempre produzem o mesmo output quando dados os mesmos inputs;
- Não há efeitos colaterais
Mais informações: https://medium.com/@cscalfani/so-you-want-to-be-a-functional-programmer-part-1-1f15e387e536#.ksj3rzo7d
HIGHER ORDER FUNCTIONS
Higher-order functions são funções que (1) recebem funções em seus argumentos; ou (2) retornam funções.e.g.:
Func<int, bool> isEven = x => x % 2 == 0; Func<int, bool> not(Func<int, bool> f) = x => !f(x); Func<int, bool> isOdd = not(isEven); <-- HIGHER ORDER FUNCION
Mais informações:
- http://elemarjr.com/pt/2010/08/24/functional-programming-higher-order-functions/
- http://elemarjr.com/pt/2011/11/13/functional-programming-higher-order-functions-com-javascript/
- http://elemarjr.com/pt/2012/06/16/haskell-para-programadores-c-parte-7-higher-order-functions/
MEMOIZATION
Reutiliza o resultado de execuções préviasMais informações:
COMBINATORS / COMPOSITION
São Higher-Order Functions que usam somente funções e outros combinators para entregar novas funcionalidades. É uma espécie de decorator para função, ampliando uma função original.e.g.:
Func<int, int, int> soma = (x, y) => x + y; /* este método é um combinator */ Func<int, int, int> logarOperacao = (Func<int, int, int> f) => { return (x, y) => { var result = f(x, y); Console.WriteLine($"Resultado: { result }"); return result; } } // combina. soma = logarOperacao(soma); soma(1, 2); soma(3, 4);
Mais informações:
CURRYING / PARTIAL APPLICATION
e.g CURRYING.:
Func<int, int, int> add = a => b => a + b; Console.Write(add(2)(5)); // == 7!
P) qual a vantagem?
R) autoriza a utilização de uma técnica chamada "Partial Application";
PARTIAL APPLICATION
Permite que criemos uma nova função com base em uma existente. Geralmente, partimos de uma função mais genérica para criar uma função com aplicação mais expecífica.
Func<int, int, int> add = (a, b) => a + b; Func<int, int> add2 = a => add(a, 2);
Mais informações:
Nenhum comentário:
Postar um comentário