programandoai

Funções: dar nome a um passo

Calcular o desconto de um produto em três lugares diferentes do código, cada um com uma cópia quase idêntica da mesma conta, é um convite a erro. Uma função resolve isso de vez, dando nome ao passo inteiro.

Estudar esta lição interativa →

Se o cálculo "preço menos desconto" aparece copiado em três lugares diferentes do seu código, e um dia a regra do desconto mudar, você precisa lembrar de atualizar os três lugares, um por um, torcendo para não esquecer nenhum. Uma função resolve isso: você escreve a lógica uma única vez, dá um nome a ela, e reaproveita esse nome sempre que precisar daquele passo específico.

function calcularDesconto(preco, percentual) {
  return preco - (preco * percentual / 100);
}

console.log(calcularDesconto(200, 10));
console.log(calcularDesconto(50, 20));

A mesma função é chamada duas vezes, com valores diferentes.

A palavra function declara uma função; o nome (calcularDesconto) é como você vai chamá-la depois; o que vem entre parênteses são os parâmetros (os nomes que recebem os valores passados na chamada); e return devolve um valor para quem chamou a função, encerrando a execução dela naquele ponto. Repare que calcularDesconto(200, 10) não imprime nada sozinho: ele devolve um número, que o console.log(...), por fora, decide mostrar.

Pense numa função como uma máquina de suco: você coloca frutas (os parâmetros) numa entrada, aciona a máquina (chama a função) e recebe um copo de suco pronto pela saída (o return). A máquina não te entrega o suco na cara sozinha, sem você pedir; ela só devolve o resultado, e cabe a você decidir o que fazer com ele, inclusive guardá-lo numa variável para usar depois.

console.log mostra, return devolve

É comum, no começo, confundir os dois. console.log(...) só exibe algo no console, sem devolver nada útil para o resto do programa usar. return devolve um valor de dentro da função para quem a chamou, permitindo guardar esse valor numa variável, usá-lo numa conta, ou passá-lo para outra função. Uma função pode ter os dois, ou só um, dependendo do que ela precisa fazer.

Uma função sem return devolve undefined, silenciosamente

Se você esquecer o return, a função não quebra com erro nenhum: ela simplesmente devolve undefined ("nenhum valor definido") para quem a chamou, sem avisar. Isso costuma gerar um bug silencioso e confuso, tipo let total = calcularDesconto(200, 10) seguido de console.log(total) mostrando undefined em vez do número esperado. Sempre que uma função devolver undefined sem você esperar isso, a primeira coisa a checar é: essa função tem mesmo um return no caminho que rodou?

function dobrar(numero) {
  numero * 2;
}

console.log(dobrar(21));

Adicione o return que falta.

← Voltar ao índice do curso