Объектно-ориентированное программирование (ООП) — это мощная парадигма, которая позволяет разработчикам организовывать и структурировать свой код модульным и пригодным для повторного использования образом. Одной из важных концепций ООП является статика, которая является членами класса и является общим для всех экземпляров этого класса. В этой статье мы рассмотрим статику в контексте TypeScript, статически типизированной надстройки JavaScript, а также обсудим различные методы и варианты использования статики в TypeScript.
Что такое статика?
В TypeScript статика — это свойства или методы, принадлежащие самому классу, а не его экземплярам. Доступ к ним осуществляется по имени класса без необходимости создания экземпляра класса. Статические члены определяются с помощью ключевого слова static
в TypeScript.
Давайте рассмотрим несколько примеров использования статики в TypeScript.
- Статические свойства.
Статические свойства используются для хранения данных, которые являются общими для всех экземпляров класса. Вот пример:
class Circle {
static PI: number = 3.14;
radius: number;
constructor(radius: number) {
this.radius = radius;
}
getArea(): number {
return Circle.PI * this.radius * this.radius;
}
}
const circle1 = new Circle(5);
const circle2 = new Circle(10);
console.log(circle1.getArea()); // Output: 78.5
console.log(circle2.getArea()); // Output: 314
console.log(Circle.PI); // Output: 3.14
В приведенном выше примере свойство PI
объявлено как статическое и доступно без создания экземпляра класса Circle
.
- Статические методы.
Статические методы — это функции, которые можно вызывать в самом классе без необходимости использования экземпляра класса. Они полезны для служебных функций или операций, которые не относятся к конкретному экземпляру. Вот пример:
class MathUtils {
static sum(a: number, b: number): number {
return a + b;
}
static average(numbers: number[]): number {
const sum = numbers.reduce((acc, num) => acc + num, 0);
return sum / numbers.length;
}
}
console.log(MathUtils.sum(5, 10)); // Output: 15
const numbers = [1, 2, 3, 4, 5];
console.log(MathUtils.average(numbers)); // Output: 3
В приведенном выше примере методы sum
и average
объявлены как статические и могут вызываться непосредственно в классе MathUtils
.
- Шаблон Singleton:
Статику также можно использовать для реализации шаблона Singleton, в котором может существовать только один экземпляр класса. Вот пример:
class Database {
private static instance: Database | null = null;
private constructor() {
// Private constructor to prevent instantiation
}
static getInstance(): Database {
if (!Database.instance) {
Database.instance = new Database();
}
return Database.instance;
}
connect(): void {
// Database connection logic
}
}
const db1 = Database.getInstance();
const db2 = Database.getInstance();
console.log(db1 === db2); // Output: true
В приведенном выше примере метод getInstance
объявлен как статический и гарантирует создание только одного экземпляра класса Database
.
Статика в TypeScript позволяет определять свойства и методы, которые являются общими для всех экземпляров класса. Доступ к ним осуществляется по имени класса, и они полезны для таких сценариев, как общие данные, служебные функции и реализация шаблонов проектирования, таких как шаблон Singleton. Используя статику, разработчики могут писать более чистый и эффективный код.