Menu
CoddyTech

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.53975

Danh 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ị đó.

challenge icon

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ớp Box đạ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, width và height
    • Hai trường final double được tính toán: volume và surfaceArea
    • Một hàm khởi tạo nhận length, width và height bằng cách dùng cú pháp rút gọn this., đồng thời dùng danh sách khởi tạo để tính volume (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
  • 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
    Gọi display() trên từng chiếc hộp theo thứ tự đã liệt kê.

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.0

Tự 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ự
  
}
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