Menu
Coddy logo textTech

まとめ:ジェネリックなストレージ

CoddyのDartジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 69/110。

challenge icon

チャレンジ

簡単

コレクションとジェネリクスについて学んだすべてを組み合わせた、汎用的なストレージシステムを構築しましょう!任意の型のアイテムを保存、取得でき、for-inループで反復処理が可能なStorage<T>クラスを作成します。

コードを2つのファイルに整理します:

  • storage.dart: 2つのクラスを持つ汎用ストレージシステムを作成します:
    • 保存されたアイテムの反復処理を可能にするために、Iterator<T>を実装したStorageIterator<T>クラス
    • 以下の機能を持ち、Iterable<T>を継承したStorage<T>クラス:
      • 内部でアイテムを保持するためのプライベートリスト
      • 新しいアイテムを保存するためのadd(T item)メソッド
      • 指定されたインデックスのアイテムを返すgetAt(int index)メソッド
      • 保存されているアイテムの数を返すcountゲッター
      • 保存されたアイテムのStorageIteratorを返すiteratorゲッター
  • main.dart: ストレージファイルをインポートし、異なる型を使用して汎用ストレージを実演します:
    • Storage<String>を作成し、3つの都市名を追加します:'Paris''Tokyo''Sydney'
    • アイテムの数(count)をプリントします
    • インデックス1のアイテムをプリントします
    • for-inループを使用して、各都市をそれぞれの行にプリントします
    • 空行をプリントします
    • Storage<int>を作成し、4つの数字を追加します:100200300400
    • whereメソッドを使用して150より大きい値をフィルタリングし、結果のリストをプリントします

このストレージシステムは、完全な型安全性を維持しながら、あらゆる型でシームレスに動作する必要があります。Iterableを継承しているため、wheremapfoldなどの強力なメソッドに自動的にアクセスできるようになります!

期待される出力:

Count: 3
Item at 1: Tokyo
Paris
Tokyo
Sydney

[200, 300, 400]

自分で試してみよう

import 'storage.dart';

void main() {
  // TODO: 都市名のための Storage<String> を作成する
  // 3つの都市 'Paris'、'Tokyo'、'Sydney' を追加する

  // TODO: アイテムの数を出力する (形式: "Count: X")

  // TODO: インデックス 1 のアイテムを出力する (形式: "Item at 1: X")

  // TODO: for-in ループを使用して、各都市をそれぞれの行に出力する

  // TODO: 空行を出力する
  print('');

  // TODO: 数値のための Storage<int> を作成する
  // 4つの数値 100, 200, 300, 400 を追加する

  // TODO: where メソッドを使用して 150 より大きい値をフィルタリングする
  // その後、toList() を使用して結果のリストを出力する
}

オブジェクト指向プログラミングのすべてのレッスン