Código de produção · unidade 26 de 27

Legibilidade e coesão

Código legível torna a decisão visível.

9 min de leitura · 7 cards · 16 exercícios

Card 1 de 7: Legibilidade e coesão01 / 07

Leitura

Nomes de domínio, funções coesas, efeitos nas bordas, guard clauses e refatoração protegida por testes.

No backend, esse fundamento aparece quando o código transforma entrada em decisão. O detalhe de linguagem deixa de ser acadêmico no momento em que altera um payload, uma regra de negócio ou a forma como uma falha chega à camada seguinte.

A forma mais útil de estudar é ligar a sintaxe a um contrato observável: o que entra, o que pode mudar, qual resultado sai e qual erro deve continuar o fluxo. É esse raciocínio que os exemplos e exercícios desta unidade procuram treinar.

Código

exemplo.js
const validated = validateOrder(raw)
const priced = calculateTotal(validated)
const saved = await saveOrder(priced)
await notifyCustomer(saved)

O que fica

  • Nomes concretos reduzem tradução e carga mental.
  • Extraia funções por responsabilidade, não por tamanho.
  • Testes preservam comportamento enquanto a estrutura muda.

Prática guiada.Leia, rode, quebre e explique cada exercício.

Prática guiada / unidade 26

Um problema de cada vez.

Leia o contrato, escreva sua tentativa e confira os casos esperados. A resolução de referência permanece visível ao final de cada exercício.

Fundamentalexercício 01 / 16

calcTotalPriceMessy(items)

01 / Entenda

Enunciado

nomes de variável de uma letra (t, x, r) escondem o que a função faz. Extraia nomes claros e, se fizer sentido, um passo nomeado para o cálculo do imposto.

02 / Implemente

Sua tentativa

Comece pela assinatura e resolva sem olhar a resposta.

ponto de partida
function calcTotalPriceMessy(items) {
  // Escreva sua solução aqui.
}

03 / Preveja

Entrada e saída

Use estes exemplos para entender o contrato antes de programar.

Entrada / chamada

calcTotalPriceMessy(items)

Retorno esperado

27.5

Entrada / chamada

calcTotalPriceMessy([])

Retorno esperado

0

04 / Teste

Prove que funciona

O teste chama sua função e compara o resultado real com o esperado.

Como utilizar este teste

  1. 01Implemente a função usando exatamente o nome e os parâmetros do enunciado.
  2. 02Salve sua implementação em exercises.js, na mesma pasta do teste.
  3. 03Abra o terminal nessa pasta e execute o comando abaixo.
  4. 04Se falhar, compare “esperado” com “recebido”; essa diferença mostra o caso que precisa ser corrigido.
node --test --test-name-pattern="calcTotalPriceMessy" exercises.test.js

Comportamentos cobertos

  • soma preço*qtd e aplica 10% de imposto
  • lista vazia retorna 0
Ver código completo do teste
test("calcTotalPriceMessy: soma preço*qtd e aplica 10% de imposto", () => {
  const items = [
    { price: 10, qty: 2 },
    { price: 5, qty: 1 },
  ];
  assert.equal(calcTotalPriceMessy(items), 27.5);
});

test("calcTotalPriceMessy: lista vazia retorna 0", () => {
  assert.equal(calcTotalPriceMessy([]), 0);
});

Ainda travou?

Dicas graduais

Nível 1 — direção, sem código

Para calcTotalPriceMessy/sumArrayWeirdMessy: o que t, x, r, s, a representam de fato? Dê nomes que respondam essa pergunta sem precisar olhar o resto do código.

Nível 2 — pista mais direta

calcTotalPriceMessy: renomeie t → total, x → item, r → totalWithTax. Considere extrair applyTax(amount) como função pequena.

05 / Compare

Resolução

Esta área permanece livre em todos os exercícios. O código atual da unidade aparece abaixo para comparação com os testes e casos esperados.
código disponível
function calcTotalPriceMessy(items) {
  const subtotal = items.reduce(
    (total, item) => total + item.price * item.qty,
    0,
  );
  const totalWithTax = subtotal * 1.1;
  return Math.round(totalWithTax * 100) / 100;
}