まとめ:カスタムコレクション
CoddyのDartジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 75/110。
チャレンジ
簡単プレイヤーのスコアを追跡し、特別なメソッドがどのように連携して洗練されたプロフェッショナルなクラスを作成するかを実証する 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: スコアボードを関数のように呼び出してソートされたランキングを取得し、各プレイヤーを表示する
}
オブジェクト指向プログラミングのすべてのレッスン
4Null Safety
Null Safety 入門Nullable と Non-Nullable? 演算子と ! 演算子late キーワードと Null SafetyNull-Aware 演算子クラスにおける Null Safetyまとめ:ユーザープロフィールシステム10コレクションとジェネリクス
List, Set, Map の概要型安全なコレクションジェネリッククラスジェネリックメソッドジェネリクスの制約Iterable と Iteratorまとめ:ジェネリックなストレージ