Objetos e erros · unidade 13 de 27

Classes e protótipos

O modelo vem antes da sintaxe.

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

Card 1 de 7: Classes e protótipos01 / 07

Leitura

Estado de instância, comportamento compartilhado, herança, static, getters, setters e mixins.

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
class Order {
  summary() {
    return this.items.length
  }
}

O que fica

  • Métodos vivem no prototype e são compartilhados.
  • Static pertence à classe; o método comum, à instância.
  • Mixins compõem capacidades sem forçar herança.

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

Prática guiada / unidade 13

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

createRectangleClass()

01 / Entenda

Enunciado

retorna uma classe Rectangle com constructor(width, height), area(), perimeter() e isSquare(). Já implementado como exemplo.

02 / Implemente

Sua tentativa

Comece pela assinatura e resolva sem olhar a resposta.

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

03 / Preveja

Entrada e saída

Use estes exemplos para entender o contrato antes de programar.

Entrada / chamada

createRectangleClass()

Retorno esperado

area, perímetro e isSquare

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="createRectangleClass" exercises.test.js

Comportamentos cobertos

  • area, perímetro e isSquare
Ver código completo do teste
test("createRectangleClass: area, perímetro e isSquare", () => {
  const Rectangle = createRectangleClass();
  const r = new Rectangle(3, 4);
  assert.equal(r.area(), 12);
  assert.equal(r.perimeter(), 14);
  assert.equal(r.isSquare(), false);
  assert.equal(new Rectangle(5, 5).isSquare(), true);
});

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 createRectangleClass() {
  return class Rectangle {
    constructor(width, height) {
      this.width = width;
      this.height = height;
    }

    area() {
      return this.width * this.height;
    }

    perimeter() {
      return 2 * (this.width + this.height);
    }

    isSquare() {
      return this.width === this.height;
    }
  };
}