Menu
CoddyTech

Hàm khởi tạo mặc định

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 10 trên 110.

Khi bạn không định nghĩa hàm khởi tạo nào trong một lớp, Dart sẽ tự động cung cấp hàm khởi tạo mặc định. Đây là hàm khởi tạo không có tham số, chỉ đơn giản tạo một instance của lớp.

class Book {
  String title = 'Unknown';
  int pages = 0;
}

// Dart cung cấp hàm khởi tạo (constructor) mặc định: Book()
Book myBook = Book();
print(myBook.title); // Unknown

Hàm khởi tạo mặc định (default constructor) không hiển thị trong code của bạn, nhưng vẫn tồn tại. Hàm này không nhận đối số nào và khởi tạo đối tượng với các giá trị mặc định mà bạn đã gán cho các biến của đối tượng.

Khi tự định nghĩa hàm khởi tạo, bạn sẽ không còn được cung cấp hàm khởi tạo mặc định tự động nữa. Nếu vẫn muốn có hàm khởi tạo không có đối số bên cạnh hàm khởi tạo có tham số, bạn phải tự tạo hàm đó:

class Book {
  String title;
  int pages;

  // Hàm khởi tạo mặc định được khai báo tường minh
  Book() : title = 'Unknown', pages = 0;

  // Hàm khởi tạo có tham số
  Book.withDetails(this.title, this.pages);
}

Book book1 = Book();                      // Dùng hàm khởi tạo mặc định
Book book2 = Book.withDetails('Dart', 300); // Dùng hàm khởi tạo có tham số

Hàm khởi tạo mặc định tường minh dùng danh sách khởi tạo (phần sau dấu hai chấm) để đặt các giá trị ban đầu. Cách này hữu ích khi bạn muốn cung cấp nhiều cách tạo đối tượng từ cùng một lớp.

challenge icon

Thử thách

Dễ

Hãy cùng xây dựng một hệ thống kiểm kê sản phẩm đơn giản để minh họa cả hàm khởi tạo mặc định ngầm định và tường minh.

Bạn sẽ tạo hai tệp để sắp xếp code:

  • product.dart: Định nghĩa lớp Product với hai cách tạo sản phẩm:
    • Hàm khởi tạo mặc định tường minh Product() khởi tạo name thành 'Unnamed' và price thành 0.0 bằng danh sách khởi tạo
    • Hàm khởi tạo có tên Product.withDetails nhận các tham số name và price
    • Phương thức display() in ra: Product: [name] - $[price]
  • main.dart: Nhập lớp sản phẩm và tạo hai sản phẩm:
    • Một sản phẩm dùng hàm khởi tạo mặc định
    • Một sản phẩm dùng hàm khởi tạo có tên với 'Laptop' và 999.99
    Gọi display() cho từng sản phẩm.

Lớp Product của bạn cần có hai biến instance:

  • String name
  • double price

Định dạng đầu ra dự kiến:

Product: Unnamed - $0.0
Product: Laptop - $999.99

Tự làm thử

import 'product.dart';

void main() {
  // TODO: Tạo một sản phẩm bằng hàm khởi tạo mặc định
  
  // TODO: Tạo một sản phẩm bằng hàm khởi tạo có tên với 'Laptop' và 999.99
  
  // TODO: Gọi display() trên từng sản phẩm
}
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