2
respostas

[Dúvida] É uma boa prática chamar funções antes da definição em JS?

Nesta aula, foi apresentada a lógica das funções com retorno, com o código final ficando da seguinte maneira:

let numeroSecreto = gerarNumeroAleatorio();

function gerarNumeroAleatorio() {
    return parseInt(Math.random() * 10 + 1);
}

Sei que o JavaScript, em caso das funções, não lê linha por linha - podendo declarar uma determinada função mesmo após chamar ela. No entanto, não seria uma boa prática declarar uma função antes de chamá-la? O código não seria mais legível se seguisse essa estrutura?

function gerarNumeroAleatorio() {
    return parseInt(Math.random() * 10 + 1);
}

let numeroSecreto = gerarNumeroAleatorio();
2 respostas

Fala mano, boa dúvida!

Esse código funciona mesmo chamando a função antes de declarar por causa de um négocio chamado hoisting. O JavaScript “sobe” as declarações de função pro topo antes de rodar o código.

Só um detalhe: o JavaScript lê linha por linha sim, mas antes disso ele faz uma etapa de preparação onde já sabe que a função existe. Por isso esse exemplo funciona:

let numeroSecreto = gerarNumeroAleatorio();

function gerarNumeroAleatorio() {
    return parseInt(Math.random() * 10 + 1);
}

Mesmo assim, é uma boa prática declarar a função antes de chamar, como você sugeriu. Isso deixa o código mais legível, porque quem tá lendo entende logo de cara o que aquela função faz antes dela ser usada. Também torna a estrutura do código mais lógica, seguindo uma ordem natural: primeiro a definição, depois o uso.

Se você quiser ver mais sobre o hoisting: https://developer.mozilla.org/pt-BR/docs/Glossary/Hoisting

Esse site deixa bem explicado como funciona!

Isso é mais questão de gosto do que qualquer outra coisa, não existe consenso a respeito disso, e qualquer pessoa que te disser que é ou não boa prática vai estar te respondendo de acordo com a opinião dela.

Declarar a função antes é uma prática utilizada muito por quem tem costume de utilizar outras linguagens de programação que não possuem essa particularidade do JavaScript de permitir o uso da função antes de declarar. Declarar depois é uma prática que segue a seguinte lógica: o que é feito com a função é mais importante que a função em si, logo, ela deve vir primeiro. Ambas as práticas tem a vantagem de que o código da função está sempre perto de onde ela foi utilizada pela primeira vez, mas tem a desvantagem de que se a função for utilizada diversas vezes ao longo do código, ela pode se perder no meio de tudo e ficar difícil de localizar.

A minha preferência é declarar as funções ao final do código. Dessa forma, o fluxo do código fica organizado e simples de entender, sem pausas para declarar toda vez que uma função é utilizada, e se eu quiser procurar a função, sei que ela vai estar lá no fim.

Também é bom salientar que, em projetos reais, em geral, as funções são declaradas em arquivos diferentes do código que as utilizam, para que possam ser reutilizadas tantas vezes quanto forem necessárias.