Objetos e erros · unidade 13 de 27
Classes e protótipos
O modelo vem antes da sintaxe.
01 / 07Use as setas do teclado ou deslize
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
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.
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.
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 isSquare04 / 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="createRectangleClass" exercises.test.jsComportamentos 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
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;
}
};
}