0Pricing
Dart Academy · レッスン

extendsによる境界付き型パラメーター

ジェネリックが受け取れる型を制限する

「extendsによる境界付き型パラメーター」はCoddyKit上の無料Dart Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDart Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Dart Academyコースには全4レッスンが含まれています。

すべての型では広すぎる場合

通常の型パラメーターはあらゆる型を受け入れますが、それでは不十分な場合があります。特定の型だけが提供するメソッドを呼び出したいこともあります。🔒

extendsによる境界

境界はextendsを使って追加できます。これにより、型パラメーターが指定された型またはそのサブタイプでなければならないことを示します。

class Cage<T extends Animal> {}

境界によって保証されること

クラス内では、DartはTが少なくともAnimalであると信頼できます。そのため、Animalが定義するメンバーを安全に使用できます。

class Cage<T extends Animal> {
  void feed(T a) => a.eat();
}

不正な型を拒否する

コンパイラーは、境界を満たさない型引数を拒否します。無関係な型を渡すと、すぐにエラーが表示されます。

Cage<String>();

数値の境界

よく使われる境界は、intとdoubleの親であるnumです。これにより、ジェネリックで算術演算を行いながら、両方の数値型を受け入れられます。

T addOne<T extends num>(T x) => x + 1 as T;

メソッドに境界を付ける

境界はクラスだけでなく、ジェネリックメソッドにも使えます。メソッドでは、型パラメーター名の直後にextendsを置きます。

num biggest<T extends num>(List<T> xs) =>
    xs.reduce((a, b) => a > b ? a : b);

デフォルトの境界はObject

境界を省略すると、暗黙の境界はObject?になります。そのため、境界のないTで使えるのは、すべてのオブジェクトが持つメンバーだけです。

Comparableの境界

並べ替えや比較を行うには、Comparableを境界に指定します。すると、ジェネリックコード内の値に対してcompareToを呼び出せます。

T max<T extends Comparable<T>>(T a, T b) =>
    a.compareTo(b) >= 0 ? a : b;

境界で意図を示す

境界は、ここで扱える型の種類を読み手に伝える役割もあります。シグネチャ自体が、コードが求める契約を説明します。

自己参照型の境界

Tは、T extends Comparable of Tのように、自身の境界内に登場させることもできます。このパターンは、型をそれ自身に対する操作と結び付けます。

境界は最小限にする

処理に必要な範囲で、最も制約の緩い境界を使います。制約が厳しすぎると有効な型を締め出し、境界がまったくないと便利なメソッドを利用できません。

理解度チェック

境界を指定すると、クラス内で何ができるようになりますか?

まとめ

extendsを使って型パラメーターに境界を設定し、境界で指定した型のメソッドを使えるようにするとともに、無関係な型を拒否する方法を学びました。境界は、処理に必要な範囲で緩く設定しましょう。✅

よくある質問

「extendsによる境界付き型パラメーター」レッスンは無料ですか?

はい。「extendsによる境界付き型パラメーター」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Dart Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Dart Academyコースには全4レッスンが含まれています。

「extendsによる境界付き型パラメーター」で何を学びますか?

ジェネリックが受け取れる型を制限する ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Dart Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDart Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「extendsによる境界付き型パラメーター」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDart Academyレッスンでコードを書いて実行できますか?

はい。すべてのDart Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

  1. Genericsがdynamicより優れている理由
  2. ジェネリッククラスとジェネリックメソッド
  3. extendsによる境界付き型パラメーター
  4. ジェネリックコレクションの実践
← Dart Academyに戻る