Articles

A beginner friendly intro to functional programming

Johann Schuster
Oct 25, 2017 · 7 min read

Photo by Sebastien Gabriel on Unsplash

Functional programming is a highly valued approach to writing code, and it’s popularity is continuously increasing in aplicações de software comercial. Programação funcional é um paradigma de escrita de código e é eloquentemente colocar na introdução deste artigo da Wikipédia:

” -um estilo de construção da estrutura e elementos de programas de computador — de que trata a computação como a avaliação de funções matemáticas e que evita a mudança de estado e mutável de dados. É um paradigma de programação declarativa, o que significa que a programação é feita com expressões ou declarações em vez de declarações.”

vamos entrar no que isso significa exatamente muito em breve, mas primeiro, vamos tirar os fundamentos do caminho, fornecendo algum contexto. Este artigo tem a finalidade de esperemos que introduzir os conceitos fundamentais de programação funcional para você e por fim, gostaríamos de ter estabelecido uma compreensão básica de por que iria escolher para aplicá-lo em nossa codificação estilos, como ele se relaciona com JavaScript e alguns padrões básicos que você pode começar de execução em seu código. Esteja atento a um segundo artigo que irá construir sobre este e aprofundar ainda mais as ideias discutidas aqui.

as raízes da programação funcional estão no cálculo Lambda, que foi um sistema desenvolvido na década de 1930 para expressar computação usando funções semelhantes ao que veremos muito em breve. Por um bom tempo, conceitos de programação funcional e linguagens foram amplamente discutidos em contextos acadêmicos e acadêmicos e, eventualmente, sangraram para o desenvolvimento de software comercial. O que torna uma linguagem de programação funcional ou não é a sua capacidade de facilitar o paradigma de programação funcional, linguagens como estas são Ruby, Python, Julia e JavaScript, a última das quais tem propriedades de paradigmas imperativos, orientados a objetos e funcionais.

Let’s look at an example of using an imperative, and then a functional approach to completing a single task.imperativo:

const arr = function getOdds(arr){
let odds = ; for(let i = 0; i < arr.length + 1; i++){
if ( i % 2 !== 0 ){
odds.push( i )
};
};
return odds
};console.log(getOdds(arr))
// logs

funcional:

function getOdds2(arr){
return arr.filter(num => num % 2 !== 0)
}console.log(getOdds2(arr))
// logs // this can be even shorter
const getOdds3 = arr => arr.filter(num => num % 2 !== 0)console.log(getOdds3(arr))
// logs

aparte das melhorias óbvias que a abordagem funcional faz, como um código mais curto, poupando-nos um par de teclas, e o fato de que é muito mais fácil de entender em um olhar rápido, também é elegante, o que resulta em código mais limpo, simplifica a depuração, testes e manutenção.

vamos dividir isso um pouco, para que possamos chegar a uma compreensão clara das diferenças entre as duas abordagens e definir o que é programação funcional.

na primeira abordagem, estamos imperativamente descrevendo cada evento que precisa acontecer para que possamos alcançar a tarefa de filtrar os números ímpares de uma matriz. Nós alimentamos uma função um array, dentro da função nós criamos um array vazio que nós usaremos para armazenar os números ímpares em. Dizemos-lhe para circular sobre a matriz, então declaramos uma condicional, se o índice atual é um número ímpar, empurrá-lo para o vazio. O laço for não inclui o último número no array, ele só inclui os números que levam até ele, então se o nosso último número é ímpar, ele não será incluído. Portanto, adicionamos +1 ao definir a quantidade de iterações que o nosso laço precisa fazer.

na segunda abordagem, nós simplesmente definimos o resultado que queremos ver usando um método chamado filtro, e permitir que a máquina para cuidar de todos os passos no meio. Esta é uma abordagem mais declarativa. Declaramos qual deve ser o resultado final, e o resto é tratado por nós.

Agora podemos ver o que a definição acima mencionada se esforça para expressar. Uma forma de programação, usando declarações e expressões, em vez de declarações. Esta definição apenas raspa a superfície da programação funcional, e vamos continuamente construir sobre a nossa definição à medida que a nossa compreensão cresce.algumas diferenças entre abordagens iterativas e funcionais.

  • estilisticamente, definimos um problema e as mudanças que gostaríamos de ver, ao contrário de explicá-lo passo a passo.
  • Não precisamos gerenciar o estado em nossas funções como acima, onde Gerenciamos o estado de nossa matriz vazia.não temos que nos preocupar tanto com a ordem de execução.usamos menos loops, Condições e usamos métodos mais incorporados, funções reutilizáveis e recursão.

Usando esta abordagem, nós finalmente escrever código mais limpo que, como mencionado acima, nos ajuda na depuração e manutenção. Mantém as coisas modulares, e secções do nosso código são divididas em partes mais pequenas que podemos testar com facilidade. Podemos reutilizar partes do nosso código usando funções auxiliares e, por último, é uma abordagem matemática mais eficiente para escrever código.os pilares: Nosso conjunto de ferramentas de codificação para escrever código funcional

