Aprendendo Javascript essentials em 5 minutos

Introdução

Quando o assunto é Javascript muito se fala sobre conceitos mais robustos e complexos, porém alguns conceitos essenciais para a sua evolução como desenvolvedor web são deixados de lado. Por isso, hoje abordaremos um dos principais conceitos básicos de Javascript: closures, currying e hoisting.

Você já desvendou o básico do javascript neste tutorial super importante, então vamos seguir com novos conceitos.

Índice desta publicação

Closures, o poder da junção de funções

Antes de abordarmos mais a fundo o conceito e de fato ver os closures funcionando, vale lembrar que muito provavelmente você já tenha os visto em diversos códigos na web, pois eles são fundamentais para a criação de um código robusto e modular em Javascript. 

Tais códigos são criados porque os closures permitem que você acesse variáveis que estão fora do escopo da função na qual você está escrevendo. Isso permite com que nós, desenvolvedores, possamos criar diversas variáveis e funções dentro de um contexto maior. 

Ainda ficou um pouco confuso, não é? Então bora dar uma olhada na prática. 

const myName = 'Livia'

function printName() {
    console.log(myName)
}

printName();

Currying, transformando funções

O conceito de currying refere-se à capacidade de converter uma função que normalmente aceita vários argumentos em uma série de funções aninhadas.

Em termos simples, em vez de uma função receber todos os seus argumentos simultaneamente, ela recebe um argumento de cada vez, retornando uma nova função a cada passo.

Esse processo se repete até que todos os argumentos tenham sido processados. Em outras palavras, o currying permite decompor uma função com múltiplos argumentos em uma sequência mais gerenciável de funções de um único argumento.

Hoisting

Hoisting é um comportamento do JavaScript no qual as declarações de funções e variáveis são movidas para o topo de seu escopo durante a fase de compilação.

Embora isso possa parecer confuso à primeira vista, basicamente isso irá permitir que os desenvolvedores usem funções e variáveis antes de serem declaradas no código. Vamos acompanhar um pouco mais sobre isso código abaixo:


const sumConst = (a, b) => a + b 

console.log(`sumFunc(1, 2) => ${sumFunc(1, 2)}`)
console.log(`sumFunc(3, 4) => ${sumFunc(3, 4)}`)

function sumFunc(a,b) {
    return a + b
}

Acima, temos uma função de soma, e estamos utilizando o console.log() para ativar essa função. Pode-se perceber que, mesmo que a função sumFunc esteja descrita abaixo do console.log, o seu código ainda vai funcionar normalmente. Isso ocorre porque o hoisting lê primeiro a função antes de executar o código em si.

É importante ressaltar que o hoisting não vai, de fato, mover seu código. O que acontece, na verdade, é que ele lê o seu código e entende que as funções precisam ser acessadas antes de rodar o código.

Conclusão:

Parabéns! Você embarcou em uma breve jornada para desbloquear o potencial do JavaScript explorando closures, currying e hoisting.

Esses conceitos podem parecer muito complexos no início, mas com um pouco de prática, você verá que eles serão seus aliados na criação de um código modular e expressivo.

Conforme você se aventura ainda mais no mundo dev, lembre-se que a prática será sempre sua maior aliada, por isso é sempre importante desbravar novos códigos, até a próxima e happy coding!