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.
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ớpTemperaturevới một biến instancedouble 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.fromFahrenheitnhậ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)
display()để in ra:[celsius]C- Hàm khởi tạo thông thường
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
fromFahrenheitvới98.6 - Một đối tượng dùng
freezing()
display()cho từng nhiệt độ theo thứ tự được liệt kê ở trên.- Một đối tượng dùng hàm khởi tạo thông thường với
Định dạng đầu ra mong đợi:
25.0C
37.0C
0.0CTự 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
}
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