edubun
Português

Projeto: calculadora de gorjeta e FizzBuzz

Uma conta de 84 com 20 por cento de gorjeta dividida por quatro dá 25.20 para cada um. Esta unidade constrói essa calculadora, e depois o clássico exercício FizzBuzz, com as peças das unidades anteriores.

De um problema a um programa

Escrever um programa começa antes de qualquer código. Primeiro diga em palavras simples o que entra, o que sai e o que acontece no meio. Numa calculadora de gorjeta, as entradas são a conta, a taxa da gorjeta e o número de pessoas. As saídas são a gorjeta, o total e a parte de cada pessoa. No meio há três cálculos pequenos. Pôr isso por escrito transforma uma tarefa vaga em várias tarefas pequenas, e você já sabe fazer cada uma delas.

Passo 1: o cálculo

const bill = 84;
const rate = 0.2;
const people = 4;

const tip = bill * rate;          // vale 16.8
const total = bill + tip;         // vale 100.8
const each = total / people;      // vale 25.2

Confira os números à mão antes de confiar no código: 20 por cento de 84 é 16.8, o total é 100.8 e 100.8 dividido por 4 dá 25.2. Testar com valores cuja resposta você já sabe é como se pegam erros como uma taxa digitada como 20 em vez de 0.2, que deixaria a gorjeta em 1680.

Passo 2: mostrando dinheiro direito

Dinheiro costuma aparecer com duas casas decimais, e mostrar 25.2 parece inacabado. O método de número toFixed(2) devolve uma string com exatamente duas casas decimais, então each.toFixed(2) dá "25.20". Lembre da unidade de números: decimais podem trazer pequenos erros de arredondamento binário; o toFixed também os esconde, o que é mais um motivo para usá-lo na exibição. Mantenha os números como números enquanto calcula e chame toFixed só no fim, ao mostrar.

Passo 3: embrulhe tudo numa função

Um cálculo que você pode rodar de novo com outros números deve ficar numa função. A função abaixo devolve um objeto, então uma única chamada pode entregar os três resultados com nomes claros. Os parâmetros padrão deixam o caso mais comum curto de escrever.

function splitBill(bill, rate = 0.15, people = 1) {
  const tip = bill * rate;
  const total = bill + tip;
  return { tip, total, each: total / people };
}

const r = splitBill(84, 0.2, 4);
console.log(`Tip: ${r.tip.toFixed(2)}`);       // mostra Tip: 16.80
console.log(`Each: ${r.each.toFixed(2)}`);     // mostra Each: 25.20

A linha return { tip, total, each: total / people }; usa uma forma curta: escrever tip sozinho dentro de um objeto quer dizer tip: tip, uma propriedade cuja chave e cuja variável têm o mesmo nome.

FizzBuzz

FizzBuzz é uma brincadeira de contar que virou exercício de programação. Conte de 1 a 15. Para múltiplos de 3 diga Fizz, para múltiplos de 5 diga Buzz, para múltiplos dos dois diga FizzBuzz e, nos outros casos, diga o número. Ele usa um laço, o operador de resto e uma cadeia de if, e tem uma armadilha. O número 15 é múltiplo de 3, então, se você testar o 3 primeiro, 15 mostra Fizz e nunca chega ao ramo FizzBuzz. A solução é a regra da unidade do if: ponha a condição mais estreita primeiro.

for (let i = 1; i <= 15; i++) {
  if (i % 15 === 0) {          // múltiplo dos dois
    console.log("FizzBuzz");
  } else if (i % 3 === 0) {
    console.log("Fizz");
  } else if (i % 5 === 0) {
    console.log("Buzz");
  } else {
    console.log(i);
  }
}

Testar i % 15 === 0 funciona porque um número divisível por 3 e por 5 é divisível por 15. Escrever i % 3 === 0 && i % 5 === 0 diz a mesma coisa de forma mais direta, e qualquer um dos dois serve. Quando a sua versão rodar, compare a saída linha por linha com a lista esperada: 1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz.

O que construir em seguida

Agora você tem o núcleo da linguagem: valores, variáveis, operadores, decisões, laços, arrays, funções e objetos. Quase todo programa é construído com essas peças. Bons próximos passos são reescrever o FizzBuzz como uma função que recebe o limite superior, fazer a calculadora de gorjeta arredondar a parte de cada um para cima, em unidades inteiras da moeda, com Math.ceil, ou guardar uma lista de despesas num array de objetos e mostrar o total por categoria. O Guia de JavaScript do MDN, que este curso segue, continua com temas como coleções, classes e trabalho com páginas web.

entradaO que um programa recebe: conta, taxa, pessoas
saídaO que um programa produz: gorjeta, total, parte de cada um
toFixed(2)Uma string com exatamente duas casas decimais: "25.20"
caso de testeUma entrada cuja saída correta você já sabe
FizzBuzzFizz para os múltiplos de 3, Buzz para os de 5, FizzBuzz para os dos dois
propriedade abreviada{ tip } quer dizer { tip: tip }
  1. O que isto mostra?
    const bill = 50;
    const tip = bill * 0.1;
    console.log(bill + tip);
  2. O que isto mostra?
    console.log((25.2).toFixed(2));
  3. O que isto mostra?
    console.log(typeof (3).toFixed(2));
  4. No FizzBuzz, o que aparece para 9?
    • Fizz
    • Buzz
    • FizzBuzz
    • 9
  5. No FizzBuzz, o que aparece para 10?
    • Fizz
    • Buzz
    • FizzBuzz
    • 10
  6. No FizzBuzz, o que aparece para 30?
    • Fizz
    • Buzz
    • FizzBuzz
    • 30
  7. O que isto mostra?
    const i = 15;
    if (i % 3 === 0) {
      console.log("Fizz");
    } else if (i % 15 === 0) {
      console.log("FizzBuzz");
    }
  8. Quantos números de 1 a 15 aparecem como Fizz (não FizzBuzz)?
  9. O que isto mostra?
    function split(total, people = 2) {
      return total / people;
    }
    console.log(split(30));
  10. O que isto mostra?
    const tip = 4;
    const total = 24;
    const r = { tip, total };
    console.log(r.total - r.tip);
Pontos-chave
  • Dê nome às entradas e às saídas primeiro, depois aos passos entre elas.
  • Confira com valores cujas respostas você sabe.
  • Calcule com números; use toFixed(2) só ao mostrar.
  • Embrulhe o trabalho reaproveitável numa função; devolva um objeto quando houver vários resultados.
  • FizzBuzz: teste o caso mais estreito (múltiplos de 15) primeiro.
Fontes deste curso (2)
  • MDN Web Docs, JavaScript Guide (developer.mozilla.org/en-US/docs/Web/JavaScript/Guide, chapters Introduction, Grammar and types, Control flow, Loops and iteration, Functions, Expressions and operators, Numbers and strings, Indexed collections, Working with objects; checked 2026-10-17)
  • Ecma International, ECMA-262 ECMAScript 2026 Language Specification, 17th edition, June 2026 (tc39.es/ecma262 and ecma-international.org/publications-and-standards/standards/ecma-262, checked 2026-10-17)

Data de verificação: 2026-10-17