The Codest
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Indústrias
    • Fintech e Banca
    • E-commerce
    • Adtech
    • Tecnologia da saúde
    • Fabrico
    • Logística
    • Automóvel
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
Seta para trás VOLTAR
2022-05-25
Desenvolvimento de software

Programação Funcional em JavaScript Parte 1 - Introdução

The Codest

Pawel Ged

Programador Vue.js

Leia nosso artigo para descobrir o poder da programação funcional no JavaScript. A programação funcional é classificada como um paradigma declarativo onde a descrição do programa é separada dos cálculos.

O que é a programação funcional?

"Em termos simples, a programação funcional é uma desenvolvimento de software estilo que coloca uma grande ênfase na utilização de funções"

Excertos do livro: Luis Atencio "Programação Funcional em JavaScript. Como melhorar a sua JavaScript programas que utilizam técnicas funcionais"

Programação funcional é classificado como um declarativo paradigma em que a descrição do programa é separada dos cálculos. A ênfase aqui está na utilização de expressões para descrever a lógica do programa. Isto é o oposto de imperativo programação, onde o código é executada passo a passo e indica ao computador, em pormenor, como realizar a tarefa.

Declarativo vs imperativo, exemplos

Considere um caso em que temos uma matriz de números inteiros e precisamos de elevar cada um deles à segunda potência e depois selecionar apenas os valores que não são pares.

Imperativo

const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9];

const resultados = []

for(let i = 0; i < numbers.length; i++) {
const secondPower = Math.pow(numbers[i], 2)
if(secondPower & 1) { // ou % 2 mas as operações sobre bits são mais rápidas
resultados.push(segundaPotência);
}
}

console.log(resultados) // [1, 9, 25, 49, 81]

Quanto ao imperativo a atenção dada aos pormenores de implementação é claramente visível. No ciclo, é possível ver o índice da matriz com base na necessidade de controlar o número de elementos. Devido ao grande número de detalhes no código, é mais difícil concentrar-se no que está a fazer. Vamos nós agora concentram-se no declarativo solução.

Declarativo

const risesToSecondPower = (num) => Math.pow(num, 2)
const isOdd = (num) => num & 1;

const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]

const results = numbers
.map(risesToSecondPower)
.filter(isOdd);

console.log(resultados) // [1, 9, 25, 49, 81]

Nesta solução, a implementação foi separada da invocação, levando a lógica para funções separadas. Graças a esta solução, podemos concentrar-nos apenas nos nomes das funções que descrevem o que está a acontecer nelas. Além disso, o nível de abstração foi aumentado e a lógica pode agora ser reutilizável. Agora, vamos concentrar-nos na chamada. Não se vêem quaisquer detalhes, apenas uma descrição que nos diz o que este código faz, passo a passo:

  1. mapa(risesToSecondPower) - pega em cada elemento de uma matriz e eleva-o à segunda potência,
  2. filtro(isOdd) - filtrar e selecionar elementos ímpares.

Benefícios

Programação funcional tem muitas vantagens. Quando se trata de JavaScriptA utilização de funções é natural porque se trata de uma linguagem funcional. Mesmo as classes desta linguagem são "açúcar sintático" e são compostas por funções.

No que diz respeito à legibilidade, na abordagem imperativa, o código torna-se normalmente numa lista com nomes de funções que podem ser lidas sequencialmente sem se aprofundar na sua lógica. Como resultado, não nos concentramos nos detalhes de implementação.

Outra vantagem é manter a convenção dos objectos imutáveis. Graças a esta abordagem, o código torna-se mais seguro porque as referências em JavaScript são muito fortes e é fácil modificar o objeto indesejado.

Na programação funcional, o código é dividido em pequenas funções que podem ser facilmente consideradas como código abstrato reutilizável.

Função pura

Uma das considerações importantes na programação funcional são as funções puras. Para criar uma função deste tipo, é necessário recordar algumas regras:

  • o resultado que a função devolve depende apenas dos parâmetros de entrada,
  • não utilize variáveis globais e variáveis que estejam para além do seu próprio alcance,
  • não alteram o estado dos parâmetros,
  • as funções puras não têm quaisquer "efeitos secundários" (normalmente modificam as propriedades do objeto),
  • para os parâmetros de entrada indicados, devolverão sempre um e o mesmo resultado,
  • uma função pura recebe sempre um parâmetro e devolve sempre um parâmetro.
// Função de entrada
let counter = 5
...
const multipleCounter = (multiplicador) => {
contador = contador * multiplicador
}

multiplyCounter(2) // -> ? o resultado depende do valor inicial
// Função pura
const multiplyBy = (multiplicador) => (valor) => valor * multiplicador
const multipleByTwo = multiplyBy(2)

const counter = multiplyByTwo(5) // -> 10

A primeira função é imprevisível porque depende de um parâmetro externo que pode mudar. A segunda função é transparente, depende apenas dos parâmetros de entrada, não os modifica e não utiliza variáveis fora do intervalo. É transparente porque depende de parâmetros, não os modifica, não utiliza variáveis fora do intervalo e devolve um novo valor.

faixa de cooperação

Artigos relacionados

Desenvolvimento de software

Ferramentas Javascript em ação

Descubra algumas ferramentas de recuperação JavaScript para elevar o nível do seu jogo de programação. Saiba mais sobre o ESLint, o Prettier e o Husky!

The Codest
Reda Salmi Programador React

Subscreva a nossa base de conhecimentos e mantenha-se atualizado sobre os conhecimentos do sector das TI.

    Sobre nós

    The Codest - Empresa internacional de desenvolvimento de software com centros tecnológicos na Polónia.

    Reino Unido - Sede

    • Office 303B, 182-184 High Street North E6 2JA
      Londres, Inglaterra

    Polónia - Pólos tecnológicos locais

    • Parque de escritórios Fabryczna, Aleja
      Pokoju 18, 31-564 Cracóvia
    • Embaixada do Cérebro, Konstruktorska
      11, 02-673 Varsóvia, Polónia

      The Codest

    • Início
    • Sobre nós
    • Serviços
    • Case Studies
    • Saber como
    • Carreiras
    • Dicionário

      Serviços

    • Aconselhamento
    • Desenvolvimento de software
    • Desenvolvimento backend
    • Desenvolvimento de front-end
    • Staff Augmentation
    • Programadores de back-end
    • Engenheiros de nuvem
    • Engenheiros de dados
    • Outros
    • Engenheiros de GQ

      Recursos

    • Factos e mitos sobre a cooperação com um parceiro externo de desenvolvimento de software
    • Dos EUA para a Europa: Porque é que as empresas americanas decidem mudar-se para a Europa?
    • Comparação dos centros de desenvolvimento da Tech Offshore: Tech Offshore Europa (Polónia), ASEAN (Filipinas), Eurásia (Turquia)
    • Quais são os principais desafios dos CTOs e dos CIOs?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Direitos de autor © 2026 por The Codest. Todos os direitos reservados.

    pt_PTPortuguese
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek cs_CZCzech pt_PTPortuguese