Menu
CoddyTech

Hàm khởi tạo có tên

Thuộc phần Lập trình hướng đối tượng trong hành trình Dart của Coddy. Bài học 11 trên 110.

Hàm khởi tạo có tên cho phép bạn tạo nhiều hàm khởi tạo cho một lớp, mỗi hàm có một tên mô tả giúp làm rõ mục đích. Cách này đặc biệt hữu ích khi bạn cần nhiều cách khác nhau để khởi tạo một đối tượng.

Cú pháp dùng tên lớp, theo sau là dấu chấm và tên hàm khởi tạo:

class Point {
  int x;
  int y;

  // Hàm khởi tạo thông thường
  Point(this.x, this.y);

  // Hàm khởi tạo có tên cho điểm gốc
  Point.origin() : x = 0, y = 0;

  // Hàm khởi tạo có tên từ một giá trị duy nhất
  Point.diagonal(int value) : x = value, y = value;
}

Mỗi hàm khởi tạo có tên cung cấp một cách rõ ràng, dễ đọc để tạo đối tượng:

Point p1 = Point(3, 5);
Point p2 = Point.origin();
Point p3 = Point.diagonal(10);

print('p1: (${p1.x}, ${p1.y})'); // p1: (3, 5)
print('p2: (${p2.x}, ${p2.y})'); // p2: (0, 0)
print('p3: (${p3.x}, ${p3.y})'); // p3: (10, 10)

Các hàm khởi tạo có tên giúp đoạn code của bạn dễ hiểu hơn. Thay vì phải đoán Point(0, 0) có nghĩa là gì, Point.origin() lập tức cho bạn biết mục đích. Mẫu này phổ biến trong các thư viện Dart và giúp tạo ra đoạn code tự giải thích.

challenge icon

Thử thách

Dễ

Hãy tạo một bộ chuyển đổi nhiệt độ để thể hiện sức mạnh của các hàm khởi tạo có tên. Bạn sẽ tạo lớp (class) Temperature, có thể khởi tạo theo nhiều cách khác nhau tùy vào đơn vị nhiệt độ ban đầu.

Bạn sẽ sắp xếp code thành hai tệp:

  • temperature.dart: Định nghĩa lớp Temperature với một biến instance double celsius. Lớp của bạn cần có ba cách tạo nhiệt độ:
    • Hàm khởi tạo thông thường Temperature(this.celsius) nhận trực tiếp giá trị Celsius
    • Hàm khởi tạo có tên Temperature.fromFahrenheit nhận giá trị Fahrenheit và chuyển đổi sang Celsius bằng công thức: (fahrenheit - 32) * 5 / 9
    • Hàm khởi tạo có tên Temperature.freezing() tạo nhiệt độ tại điểm đóng băng (0 độ Celsius)
    Thêm phương thức display() để in ra: [celsius]C
  • main.dart: Nhập lớp nhiệt độ của bạn và tạo ba đối tượng nhiệt độ:
    • Một đối tượng dùng hàm khởi tạo thông thường với 25.0
    • Một đối tượng dùng fromFahrenheit với 98.6
    • Một đối tượng dùng freezing()
    Gọi display() cho từng nhiệt độ theo thứ tự được liệt kê ở trên.

Định dạng đầu ra mong đợi:

25.0C
37.0C
0.0C

Tự làm thử

import 'temperature.dart';

void main() {
  // TODO: Tạo một Temperature bằng hàm khởi tạo thông thường với 25.0
  
  // TODO: Tạo một Temperature bằng fromFahrenheit với 98.6
  
  // TODO: Tạo một Temperature bằng freezing()
  
  // TODO: Gọi display() lần lượt trên từng đối tượng Temperature
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch Dart online