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); // UnknownHà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.
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ớpProductvớ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ạonamethành'Unnamed'vàpricethành0.0bằng danh sách khởi tạo - Hàm khởi tạo có tên
Product.withDetailsnhận các tham sốnamevàprice - Phương thức
display()in ra:Product: [name] - $[price]
- Hàm khởi tạo mặc định tường minh
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
display()cho từng sản phẩm.
Lớp Product của bạn cần có hai biến instance:
String namedouble price
Định dạng đầu ra dự kiến:
Product: Unnamed - $0.0
Product: Laptop - $999.99Tự 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
}
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
1Nền tảng về lập trình hướng đối tượng
Tệp bên ngoàiThư viện và câu lệnh importGiới thiệu về lập trình hướng đối tượngLớp và đối tượngTừ khóa thisPhương thứcBiến thể hiệnKiến thức cơ bản về hàm khởi tạoÔn tập: Máy tính đơn giản4An toàn với giá trị null
Giới thiệu về an toàn với giá trị nullCó thể null và không thể nullToán tử ? và !Từ khóa late và an toàn với giá trị nullToán tử xử lý nullAn toàn với giá trị null trong lớpÔn tập: hệ thống hồ sơ người dùng7Lớp trừu tượng và interface
Lớp trừu tượngPhương thức trừu tượngInterface trong DartInterface ngầm địnhTriển khai và kế thừaNhiều interfaceÔn tập: Máy tính hình10Bộ sưu tập và kiểu tổng quát
Tổng quan về List, Set và MapBộ sưu tập an toàn về kiểuLớp tổng quátPhương thức tổng quátRàng buộc kiểu tổng quátIterable và IteratorÔn tập: Lưu trữ tổng quát2Hàm khởi tạo trong Dart
Hàm khởi tạo mặc địnhHàm khởi tạo có tênDanh sách khởi tạoHàm khởi tạo hằng sốHàm khởi tạo nhà máyHàm khởi tạo chuyển hướngÔn tập: Trình tạo hình dạng5Đóng gói
Thành viên công khai và riêng tưQuy ước tiền tố _Tính riêng tư ở cấp thư việnTìm hiểu sâu về getter và setterChe giấu thông tinÔn tập: hồ sơ học sinh8Mixin
Giới thiệu về MixinTạo MixinSử dụng nhiều MixinTừ khóa on trong MixinMixin và kế thừaMixin và giao diệnÔn tập: hệ thống động vật3Thuộc tính của lớp
Thành viên instance và thành viên tĩnhTrường final và constBiến latePhương thức và trường tĩnhGetter và setterÔn tập: trình quản lý tài khoản ngân hàng6Kế thừa
Kế thừa cơ bảnTừ khóa superGhi đè phương thứcChú thích @overrideTừ khóa lớp finalHàm khởi tạo và kế thừaÔn tập: phân cấp nhân viên9Đa hình
Khái niệm cơ bản về đa hìnhĐa hình qua giao diệnKiểm tra kiểu lúc chạyToán tử is và asTừ khóa hiệp biếnÔn tập: Bộ xử lý thanh toánTự luyện tập: Trình biên dịch Dart online