Menu
CoddyTech

Ôn tập: Lưu trữ tổng quát

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

challenge icon

Thử thách

Dễ

Hãy xây dựng một hệ thống lưu trữ tổng quát kết hợp mọi kiến thức bạn đã học về tập hợp và kiểu tổng quát! Bạn sẽ tạo một lớp Storage<T> có thể lưu trữ các phần tử thuộc bất kỳ kiểu nào, truy xuất chúng và cho phép duyệt qua bằng vòng lặp for-in.

Bạn sẽ sắp xếp code vào hai tệp:

  • storage.dart: Tạo hệ thống lưu trữ tổng quát với hai lớp:
    • Lớp StorageIterator<T> triển khai Iterator<T> để cho phép duyệt qua các phần tử đã lưu trữ
    • Lớp Storage<T> mở rộng Iterable<T> với các khả năng sau:
      • Một danh sách riêng tư để lưu trữ các phần tử bên trong
      • Phương thức add(T item) để lưu một phần tử mới
      • Phương thức getAt(int index) trả về phần tử tại chỉ số đã cho
      • Thuộc tính getter count trả về số phần tử đã lưu trữ
      • Thuộc tính getter iterator trả về một StorageIterator cho các phần tử đã lưu trữ
  • main.dart: Nhập tệp lưu trữ của bạn và minh họa hệ thống lưu trữ tổng quát với các kiểu khác nhau:
    • Tạo một Storage<String> và thêm ba tên thành phố: 'Paris', 'Tokyo', 'Sydney'
    • In số lượng phần tử
    • In phần tử tại chỉ số 1
    • Dùng vòng lặp for-in để in mỗi thành phố trên một dòng riêng
    • In một dòng trống
    • Tạo một Storage<int> và thêm bốn số: 100, 200, 300, 400
    • Dùng phương thức where để lọc các giá trị lớn hơn 150, sau đó in danh sách kết quả

Hệ thống lưu trữ của bạn sẽ hoạt động trơn tru với mọi kiểu mà vẫn đảm bảo an toàn kiểu dữ liệu đầy đủ. Vì mở rộng Iterable, hệ thống tự động có thêm các phương thức mạnh mẽ như where, map và fold!

Kết quả mong đợi:

Count: 3
Item at 1: Tokyo
Paris
Tokyo
Sydney

[200, 300, 400]

Tự làm thử

import 'storage.dart';

void main() {
  // TODO: Tạo một Storage<String> để lưu các thành phố
  // Thêm ba thành phố: 'Paris', 'Tokyo', 'Sydney'

  // TODO: In ra số lượng phần tử (định dạng: "Count: X")

  // TODO: In ra phần tử tại chỉ số 1 (định dạng: "Item at 1: X")

  // TODO: Dùng vòng lặp for-in để in mỗi thành phố trên một dòng riêng

  // TODO: In ra một dòng trống
  print('');

  // TODO: Tạo một Storage<int> để lưu các số
  // Thêm bốn số: 100, 200, 300, 400

  // TODO: Dùng phương thức where để lọc các giá trị lớn hơn 150
  // Sau đó dùng toList() để in ra danh sách kết quả
}

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