Genericsに対するExtension
List、Iterable、型パラメーターを拡張する
「Genericsに対するExtension」はCoddyKit上の無料Dart Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDart Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Dart Academyコースには全4レッスンが含まれています。
コレクションを拡張する
ListやIterableのようなジェネリック型を拡張すると、本当の威力が発揮されます。1つの拡張機能で、すべての要素型を一度に扱えます。
型パラメーターを宣言する
拡張機能の名前の後ろに型パラメーターを置き、それをon節で使います。これでヘルパーの型安全性を完全に保てます。
extension Firsts<T> on List<T> {
T? get firstOrNull => isEmpty ? null : this[0];
}要素型が引き継がれます
List of Tと記述したため、メソッドは正しい要素型を自動的に返します。キャストは不要で、dynamicによる予期しない問題もありません。
List<int> nums = [1, 2, 3];
int? n = nums.firstOrNull; // typed as int?Iterableを拡張して適用範囲を広げる
ListではなくIterableを拡張すると、リスト、セット、遅延評価されるIterableのすべてでヘルパーを使えます。コードは同じまま、適用範囲だけが広がります。
extension Counts<T> on Iterable<T> {
int countWhere(bool Function(T) f) => where(f).length;
}内部でジェネリックメソッドを使う
拡張メソッド自体も、拡張対象の型とは別に、独自のジェネリックパラメーターを受け取れます。
extension Mapping<T> on List<T> {
List<R> mapTo<R>(R Function(T) f) => map(f).toList();
}型推論が助けてくれます
Dartは通常、呼び出し対象の値から型引数を推論するため、呼び出し側のコードを短くすっきり保てます。
var first = ["a", "b"].firstOrNull; // String?2つの型でMapを拡張する
Mapには2つのパラメーターが必要です。Map of K, Vと記述すれば、キーと値の両方に対応したヘルパーを作れます。
extension MapPick<K, V> on Map<K, V> {
V? pick(K key) => this[key];
}null安全性を保つ
TではなくT?を返すと、値が存在しない可能性を示せます。null安全性のもとで、呼び出し側にもその可能性を意識させられます。
extension SafeLast<T> on List<T> {
T? get lastOrNull => isEmpty ? null : last;
}要素型をまたいで再利用する
1つのジェネリック拡張機能ですべての要素型に対応できます。同じfirstOrNullを、数値、文字列、独自のクラスに対して使えます。
var who = <User>[].firstOrNull; // User?必要に応じて制約を付ける
ヘルパーに特定の機能が必要なら、extendsを使って境界を追加し、適切な要素型だけを許可します。
extension Sums<T extends num> on List<T> {
num total() => fold(0, (a, b) => a + b);
}ジェネリック拡張機能が優れている理由
ジェネリック拡張機能は再利用性と安全性を両立します。ヘルパーを一度書くだけで、正しい戻り値の型を保ちながら、どの要素型にも対応できます。
クイックチェック
拡張機能の型安全性を保つ方法を確認しましょう。
復習:ジェネリック拡張機能
拡張機能に型パラメーターを追加し、List、Iterable、Mapを対象にできること、さらにextendsで境界を付けて再利用性と安全性を保てることを学びました。✅
AI チューターと学ぶ Dart — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 30
- レッスン
- 120
よくある質問
「Genericsに対するExtension」レッスンは無料ですか?
はい。「Genericsに対するExtension」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Dart Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Dart Academyコースには全4レッスンが含まれています。
「Genericsに対するExtension」で何を学びますか?
List、Iterable、型パラメーターを拡張する ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Dart Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDart Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Genericsに対するExtension」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDart Academyレッスンでコードを書いて実行できますか?
はい。すべてのDart Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 最初のExtensionを書く
- Genericsに対するExtension
- 静的Extensionメンバーと競合
- ゼロコストラッパーのExtension Type