Menu
Coddy logo textTech

Итоги: Обобщенное хранилище

Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy — урок 69 из 110.

challenge icon

Задание

Легко

Давайте создадим универсальную систему хранения, которая объединит все, что вы узнали о коллекциях и дженериках! Вы создадите класс Storage<T>, который может хранить элементы любого типа, извлекать их и поддерживать итерацию с помощью цикла for-in.

Вы организуете свой код в двух файлах:

  • storage.dart: Создайте свою универсальную систему хранения с двумя классами:
    • Класс StorageIterator<T>, который реализует Iterator<T> для обеспечения итерации по сохраненным элементам
    • Класс Storage<T>, который расширяет Iterable<T> со следующими возможностями:
      • Приватный список для внутреннего хранения элементов
      • Метод add(T item) для сохранения нового элемента
      • Метод getAt(int index), который возвращает элемент по заданному индексу
      • Геттер count, который возвращает количество сохраненных элементов
      • Геттер iterator, который возвращает StorageIterator для сохраненных элементов
  • main.dart: Импортируйте файл хранилища и продемонстрируйте работу универсального хранилища с различными типами:
    • Создайте Storage<String> и добавьте три названия городов: 'Paris', 'Tokyo', 'Sydney'
    • Выведите количество элементов
    • Выведите элемент по индексу 1
    • Используйте цикл for-in, чтобы вывести каждый город на отдельной строке
    • Выведите пустую строку
    • Создайте Storage<int> и добавьте четыре числа: 100, 200, 300, 400
    • Используйте метод where, чтобы отфильтровать значения больше 150, затем выведите результирующий список

Ваша система хранения должна бесперебойно работать с любым типом, сохраняя при этом полную типизацию. Поскольку она расширяет Iterable, она автоматически получает доступ к таким мощным методам, как where, map и fold!

Ожидаемый вывод:

Count: 3
Item at 1: Tokyo
Paris
Tokyo
Sydney

[200, 300, 400]

Попробуйте сами

import 'storage.dart';

void main() {
  // TODO: Создайте Storage<String> для городов
  // Добавьте три города: 'Paris', 'Tokyo', 'Sydney'

  // TODO: Выведите количество элементов (формат: "Count: X")

  // TODO: Выведите элемент по индексу 1 (формат: "Item at 1: X")

  // TODO: Используйте цикл for-in, чтобы вывести каждый город на отдельной строке

  // TODO: Выведите пустую строку
  print('');

  // TODO: Создайте Storage<int> для чисел
  // Добавьте четыре числа: 100, 200, 300, 400

  // TODO: Используйте метод where, чтобы отфильтровать значения больше 150
  // Затем выведите результирующий список, используя toList()
}

Все уроки раздела Объектно-ориентированное программирование