Dart Academy · レッスン

Genericsに対するExtension

List、Iterable、型パラメーターを拡張する

レッスン 2/413 ステップ

「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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 最初のExtensionを書く
  2. Genericsに対するExtension
  3. 静的Extensionメンバーと競合
  4. ゼロコストラッパーのExtension Type
← Dart Academyに戻る