Funções de primeira classe e funções de alta ordem em JavaScript

Dec 16 2022
Uma função é um bloco de código projetado para executar uma tarefa específica. As funções são blocos de construção fundamentais muito importantes e poderosos em JavaScript.

Uma função é um bloco de código projetado para executar uma tarefa específica. As funções são blocos de construção fundamentais muito importantes e poderosos em JavaScript. Se você está começando a se envolver com funções em JavaScript, provavelmente já ouviu os termos “Funções de Primeira Classe” e “Funções de Alta Ordem”. Vamos dar uma olhada no que esses termos estão tentando transmitir, a conexão entre eles e o que eles nos fornecem.

O JavaScript tem todas as habilidades ou recursos que exigem ser uma linguagem com funções de primeira classe, portanto, as funções são tratadas como cidadãs de primeira classe. Bem, o significado de “cidadãos de primeira classe (objetos)” é que na linguagem de programação determinada entidade (função) suporta todas as propriedades operacionais inerentes a outras entidades; propriedades como ser capaz de ser atribuído a uma variável, passado como um argumento de função, retornado de uma função... Basicamente, cidadania de primeira classe significa simplesmente “ser capaz de fazer o que todo mundo pode fazer”. Como resultado, diz-se que a linguagem de programação tem funções de primeira classe quando as funções dessa linguagem são tratadas como qualquer outra variável.

Vejamos quais funções o First Class Citizen nos fornece em JavaScript e quais portas ele nos abre para todos os tipos de paradigmas programáticos e técnicas que de outra forma não seriam possíveis.

  • Capacidade de armazenar funções em uma variável
  • const summation = function (a,b) {
    return a+b
    }
    summation(1,2) // 3
    

    const foo = {
     value: 1,
     summation: function(a,b) {
       return a+b+this.value
     }   
    }
    const sum = foo.summation(2,3)
    console.log(sum) // 6
    

    function sayHello() {
      return "Hello ";
    }
    function sayHelloWorld(sayHello, param) {
      console.log(sayHello() + param);
    }
    
    sayHelloWorld(sayHello, "World!") // "Hello World"
    

    function sayHelloWorld() {
      return () => {
        console.log("Hello World!");
      };
    }
    
    // First Approach
    sayHelloWorld()() // "Hello World!"
    
    // Second Approach
    const greeting = sayHelloWorld()
    greeting() // "Hello World!"
    

    const fibonacci = (n) => (n <= 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2));
    
    console.log(fibonacci(10)) // 55
    

    function sayHelloWorld() {
      console.log(`${this.firstWord} ${this.secondWord}`);
    }
    
    const obj = {
      firstWord: "Hello",
      secondWord: "World!",
    };
    
    sayHelloWorld.call(obj) // "Hello World!"
    

  • reduzir () exemplo
  • const arr = [1, 2, 3, 4];
    
    const initialValue = 0;
    const sumWithInitial = arr.reduce(
      (accumulator, currentValue) => accumulator + currentValue,
      initialValue
    );
    
    console.log(sumWithInitial) // 10
    

    const sayHelloWorld = () => console.log("Hello World")
    btn.addEventListener("onclick" , sayHelloWorld)