Dart Academy · レッスン

ゼロコストラッパーのExtension Type

実行時のオーバーヘッドなしで型をラップする

レッスン 4/413 ステップ

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

別のツール

extension typeは新しい機能です。既存の型をラップして新しいインターフェースを与えますが、実行時のコストはありません。

ボックス化せずにラップする

通常のラッパークラスとは異なり、extension typeは実行時にオブジェクトを追加しません。実行時には、単に基になる値そのものとして扱われます。

extension type UserId(int id) {}

表現型

括弧内の値の型が表現型です。ここではUserIdは、実際にはより安全な名前を付けたintにすぎません。

extension type Meters(double value) {}

簡単に作成する

extension typeはコンストラクターを呼び出すように、基になる値をそのまま渡して構築します。

var id = UserId(42);
var d = Meters(3.5);

安全なメソッドを追加する

本体の中には、ラップされた値を操作するメソッドやゲッターを追加できます。これにより、値に本来の意味を持たせられます。

extension type Meters(double value) {
  Meters plus(Meters o) => Meters(value + o.value);
}

typedefより強力

typedefは単なる別名ですが、extension typeは独立した型です。そのため、UserIdと通常のintを誤って混在させることはできません。

int raw = 42;
// UserId u = raw; // error: not interchangeable

基になるAPIを隠す

デフォルトでは、extension typeはラップされた型のメンバーを隠します。そのため、呼び出せるのは公開したメソッドだけです。

var m = Meters(2.0);
// m.toStringAsFixed(2); // not available unless exposed

またはimplementsで公開する

implementsを追加すると、基になる型のメンバーを転送できます。呼び出し側は、独自のAPIと基になる型の両方を使えるようになります。

extension type Score(int value) implements int {}
print(Score(9) + 1); // 10

実行時のオーバーヘッドはゼロ

実際のオブジェクトは作成されないため、extension typeの実行時コストはありません。型安全性を追加コストなしで得られます。

ドメインIDに最適

UserIdやEmailのような型付き識別子に適しています。間違ったintを間違った引数に渡すことを防げます。

void load(UserId id) {}
load(UserId(7)); // load(7) would not compile

拡張機能とextension typeの違い

拡張機能は共有される型にメソッドを追加します。一方、extension typeは値を包む新しい独立した型を作ります。

クイックチェック

最後の確認です。extension typeが特別なのはなぜでしょうか。

復習:extension type

extension typeについて学びました。これは表現型を包む独立した、コストゼロのラッパーであり、実行時のオーバーヘッドなしに、安全なIDや単位を扱うのに適しています。🏁

無料で開始

AI チューターと学ぶ Dart — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「ゼロコストラッパーのExtension Type」レッスンは無料ですか?

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

「ゼロコストラッパーのExtension Type」で何を学びますか?

実行時のオーバーヘッドなしで型をラップする ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「ゼロコストラッパーのExtension Type」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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