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ê.