Dart Academy · レッスン

静的Extensionメンバーと競合

衝突を解決し、静的ヘルパーを追加する

レッスン 3/413 ステップ

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

2つのヘルパー、同じ名前

Stringにparseという名前のメソッドを追加する2つの拡張機能をインポートすると、Dartはどちらを意図したのか判断できなくなります。

競合が起きる理由

拡張機能のメンバーは型そのものに属していないため、同じ名前のメソッドが2つあると、コンパイラーは推測できない曖昧さとして扱います。

エラーを見つける

このような場合、Dartは曖昧な拡張機能があると報告して停止します。黙ってどちらかを選ぶことはありません。

"7".parse(); // error: ambiguous between two extensions

インポート時に一方を非表示にする

インポートにhideを指定すると、名前で競合する拡張機能の一方を除外し、もう一方が呼び出しに使われるようにできます。

import 'b.dart' hide NumberParsing;

または1つだけ表示する

反対の方法がshowです。指定した名前だけをインポートし、それ以外を静かに除外します。

import 'a.dart' show NumberParsing;

明示的に呼び出す

明示的な適用を使って正確に指定することもできます。拡張機能の名前を記述し、値を括弧内に渡します。

NumberParsing("7").parse();

静的メンバーを追加する

拡張機能には静的メンバーも追加できます。静的メンバーはメソッドを呼び出す値ではなく、拡張機能の名前に属します。

extension MathX on num {
  static num clampLow(num x) => x < 0 ? 0 : x;
}

名前で静的メンバーにアクセスする

静的メンバーは拡張機能の名前を通して、クラスの静的メンバーと同じように呼び出します。レシーバーの値は関係ありません。

print(MathX.clampLow(-3)); // 0

静的メンバーには名前が必要です

静的メンバーには拡張機能を通してアクセスするため、名前のない拡張機能では公開できません。静的メンバーを使うには名前を付けてください。

インスタンスメンバーと静的メンバー

インスタンスメンバーはthisを使い、値に対して動作します。静的メンバーは値を無視し、拡張機能そのものに属します。

衝突を避ける設計をする

拡張機能とメンバーには、明確で具体的な名前を付けます。適切な命名をすれば、showやhideが必要になる前に、ほとんどの競合を防げます。

クイックチェック

1つの競合に、1つのすっきりした解決策があります。どれが有効でしょうか。

復習:静的メンバーと競合

show、hide、明示的な呼び出しで競合する拡張機能を解決でき、拡張機能の名前を通してアクセスする静的メンバーも追加できることを学びました。🧩

無料で開始

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

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

コース
30
レッスン
120

よくある質問

「静的Extensionメンバーと競合」レッスンは無料ですか?

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

「静的Extensionメンバーと競合」で何を学びますか?

衝突を解決し、静的ヘルパーを追加する ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「静的Extensionメンバーと競合」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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