8  Funções, Blocos, Procedimentos, Módulos e Parâmetros

Este capítulo organiza conceitos importantes para escrever código legível, reutilizável e escalável.

8.1 Blocos

Bloco é o trecho entre chaves {}. Ele delimita escopo.

let turma = "2A"

{
  let turma = "3A"
  console.log(`Dentro do bloco: ${turma}`)
}

console.log(`Fora do bloco: ${turma}`)

8.2 Procedimentos

Procedimento executa uma ação e normalmente não depende de retorno.

function mostrarCabecalho() {
  console.log("=== Sistema Acadêmico ===")
}

mostrarCabecalho()

Com parâmetro:

function saudarAluno(nome) {
  console.log(`Bem-vindo(a), ${nome}`)
}

saudarAluno("Marina")

8.3 Funções com retorno

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

console.log(calcularMedia(7, 8, 9))

8.4 Passagem de parâmetros

8.4.1 Primitivo: cópia por valor

let quantidade = 5

function alterarNumero(n) {
  n = 99
}

alterarNumero(quantidade)
console.log(quantidade) // 5

8.4.2 Objeto: referência compartilhada

const aluno = { nome: "Ana", nota: 8 }

function atualizarNota(dados) {
  dados.nota = 10
}

atualizarNota(aluno)
console.log(aluno.nota) // 10

8.4.3 Evitando mutação com spread

const tarefa = { titulo: "Estudar", concluida: false }

function concluirSemMutar(item) {
  return { ...item, concluida: true }
}

const tarefaConcluida = concluirSemMutar(tarefa)
console.log(tarefa)
console.log(tarefaConcluida)

8.5 Modularização

Quando o projeto cresce, separar por arquivos ajuda muito.

8.5.1 Export nomeado

matematica.js

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

main.js

import { somar } from "./matematica.js"

console.log(somar(5, 7))

8.5.2 Múltiplos exports

boletim.js

export function media(a, b) {
  return (a + b) / 2
}

export function aprovado(mediaFinal) {
  return mediaFinal >= 6
}

app.js

import { media, aprovado } from "./boletim.js"

const m = media(7, 5)
console.log(m)
console.log(aprovado(m))

8.5.3 Export default

mensagem.js

export default function gerarMensagem(nome) {
  return `Olá, ${nome}!`
}

principal.js

import gerarMensagem from "./mensagem.js"

console.log(gerarMensagem("Carlos"))

8.6 Estrutura sugerida para projetos pequenos

projeto/
  src/
    calculos.js
    validacoes.js
    app.js

8.7 Exemplo integrador

calculos.js

export function totalDespesas(lista) {
  return lista.reduce((acc, item) => acc + item, 0)
}

app.js

import { totalDespesas } from "./calculos.js"

const gastos = [45, 30, 20, 10]
console.log(`Total: R$ ${totalDespesas(gastos)}`)

8.8 Exercícios

  1. Crie um módulo conversoes.js com metro para centímetro.
  2. Crie um módulo boletim.js com funções de média e status.
  3. Crie um export default para formatar preço em reais.
  4. Desafio: monte um mini projeto com app.js, dados.js e calculos.js.