Funções: o básico
Esta aula introduz o conceito de funções em JavaScript, abordando as diferenças entre declaração e expressão, como definir parâmetros e retornar valores, e a importância do reuso de código. Com exemplos práticos, você aprenderá a criar funções reutilizáveis e bem estruturadas.
Funções são blocos de código que podem ser definidos e executados sob demanda. Elas são fundamentais para organizar, reutilizar e abstrair lógica em JavaScript. Nesta aula, você compreenderá as duas principais formas de criar funções — declaração e expressão —, como passar dados através de parâmetros e retornar resultados, e por que o reuso é uma prática essencial.
Dominar funções é o primeiro passo para escrever código modular e eficiente. Vamos explorar cada conceito com exemplos claros e progressivos.
Declaração vs expressão
Em JavaScript, uma função pode ser criada de duas maneiras principais: declaração de função (function declaration) e expressão de função (function expression). Embora ambas produzam funções, há diferenças importantes, especialmente em relação ao hoisting.
Declaração de função: usa a palavra-chave function seguida do nome da função. Ela é içada (hoisted), ou seja, pode ser chamada antes de sua definição no código.
// Declaração de função
function saudacao(nome) {
return "Olá, " + nome + "!";
}
console.log(saudacao("Maria")); // "Olá, Maria!"Expressão de função: a função é atribuída a uma variável. Nesse caso, a função não é içada — você só pode chamá-la após a atribuição.
// Expressão de função
const saudacao = function(nome) {
return "Olá, " + nome + "!";
};
console.log(saudacao("João")); // "Olá, João!"A escolha entre uma e outra depende do contexto: declarações são mais legíveis e flexíveis quanto à ordem, enquanto expressões são úteis para funções anônimas, callbacks ou quando você precisa atribuir funções condicionalmente.
Parâmetros e retorno
Funções podem receber dados de entrada chamados parâmetros e podem devolver um valor usando a palavra-chave return. Se nenhum return for especificado, a função retorna undefined.
function somar(a, b) {
return a + b;
}
const resultado = somar(5, 3);
console.log(resultado); // 8Parâmetros são variáveis locais dentro da função. Você pode definir quantos parâmetros desejar. Caso um argumento não seja passado, o parâmetro assume o valor undefined. É possível definir valores padrão (ES6):
function multiplicar(a, b = 1) {
return a * b;
}
console.log(multiplicar(5)); // 5 (b assume 1)
console.log(multiplicar(5, 2)); // 10O return encerra a execução da função imediatamente. Qualquer código após o return é ignorado. Você também pode retornar objetos, arrays ou até outras funções.
Reuso
Uma das maiores vantagens das funções é a capacidade de reutilizar código sem repeti-lo. Em vez de escrever a mesma lógica várias vezes, você define a função uma vez e a chama sempre que necessário.
// Sem reuso
let preco1 = 100;
let desconto1 = preco1 * 0.1;
let total1 = preco1 - desconto1;
let preco2 = 200;
let desconto2 = preco2 * 0.1;
let total2 = preco2 - desconto2;
// Com reuso
function calcularTotal(preco, taxaDesconto = 0.1) {
const desconto = preco * taxaDesconto;
return preco - desconto;
}
console.log(calcularTotal(100)); // 90
console.log(calcularTotal(200)); // 180O reuso também facilita a manutenção: se a lógica de desconto mudar, você altera apenas a função, e todos os locais que a chamam são atualizados automaticamente. Além disso, funções bem nomeadas tornam o código mais legível e autoexplicativo.
Boas práticas
- Use nomes descritivos para funções (verbos que indicam ação, como
calcularTotal,obterUsuario). - Mantenha funções pequenas e com uma única responsabilidade.
- Evite modificar variáveis globais dentro de funções; prefira retornar valores.
- Documente parâmetros e retorno quando a função não for óbvia.
Referências
- MDN: Funções (guia)
- MDN: Declaração de função
- MDN: Expressão de função
- MDN: Parâmetros padrão
- MDN: return
Exercícios
- Crie uma função chamada
ehParque recebe um número e retornatruese for par,falsecaso contrário. Teste com os valores 4 e 7. - Escreva uma função
maiorque receba dois números e retorne o maior deles. Se forem iguais, retorne qualquer um. - Crie uma expressão de função atribuída a uma variável
dobrarque recebe um número e retorna o dobro. Teste com 9. - Escreva uma função
saudacaoPersonalizadaque recebe um nome e um período ("manhã", "tarde" ou "noite") e retorne uma saudação como "Bom dia, João!". Use parâmetros com valor padrão para o período ser "dia" caso não informado. - Crie uma função
contagemRegressivaque recebe um númerone exibe no console os números denaté 0 (incluindo 0), um por linha. A função não precisa retornar nada.
function ehPar(numero) {
return numero % 2 === 0;
}
console.log(ehPar(4)); // true
console.log(ehPar(7)); // falsefunction maior(a, b) {
return a > b ? a : b;
}
console.log(maior(10, 20)); // 20
console.log(maior(5, 5)); // 5const dobrar = function(numero) {
return numero * 2;
};
console.log(dobrar(9)); // 18function saudacaoPersonalizada(nome, periodo = "dia") {
let saudacao;
if (periodo === "manhã") {
saudacao = "Bom dia";
} else if (periodo === "tarde") {
saudacao = "Boa tarde";
} else if (periodo === "noite") {
saudacao = "Boa noite";
} else {
saudacao = "Olá";
}
return saudacao + ", " + nome + "!";
}
console.log(saudacaoPersonalizada("João", "manhã")); // "Bom dia, João!"
console.log(saudacaoPersonalizada("Maria")); // "Olá, Maria!"function contagemRegressiva(n) {
for (let i = n; i >= 0; i--) {
console.log(i);
}
}
contagemRegressiva(5);
// Saída:
// 5
// 4
// 3
// 2
// 1
// 0