TypeScript - Accessors
Здравствуйте, будущие программисты! Сегодня мы окунемся в fascинирующий мир accessors в TypeScript. Не волнуйтесь, если вы новички в программировании - я проведу вас через эту тему шаг за шагом, как я уже делал это для countless студентов на протяжении многих лет моего преподавания. Так что возьмите杯 ваш любимого напитка, и давайте начнем!
Что такое Accessors?
Before мы перейдем к конкретике accessors в TypeScript, давайте поймем, что такое accessors в принципе. Представьте, что у вас есть сундук с сокровищами (это наш объект), и вы хотите контролировать, как люди взаимодействуют с сокровищами внутри (свойства объекта). Accessors - это как магические ключи, которые позволяют вам получать или устанавливать эти сокровища контролируемым образом.
В TypeScript у нас есть два типа accessors:
- Getters: Они помогают нам получить значение свойства.
- Setters: Они позволяют нам устанавливать значение свойства.
Теперь давайте рассмотрим каждый из них подробнее.
Getters в TypeScript
Что такое Getter?
Getter - это особый вид метода, который позволяет вам доступа к свойству объекта. Это как иметь личного помощника, который fetches информацию для вас.
Как определить Getter
Давайте рассмотрим пример:
class Person {
private _name: string;
constructor(name: string) {
this._name = name;
}
get name(): string {
console.log("Получение имени");
return this._name;
}
}
let person = new Person("Алиса");
console.log(person.name); // Output: Получение имени \n Алиса
В этом примере:
- У нас есть класс
Person
с частным свойством_name
. - Мы определяем getter под названием
name
с использованием ключевого словаget
. - Когда мы доступа
person.name
, это вызывает наш метод getter.
Why Use Getters?
- вычисленные свойства: Getters могут возвращать вычисленные значения.
class Circle {
private _radius: number;
constructor(radius: number) {
this._radius = radius;
}
get area(): number {
return Math.PI * this._radius ** 2;
}
}
let circle = new Circle(5);
console.log(circle.area); // Output: 78.53981633974483
- ленивая загрузка: Getters могут помочь с производительностью, загружая данные только когда это необходимо.
class DataFetcher {
private _data: string | null = null;
get data(): string {
if (this._data === null) {
console.log("Загрузка данных...");
this._data = "Some expensive data";
}
return this._data;
}
}
let fetcher = new DataFetcher();
console.log(fetcher.data); // Output: Загрузка данных... \n Some expensive data
console.log(fetcher.data); // Output: Some expensive data (нет загрузки на этот раз)
Setters в TypeScript
Что такое Setter?
Setter - это как counterpart к getter. Это метод, который устанавливает значение свойства, часто с дополнительной логикой.
Как определить Setter
Вот базовый пример:
class Temperature {
private _celsius: number = 0;
set celsius(value: number) {
if (value < -273.15) {
throw new Error("Temperature below absolute zero is not possible");
}
this._celsius = value;
}
get celsius(): number {
return this._celsius;
}
}
let temp = new Temperature();
temp.celsius = 25; // Это вызывает сеттер
console.log(temp.celsius); // Output: 25
// temp.celsius = -300; // Это бы抛出一个 ошибку
В этом примере:
- У нас есть класс
Temperature
с частным_celsius
свойством. - Мы определяем setter для
celsius
, который проверяет, является ли значение допустимым перед его установкой.
Why Use Setters?
-
Проверка данных: Setters могут обеспечить, чтобы только допустимые значения были присвоены свойствам.
-
П побочные эффекты: Setters могут инициировать другие действия при изменении свойства.
class User {
private _name: string = "";
private _lastUpdated: Date = new Date();
set name(value: string) {
this._name = value;
this._lastUpdated = new Date();
}
get name(): string {
return this._name;
}
get lastUpdated(): Date {
return this._lastUpdated;
}
}
let user = new User();
user.name = "Боб";
console.log(user.name); // Output: Боб
console.log(user.lastUpdated); // Output: Текущая дата и время
Таблица методов Accessor
Вот краткое изложение методов accessor, которые мы рассмотрели:
Тип Accessor | Ключевое слово | Цель | Пример |
---|---|---|---|
Getter | get |
Получение значения свойства | get name(): string { return this._name; } |
Setter | set |
Установка значения свойства | set name(value: string) { this._name = value; } |
Заключение
Accessors в TypeScript предоставляют мощный способ управления доступом и изменением свойств объектов. Они позволяют добавлять логику, проверку и вычисленные свойства в ваши классы, делая ваш код более robust и maintainable.
Помните, как и при обучении любому новому навыку, овладение accessorами требует практики. Не отчаивайтесь, если это не сработает сразу - продолжайте программировать, продолжайте экспериментировать, и скоро вы будете использовать getters и setters как профессионál!
Как я всегда говорю своим студентам, программирование похоже на изучение нового языка. Сначала это может показаться запутанным, но с терпением и практикой вы скоро будете "говорить" на TypeScript свободно. Счастливого кодирования и не забывайте получать удовольствие на этом пути!
Credits: Image by storyset