TypeScript - Accessors

Здравствуйте, будущие программисты! Сегодня мы окунемся в fascинирующий мир accessors в TypeScript. Не волнуйтесь, если вы новички в программировании - я проведу вас через эту тему шаг за шагом, как я уже делал это для countless студентов на протяжении многих лет моего преподавания. Так что возьмите杯 ваш любимого напитка, и давайте начнем!

TypeScript - Accessors

Что такое Accessors?

Before мы перейдем к конкретике accessors в TypeScript, давайте поймем, что такое accessors в принципе. Представьте, что у вас есть сундук с сокровищами (это наш объект), и вы хотите контролировать, как люди взаимодействуют с сокровищами внутри (свойства объекта). Accessors - это как магические ключи, которые позволяют вам получать или устанавливать эти сокровища контролируемым образом.

В TypeScript у нас есть два типа accessors:

  1. Getters: Они помогают нам получить значение свойства.
  2. 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?

  1. вычисленные свойства: 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
  1. ленивая загрузка: 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?

  1. Проверка данных: Setters могут обеспечить, чтобы только допустимые значения были присвоены свойствам.

  2. П побочные эффекты: 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