JavaScript é uma linguagem multi-paradigma, que possui suporte à programação funcional, nesta talk será abordado e explicado as características do paradigma funcional no JavaScript.
Funções Anônimas Funções anônimas podem ser usadas para conter funcionalidades que não precisam ser nomeadas, ou possivelmente, para uso a curto prazo. Alguns exemplos notáveis incluem closures e currying.
First-class function Funções que são tratadas como um valor qualquer, podendo ser passadas como parâmetro para outras funções, ser retornada como valor, ser atribuida a variáveis ou ser armazenadas em estruturas de dados.
Currying É uma operação em que você transforma uma função que receberia mais de um parâmetro em uma série de chamadas de funções com apenas um parâmetro cada. Um dos usos dessa técnica é evitar, de forma elegante, que o mesmo parâmetro seja passado para a mesma função.
Arrow Functions - Sintaxe mais limpa - O valor do this não pode ser modificado. - Não pode ser usadas utilizando o construtor (new). - this léxico, o valor this da função será sempre o valor de onde a arrow function foi definida, e não de onde ela foi executada.
Arrow Functions var repete = function(valor){ return valor; }; var dobro = function(n) { return n * 2; }; var repete = valor => valor; var dobro = n => n * 2;
Evaluation strategy Strict evaluation Quando a função é chamada, ela sempre será processada por completa e retornará o valor final. Lazy evaluation A função só será processada até onde for necessário, isso pode ser útil em várias situações, já que permite, por exemplo, criar uma lista de números infinitos sem a necessidade de “processar todos os números infinitos”
Evaluation strategy JavaScript adota o Strict Evaluation como sua “estratégia de processamento”, mas é possivel ter as vantagens do Lazy evaluation utilizando bibliotecas como: - Lazy.js (github.com/dtao/lazy.js) - Stream.js (streamjs.org)