5  Funções

Funções são blocos de código reutilizáveis.
Elas recebem dados de entrada, executam uma tarefa e podem devolver um resultado.

5.1 Por que funções são importantes?

  1. Evitam repetição de código.
  2. Organizam melhor o programa.
  3. Facilitam testes e manutenção.
  4. Permitem dividir problemas grandes em partes menores.

5.2 Declaração de função

function saudacao(nome) {
  return `Olá, ${nome}!`;
}

console.log(saudacao("Marina"));

5.3 Parâmetros e retorno

function media(n1, n2, n3) {
  return (n1 + n2 + n3) / 3;
}

const resultado = media(7, 8, 9);
console.log(resultado);

5.3.1 Exemplo do cotidiano estudantil

function mediaPresenca(aula1, aula2, aula3, aula4) {
  return (aula1 + aula2 + aula3 + aula4) / 4;
}

const presenca = mediaPresenca(100, 100, 75, 100);
console.log(`Média de presença: ${presenca}%`);

5.4 Parâmetros com valor padrão

function calcularIngresso(valor, taxaServico = 5) {
  return valor + taxaServico;
}

console.log(calcularIngresso(30));    // 35
console.log(calcularIngresso(30, 8)); // 38

5.5 Função anônima em variável

const dobro = function (n) {
  return n * 2;
};

console.log(dobro(9));

5.6 Arrow functions

const quadrado = (n) => n * n;
console.log(quadrado(6));

Exemplo com turismo:

const calcularGastoPasseio = (transporte, alimentacao, ingresso) =>
  transporte + alimentacao + ingresso;

const gastoTotal = calcularGastoPasseio(80, 55, 30);
console.log(`Gasto total no passeio: R$ ${gastoTotal}`);

5.7 Escopo

  • variáveis globais: acessíveis fora de funções;
  • variáveis locais: só existem dentro da função.
let curso = "Informática";

function mostrarCurso() {
  let modulo = 2;
  console.log(curso);
  console.log(modulo);
}

mostrarCurso();

5.8 Funções puras e efeitos colaterais

Função pura: para a mesma entrada, sempre devolve a mesma saída e não altera estado externo.

function somar(a, b) {
  return a + b;
}

Função com efeito colateral:

let contador = 0;

function incrementarContador() {
  contador++;
}

5.9 Função que calcula x função que exibe

function calcularDesconto(valorCompra, porcentagem) {
  return valorCompra - (valorCompra * porcentagem) / 100;
}

function mostrarPrecoFinal(valorOriginal, desconto) {
  const precoFinal = calcularDesconto(valorOriginal, desconto);
  console.log(`De R$ ${valorOriginal} por R$ ${precoFinal}`);
}

mostrarPrecoFinal(120, 10);

5.10 Callback (função passada para outra função)

function processarAluno(nome, callback) {
  const mensagem = `Aluno: ${nome}`;
  callback(mensagem);
}

processarAluno("Bruna", (texto) => {
  console.log(texto.toUpperCase());
});

5.11 Exemplo integrado: roteiro de viagem

function somarDespesas(listaDeValores) {
  let total = 0;

  for (const valor of listaDeValores) {
    total += valor;
  }

  return total;
}

function calcularCustoPorPessoa(total, quantidadePessoas) {
  return total / quantidadePessoas;
}

const despesas = [90, 60, 40, 30];
const totalViagem = somarDespesas(despesas);
const custoIndividual = calcularCustoPorPessoa(totalViagem, 4);

console.log(`Total da viagem: R$ ${totalViagem}`);
console.log(`Custo por pessoa: R$ ${custoIndividual}`);

5.12 Boas práticas para funções

  1. Use nomes claros (calcularMedia, buscarAluno).
  2. Faça funções curtas e com um objetivo.
  3. Prefira return para reaproveitamento.
  4. Evite misturar cálculo com interface.
  5. Teste cenários comuns e cenários de erro.

5.13 Exercícios

  1. Crie tempoCaminhada(distanciaKm, velocidadeKmH).
  2. Crie converterRealParaGuarani(real, cotacao).
  3. Crie custoViagemBonito(transporte, hospedagem, alimentacao, passeios).
  4. Crie mediaNotas(notas) para um array de notas.
  5. Desafio: situacaoAluno(media, frequencia) com regras definidas por você.