Menu
Coddy logo textTech

まとめ:カスタムコレクション

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

challenge icon

チャレンジ

簡単

プレイヤーのスコアを追跡し、特別なメソッドがどのように連携して洗練されたプロフェッショナルなクラスを作成するかを実証する ScoreBoard システムを構築しましょう!

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

  • score_board.dart: ゲームのスコアを管理するために連携する Player クラスと ScoreBoard クラスを作成します。

    Player クラスは name (String) と score (int) を持つ必要があります。また、以下の実装が必要です:

    • Comparable<Player> を実装し、プレイヤーをスコアの降順(高い順)でソートできるようにする
    • ==hashCode をオーバーライドし、同じ名前を持つ2人のプレイヤーを(スコアに関係なく)同一と見なすようにする
    • toString() をオーバーライドして、[name]: [score] points を返すようにする

    ScoreBoard クラスはプレイヤーのリストを保持し、以下を提供する必要があります:

    • addPlayer(Player player) メソッド:プレイヤーがまだ存在しない場合にのみ追加する(実装した等価性の判定を使用してください!)
    • call() メソッド:引数を取らず、プレイヤーリストのソート済みコピー(スコアの高い順)を返す
    • toString() をオーバーライドして、すべてのプレイヤーを(未ソートで)1行に1人ずつ表示し、最初の行に ScoreBoard: というヘッダーを付ける
  • main.dart: スコアボードファイルをインポートし、これらすべての特別なメソッドがどのように連携するかを実証します:
    • ScoreBoard を作成する
    • 次のプレイヤーを追加する:Alice (150)、Bob (200)、Charlie (175)
    • Alice をスコア 999 で再度追加してみる(重複として拒否されるはずです)
    • toString() を使用してスコアボードをプリントする
    • 空行をプリントする
    • Rankings: をプリントする
    • スコアボードを関数のように呼び出してソートされたランキングを取得し、各プレイヤーをプリントする

このチャレンジでは、表示のための toString()、重複検出のための ==hashCode、ソートのための compareTo()、そしてクリーンな呼び出し可能インターフェースのための call() を統合します!

期待される出力:

ScoreBoard:
Alice: 150 points
Bob: 200 points
Charlie: 175 points

Rankings:
Bob: 200 points
Charlie: 175 points
Alice: 150 points

自分で試してみよう

import 'score_board.dart';

void main() {
  // TODO: ScoreBoard を作成する

  // TODO: プレイヤーを追加する: Alice (150), Bob (200), Charlie (175)

  // TODO: スコア 999 で Alice を再度追加してみる(重複として拒否されるはずです)

  // TODO: toString() を使用してスコアボードを表示する

  // TODO: 空行を表示する

  // TODO: "Rankings:" を表示する

  // TODO: スコアボードを関数のように呼び出してソートされたランキングを取得し、各プレイヤーを表示する
}

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