Danh sách khởi tạo
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 12 trên 110.
Danh sách khởi tạo là đoạn code xuất hiện sau dấu hai chấm trong hàm khởi tạo, trước phần thân hàm khởi tạo. Danh sách này chạy trước khi phần thân hàm khởi tạo thực thi và dùng để khởi tạo các biến của instance.
Bạn đã thấy danh sách khởi tạo trong các bài học trước:
Point.origin() : x = 0, y = 0;Phần sau dấu hai chấm (x = 0, y = 0) là danh sách khởi tạo. Các lần khởi tạo được phân tách bằng dấu phẩy.
Danh sách khởi tạo rất cần thiết khi làm việc với các biến final, vì bạn phải gán giá trị cho chúng trước khi phần thân hàm khởi tạo chạy:
class Circle {
final double radius;
final double area;
Circle(double r)
: radius = r,
area = 3.14159 * r * r;
}
Circle c = Circle(5);
print(c.radius); // 5.0
print(c.area); // 78.53975Danh sách khởi tạo cũng có thể tính toán hoặc chuyển đổi các tham số của hàm khởi tạo trước khi gán chúng. Cách này hữu ích khi bạn cần suy ra giá trị hoặc xác thực dữ liệu trong lúc tạo đối tượng.
Bạn có thể kết hợp cú pháp rút gọn this. với danh sách khởi tạo:
class Rectangle {
final double width;
final double height;
final double area;
Rectangle(this.width, this.height)
: area = width * height;
}
Rectangle rect = Rectangle(4, 5);
print(rect.area); // 20.0Ở đây, width và height được gán bằng cú pháp viết tắt, còn area được tính trong danh sách khởi tạo bằng các giá trị đó.
Thử thách
DễHãy tạo một trình tính kích thước hộp, sử dụng danh sách khởi tạo để tính các giá trị dẫn xuất khi tạo đối tượng.
Bạn sẽ chia code thành hai tệp:
box.dart: Định nghĩa lớpBoxđại diện cho một chiếc hộp 3D có kích thước và các thuộc tính được tự động tính. Lớp của bạn cần có:- Ba trường
final double:length,widthvàheight - Hai trường
final doubleđược tính toán:volumevàsurfaceArea - Một hàm khởi tạo nhận
length,widthvàheightbằng cách dùng cú pháp rút gọnthis., đồng thời dùng danh sách khởi tạo để tínhvolume(length × width × height) vàsurfaceArea(2 × (length×width + width×height + height×length)) - Một phương thức
display()để in thông tin hộp
- Ba trường
main.dart: Nhập lớp hộp và tạo hai chiếc hộp:- Một chiếc hộp có kích thước
3.0,4.0,5.0 - Một chiếc hộp có kích thước
2.0,2.0,2.0
display()trên từng chiếc hộp theo thứ tự đã liệt kê.- Một chiếc hộp có kích thước
Phương thức display() cần in theo đúng định dạng sau:
Box: [length]x[width]x[height] | Volume: [volume] | Surface: [surfaceArea]Đầu ra dự kiến:
Box: 3.0x4.0x5.0 | Volume: 60.0 | Surface: 94.0
Box: 2.0x2.0x2.0 | Volume: 8.0 | Surface: 24.0Tự làm thử
import 'box.dart';
void main() {
// TODO: Tạo một hộp có kích thước 3.0, 4.0, 5.0
// TODO: Tạo một hộp có kích thước 2.0, 2.0, 2.0
// TODO: Gọi display() trên từng hộp theo thứ tự
}
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