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.