freeCodeCamp/curriculum/challenges/portuguese/02-javascript-algorithms-an.../es6/use-getters-and-setters-to-...

3.6 KiB

id title challengeType videoUrl localeTitle
587d7b8c367417b2b2512b54 Use getters and setters to Control Access to an Object 1 Use getters e setters para controlar o acesso a um objeto

Description

Você pode obter valores de um objeto e definir um valor de uma propriedade dentro de um objeto. Estes são chamados classicamente de getters e setters . As funções do Getter destinam-se a simplesmente retornar (obter) o valor da variável privada de um objeto ao usuário sem que o usuário acesse diretamente a variável privada. As funções de setter destinam-se a modificar (definir) o valor da variável privada de um objeto com base no valor passado para a função de setter. Essa alteração pode envolver cálculos ou mesmo sobrescrever completamente o valor anterior.
livro escolar {
construtor (autor) {
this._author = autor;
}
// getter
obter escritor () {
devolve this._author;
}
// setter
set writer (updatedAuthor) {
this._author = updatedAuthor;
}
}
const lol = novo livro ('anônimo');
console.log (lol.writer); // anônimo
lol.writer = 'wut';
console.log (lol.writer); // wut
Observe a sintaxe que estamos usando para invocar o getter e setter - como se eles não fossem mesmo funções. Getters e setters são importantes porque ocultam detalhes internos de implementação.

Instructions

Use a palavra-chave class para criar uma classe Thermostat. O construtor aceita a temperatura Fahrenheit. Agora crie getter e setter na classe, para obter a temperatura na escala Celsius. Lembre-se que C = 5/9 * (F - 32) e F = C * 9.0 / 5 + 32 , onde F é o valor da temperatura na escala Fahrenheit, e C é o valor da mesma temperatura na escala Celsius. Para implementar isso, você estaria acompanhando a temperatura dentro da classe em uma escala - Fahrenheit ou Celsius. Este é o poder de getter ou setter - você está criando uma API para outro usuário, que obteria o resultado correto, não importando qual deles você rastreie. Em outras palavras, você está abstraindo os detalhes da implementação do consumidor.

Tests

tests:
  - text: <code>Thermostat</code> deve ser uma <code>class</code> com um método <code>constructor</code> definido.
    testString: 'assert(typeof Thermostat === "function" && typeof Thermostat.constructor === "function","<code>Thermostat</code> should be a <code>class</code> with a defined <code>constructor</code> method.");'
  - text: palavra-chave <code>class</code> foi usada.
    testString: 'getUserInput => assert(getUserInput("index").match(/class/g),"<code>class</code> keyword was used.");'
  - text: <code>Thermostat</code> pode ser instanciado.
    testString: 'assert(() => {const t = new Thermostat(32); return typeof t === "object" && t.temperature === 0;}, "<code>Thermostat</code> can be instantiated.");'

Challenge Seed

function makeClass() {
  "use strict";
  /* Alter code below this line */

  /* Alter code above this line */
  return Thermostat;
}
const Thermostat = makeClass();
const thermos = new Thermostat(76); // setting in Fahrenheit scale
let temp = thermos.temperature; // 24.44 in C
thermos.temperature = 26;
temp = thermos.temperature; // 26 in C

Solution

// solution required