エクステンションでのwhere句
型 エクステンションや プロトコル エクステンションで where を使い、制約を満たす場合のみAPIを追加します(例: Array where Element: Equatable 、 Collection where Element == Int )。
「エクステンションでのwhere句」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン3/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全3レッスンが含まれています。
制約付き拡張が必要な理由
拡張にwhereを付け、型が制約を満たす場合にのみAPIを追加します。
- 型の拡張(例:
Array) - プロトコルの拡張(例:
Collection) - 完全一致の制約(例:
Element == Int)
制約付きの型拡張
ElementがEquatableの場合にのみ、Arrayにメソッドを追加します。Equatableでない配列からは、これらのAPIは見えません。
extension Array where Element: Equatable {
func removing(_ value: Element) -> [Element] {
filter { $0 != value }
}
func containsAll(_ others: [Element]) -> Bool {
others.allSatisfy(self.contains)
}
}
print([1,2,3].removing(2)) // [1,3]
print(["a","b"].containsAll(["b"])) // truewhereを使ったプロトコル拡張
プロトコル拡張は、制約を満たす場合に、適合するすべての型へAPIを追加します(ここではComparableな要素を持つ任意のCollectionが対象です)。
extension Collection where Element: Comparable {
var isSorted: Bool {
// Pair each element with the next; ensure non-decreasing order
zip(self, dropFirst()).allSatisfy(<=)
}
}
print([1,2,3].isSorted) // true
print([3,1,2].isSorted) // false完全一致の制約
対象を限定したAPIには等価性制約を使用します。たとえばElement == Intの場合にのみ追加できます。ほかの要素型では、これらのAPIは表示されません。
extension Collection where Element == Int {
var sum: Int { reduce(0, +) }
func average() -> Double {
isEmpty ? 0 : Double(sum) / Double(count)
}
}
print([1,2,3].sum) // 6
print([1,2,3].average()) // 2.0機能に基づくAPI
NumericやHashableなどのプロトコルで機能に基づく制約を付け、強力で再利用可能なヘルパーを組み合わせます。
extension Collection where Element: Numeric {
var total: Element { reduce(0, +) }
}
extension Sequence where Element: Hashable {
var uniques: [Element] {
var seen = Set<Element>()
return filter { seen.insert($0).inserted }
}
}
print([1,2,2,3].uniques) // [1,2,3]
print([1,2,3].total) // 6設計上の注意点
ヒント:
- 幅広く再利用できるよう、制約は最小限にしてください。
- 同じメンバーを定義する拡張が重複しないようにしてください。オーバーロード解決が分かりにくくなる可能性があります。
- 前提条件(順序、一意性、数値の範囲)をドキュメント化してください。
制約付き拡張の目的
確認問題: 制約付き拡張を使うと何ができますか?
まとめ
まとめ: 型やプロトコルの拡張にwhereを付けると、機能による指定(: Comparable)や正確な型による指定(== Int)によってAPIの対象を正確に絞り込めます。これにより、安全で見つけやすいコードを保てます。
よくある質問
「エクステンションでのwhere句」レッスンは無料ですか?
はい。「エクステンションでのwhere句」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全3レッスンが含まれています。
「エクステンションでのwhere句」で何を学びますか?
型 エクステンションや プロトコル エクステンションで where を使い、制約を満たす場合のみAPIを追加します(例: Array where Element: Equatable 、 Collection where Element == Int )。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Swift Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/3です。
「エクステンションでのwhere句」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSwift Academyレッスンでコードを書いて実行できますか?
はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 条件付き準拠
- 再帰的制約と高階ジェネリック
- エクステンションでのwhere句