Código de produção · unidade 26 de 27
Legibilidade e coesão
Código legível torna a decisão visível.
01 / 07Use as setas do teclado ou deslize
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
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.
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.
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.5Entrada / chamada
calcTotalPriceMessy([])Retorno esperado
004 / Teste
Prove que funciona
O teste chama sua função e compara o resultado real com o esperado.
Como utilizar este teste
- 01Implemente a função usando exatamente o nome e os parâmetros do enunciado.
- 02Salve sua implementação em
exercises.js, na mesma pasta do teste. - 03Abra o terminal nessa pasta e execute o comando abaixo.
- 04Se falhar, compare “esperado” com “recebido”; essa diferença mostra o caso que precisa ser corrigido.
node --test --test-name-pattern="calcTotalPriceMessy" exercises.test.jsComportamentos 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
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;
}