a seguir estão alguns aspectos importantes para escrever código funcional de alta qualidade. Vendo que esta é uma visão geral, não vamos mergulhar muito em cada um, em vez disso vamos apenas definir algumas características chave e um exemplo de cada um.

funções puras:

funções puras retornam um valor baseado apenas no que foi passado para ele. A idéia por trás disso é que será uma função pura se ele sempre retorna o mesmo resultado se os mesmos valores são passados para ele, e não modifica valores fora do escopo de ts, o que o torna independente de qualquer estado no sistema. Portanto, uma função pura nunca pode alterar dados, não produzir efeitos colaterais e pode ser facilmente reutilizada. Um exemplo de uma função não Pura será uma função que faz uma chamada API ou retorna um resultado imprevisível.

função impura simples:

var tip = 0;function calculateTip( mealTotal ) {
tip = 0.15 * mealTotal;
}calculateTip( 150 )
console.log(tip)

função pura simples:

function isPure(x,y) {
return x * y
}console.log(isPure(3,5));

a função pura irá retornar o resultado exato todas as vezes, e não mutará quaisquer dados fora dele. A coisa importante para prestar atenção é que uma função pura deve ficar longe de dados mutantes qualquer que seja, por isso tenha cuidado ao selecionar que Métodos usar dentro de suas funções puras. Por exemplo, se você deseja mesclar duas arrays dentro de sua função, como uma normalmente faria em um redutor de reação, evite usar a Array.prototipo.método push (). Em vez disso, você gostaria de usar Array.prototipo.concat( ), que irá preservar o estado dos antigos arrays e devolver um novo para o seu uso.

funções de ordem superior:

em Javascript, funções são tratadas como objetos, portanto podemos passar funções ao redor como qualquer outro valor. Uma função de ordem superior é simplesmente uma função que opera em outras funções. Eles podem assumir uma função como entrada, ou retornar uma Como saída. Veremos um exemplo simples na seguinte demonstração.

funções anônimas:

funções anônimas são muito úteis quando precisamos definir a lógica ad hoc como precisamos. Como o nome implica, uma função anônima em nameless, e encontrada principalmente como um argumento para uma função como um substituto para uma função nomeada, uma função atribuída a uma variável, ou retornada como uma função em uma função de ordem superior. Suas raízes estão fortemente no cálculo Lambda e é muito importante para todas as linguagens de programação funcionais.

função anónima atribuída a uma variável. Fácil de passar e invocar quando necessário.

const myVar = function(){console.log(‘Anonymous function here!’)}myVar()

a função Anônima como argumento

setInterval(function(){console.log(new Date().getTime())}, 1000);

Anônimo funções dentro de uma ordem superior a função

function mealCall(meal){
return function(message){
return console.log(message + " " + meal + ‘!!’)
}
}const announceDinner = mealCall(‘dinner’)
const announceLunch = mealCall(‘breakfast’)announceDinner(‘hey!, come and get your’)
announceLunch(‘Rise and shine! time for’)

a Recursividade

a Recursividade é uma conhecida técnica de programação funcional. Uma função recursiva é simplesmente uma função que se chama a si mesma, e, portanto, atua como um loop executando o mesmo código várias vezes. Vem com uma advertência, porém, é preciso ter cuidado para evitar recursões infinitas. Portanto, é necessário um caso de base, para dizer – lhe quando parar. Funções recursivas ou algoritmos podem ser implementados usando recursão e loops, mas é melhor usar recursão. Abaixo está o algoritmo bem conhecido para factorizar um número usando recursão e um loop.

função Recursiva

function factorialize(num){
if (num === 0 || num === 1){return 1;}
return (num * factorialize(num — 1));
}var result = factorialize(14);console.log(result);

Recursão usando um loop

function factorialize(num) {
if (num === 0 || num === 1){
return 1;
}
for (var i = num-1; i >= 1; i-- ) {
num *= i;
}
return num;
}
console.log(factorialize(6));

cobrimos alguns dos ingredientes essenciais para a escrita funcional código. Não é possível escrever sempre o código funcional em uma aplicação, mas os benefícios são grandes quando usados tanto quanto possível. Frameworks como Angular e Reagir são fortemente influenciados pela programação funcional e bibliotecas como Redux e Lodash nos permitem utilizar os benefícios, então há definitivamente um grande benefício para começar a pensar no PQ maneira.recursos para aprender mais? Aqui estão alguns grandes artigos e recursos para a continuação da aprendizagem.

  • Por que aprender Programação Funcional em JavaScript? por Eric Elliot
  • Eloquente de JavaScript, Marijn Haverbeke
  • Então você quer ser um Programador Funcional por Charles Scalfani

Foto por Patrick Tona em Unsplash

eu realmente espero que isso era útil e no próximo artigo vamos aprofundar um pouco e descompactar ainda mais interessantes e úteis ferramentas como JavaScript métodos, aplicação parcial, pelaria, argumento de ligação e muito mais.Sinta-se livre para aplaudir, compartilhar, criticar ou compartilhar quaisquer pensamentos sobre o tema!

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *