TypeScript - Truy cập

Xin chào các bạn đang học lập trình! Hôm nay, chúng ta sẽ cùng khám phá thế giới kỳ diệu của các truy cập TypeScript. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - tôi sẽ hướng dẫn bạn từng bước qua chủ đề này, giống như tôi đã làm cho hàng trăm học sinh trong những năm dạy học của mình. Vậy, hãy lấy một ly đồ uống yêu thích của bạn, và chúng ta cùng bắt đầu!

TypeScript - Accessors

什么是 Accessors?

Trước khi chúng ta đi vào chi tiết về các truy cập TypeScript, hãy hiểu xem truy cập là gì nói chung. Hãy tưởng tượng bạn có một két bảo vệ (đó là đối tượng của chúng ta), và bạn muốn kiểm soát cách mọi người tương tác với các kho báu bên trong (các thuộc tính của đối tượng). Các truy cập giống như những chìa khóa ma thuật cho phép bạn lấy hoặc đặt các kho báu này một cách kiểm soát.

Trong TypeScript, chúng ta có hai loại truy cập:

  1. Getters: Giúp chúng ta lấy giá trị của một thuộc tính.
  2. Setters: Cho phép chúng ta đặt giá trị của một thuộc tính.

Bây giờ, hãy cùng khám phá từng loại này chi tiết.

Getters trong TypeScript

什么是 Getter?

Một getter là một phương thức đặc biệt cho phép bạn truy cập vào một thuộc tính của đối tượng. Nó giống như có một trợ lý cá nhân lấy thông tin cho bạn.

Làm thế nào để xác định một Getter

Hãy xem một ví dụ đơn giản:

class Person {
private _name: string;

constructor(name: string) {
this._name = name;
}

get name(): string {
console.log("Getting the name");
return this._name;
}
}

let person = new Person("Alice");
console.log(person.name); // Output: Getting the name \n Alice

Trong ví dụ này:

  • Chúng ta có một lớp Person với một thuộc tính riêng _name.
  • Chúng ta xác định một getter叫做 name sử dụng từ khóa get.
  • Khi chúng ta truy cập person.name, nó gọi phương thức getter của chúng ta.

Tại sao sử dụng Getters?

  1. Computed Properties: Getters có thể trả về các giá trị tính toán.
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. Lazy Loading: Getters có thể giúp cải thiện hiệu suất bằng cách tải dữ liệu chỉ khi cần thiết.
class DataFetcher {
private _data: string | null = null;

get data(): string {
if (this._data === null) {
console.log("Fetching data...");
this._data = "Some expensive data";
}
return this._data;
}
}

let fetcher = new DataFetcher();
console.log(fetcher.data); // Output: Fetching data... \n Some expensive data
console.log(fetcher.data); // Output: Some expensive data (no fetching this time)

Setters trong TypeScript

什么是 Setter?

Một setter là như một counterpart của getter. Nó là một phương thức đặt giá trị của một thuộc tính, thường với một số logic bổ sung.

Làm thế nào để xác định một Setter

Dưới đây là một ví dụ cơ bản:

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; // This calls the setter
console.log(temp.celsius); // Output: 25

// temp.celsius = -300; // This would throw an error

Trong ví dụ này:

  • Chúng ta có một lớp Temperature với một thuộc tính riêng _celsius.
  • Chúng ta xác định một setter cho celsius kiểm tra giá trị có hợp lệ trước khi đặt nó.

Tại sao sử dụng Setters?

  1. Data Validation: Setters có thể đảm bảo rằng chỉ có các giá trị hợp lệ được gán cho các thuộc tính.

  2. Side Effects: Setters có thể kích hoạt các hành động khác khi một thuộc tính thay đổi.

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 = "Bob";
console.log(user.name); // Output: Bob
console.log(user.lastUpdated); // Output: Current date and time

Bảng tóm tắt các phương thức truy cập

Dưới đây là tóm tắt các phương thức truy cập chúng ta đã xem xét:

Loại Truy cập Từ khóa Mục đích Ví dụ
Getter get Lấy giá trị của thuộc tính get name(): string { return this._name; }
Setter set Đặt giá trị của thuộc tính set name(value: string) { this._name = value; }

Kết luận

Các truy cập trong TypeScript cung cấp một cách mạnh mẽ để kiểm soát cách các thuộc tính của đối tượng được truy cập và sửa đổi. Chúng cho phép bạn thêm logic, validate và các thuộc tính tính toán vào các lớp của bạn, làm cho mã của bạn trở nên vững chắc và dễ bảo trì hơn.

Nhớ rằng, như việc học bất kỳ kỹ năng mới nào, việc thành thạo các truy cập đòi hỏi sự thực hành. Đừng nản lòng nếu nó không ngay lập tức hiểu được - tiếp tục mã hóa, tiếp tục thử nghiệm, và sớm bạn sẽ sử dụng getters và setters như một chuyên gia!

Như tôi luôn nói với học sinh của mình, lập trình giống như học một ngôn ngữ mới. Ban đầu, nó có thể看起来 phức tạp, nhưng với sự kiên nhẫn và thực hành, bạn sẽ sớm thành thạo TypeScript. Chúc các bạn may mắn và đừng quên vui vẻ trên đường đi!

Credits: Image by storyset