Дмитрий Нечаев
Методы доступа get и set в TypeScript
Методы доступа get
и set
предоставляют способ управления доступом к свойствам объекта в TypeScript. Они позволяют определить логику получения и установки значения свойства, что дает возможность инкапсулировать и контролировать доступ к данным. Эта концепция была предложена в стандарте JavaScript ECMAScript 5 и получила широкое применение благодаря своей гибкости и удобству.
Определение методов доступа
Методы доступа определяются с использованием ключевых слов get
и set
. Get
-метод используется для получения значения свойства, а set
-метод — для установки значения свойства.
Пример определения методов доступа
class Person {
private _name: string;
constructor(name: string) {
this._name = name;
}
// get-метод для получения значения свойства name
public get name(): string {
return this._name;
}
// set-метод для установки значения свойства name
public set name(newName: string) {
if (newName.length > 0) {
this._name = newName;
} else {
console.log("Имя не может быть пустым.");
}
}
}
let person = new Person("Alice");
console.log(person.name); // "Alice"
person.name = "Bob";
console.log(person.name); // "Bob"
person.name = ""; // "Имя не может быть пустым."
В этом примере класс Person
содержит приватное поле _name
и методы доступа для управления этим полем. Get
-метод возвращает значение _name
, а set
-метод проверяет новое значение перед его установкой.
Инкапсуляция с помощью методов доступа
Использование методов доступа позволяет инкапсулировать внутреннее состояние объекта и предоставлять контролируемый интерфейс для взаимодействия с ним.
Пример инкапсуляции с валидацией
class Employee {
private _salary: number;
constructor(salary: number) {
this._salary = salary;
}
public get salary(): number {
return this._salary;
}
public set salary(newSalary: number) {
if (newSalary > 0) {
this._salary = newSalary;
} else {
console.log("Зарплата должна быть положительной.");
}
}
}
let employee = new Employee(50000);
console.log(employee.salary); // 50000
employee.salary = 55000;
console.log(employee.salary); // 55000
employee.salary = -1000; // "Зарплата должна быть положительной."
console.log(employee.salary); // 55000
В этом примере класс Employee
использует методы доступа для управления значением зарплаты и проверки его корректности перед установкой.
Методы доступа и наследование
Методы доступа также могут быть использованы в наследуемых классах. Это позволяет создавать более гибкие и расширяемые системы.
Пример использования методов доступа в наследуемых классах
class Rectangle {
private _width: number;
private _height: number;
constructor(width: number, height: number) {
this._width = width;
this._height = height;
}
public get width(): number {
return this._width;
}
public set width(newWidth: number) {
if (newWidth > 0) {
this._width = newWidth;
} else {
console.log("Ширина должна быть положительной.");
}
}
public get height(): number {
return this._height;
}
public set height(newHeight: number) {
if (newHeight > 0) {
this._height = newHeight;
} else {
console.log("Высота должна быть положительной.");
}
}
public get area(): number {
return this._width * this._height;
}
}
class Square extends Rectangle {
constructor(size: number) {
super(size, size);
}
public set size(newSize: number) {
if (newSize > 0) {
this.width = newSize;
this.height = newSize;
} else {
console.log("Размер должен быть положительным.");
}
}
public get size(): number {
return this.width;
}
}
let square = new Square(10);
console.log(square.size); // 10
console.log(square.area); // 100
square.size = 15;
console.log(square.size); // 15
console.log(square.area); // 225
square.size = -5; // "Размер должен быть положительным."
В этом примере класс Square
наследует класс Rectangle
и использует методы доступа для управления размером квадрата.
Преимущества использования методов доступа
- Инкапсуляция: Методы доступа позволяют скрыть внутреннее состояние объекта и предоставлять контролируемый доступ к данным.
- Валидация данных: С помощью
set
методов можно проверять корректность данных перед их установкой. - Гибкость: Методы доступа могут быть использованы для создания вычисляемых свойств, которые изменяются динамически.
- Совместимость с наследованием: Методы доступа работают с наследованием, что позволяет создавать расширяемые и поддерживаемые системы.
Заключение
Методы доступа get
и set
в TypeScript предоставляют мощный инструмент для управления доступом к свойствам объекта. Они помогают инкапсулировать данные, обеспечивать их валидацию и создавать гибкие и расширяемые системы. Использование методов доступа делает код более читаемым, безопасным и легким в поддержке, что особенно важно в больших и сложных проектах.
Карта развития разработчика
Получите полную карту развития разработчика по всем направлениям: frontend, backend, devops, mobile