0Pricing
Swift Academy · レッスン

ジェネリック関数とジェネリック型

型パラメーター(例: )を使ってジェネリック関数とジェネリック型を記述します。コンパイラーによる型推論と、安全で再利用可能なコードの仕組みを学びます。

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

なぜジェネリクスなのか

ジェネリクスを使うと、型安全性を保ちながら多くの型で動作する1つの関数や型を書けます。<T>による型パラメーターと、推論によって呼び出しが簡単になる仕組みを見ていきます。

ジェネリック関数

ジェネリック関数は型パラメーター(<T>)を使います。コンパイラーは呼び出しごとに型をチェックします。

// Generic swap for any type T
func swapValues<T>(_ a: inout T, _ b: inout T) {
    let temp = a
    a = b
    b = temp
}

var x = 1, y = 2
swapValues(&x, &y)
print(x, y)  // 2 1

var s1 = "A", s2 = "B"
swapValues(&s1, &s2)
print(s1, s2) // B A

ジェネリック型

型もジェネリックにできます。Stack<Element>を宣言し、IntやStringなどで再利用します。

// A minimal generic stack
struct Stack<Element> {
    private var items: [Element] = []
    mutating func push(_ x: Element) { items.append(x) }
    mutating func pop() -> Element? { items.popLast() }
    var top: Element? { items.last }
}

var intStack = Stack<Int>()
intStack.push(10); intStack.push(20)
print(intStack.top ?? -1)   // 20

var textStack = Stack<String>()
textStack.push("hi"); textStack.push("bye")
print(textStack.pop() ?? "?")

型推論

Swiftはジェネリック型を推論することが多いため、呼び出し時に明示的に指定することはほとんどありません。

// The compiler infers T from arguments/assignments
func makePair<T>(_ a: T, _ b: T) -> (T, T) { (a, b) }

let pair1 = makePair(1, 2)          // T inferred as Int
let pair2 = makePair("a", "b")      // T inferred as String
print(pair1, pair2)

重複を避ける

ジェネリクスがないと、型ごとにコードを繰り返す必要があります。ジェネリクスは静的チェックを維持しながら重複をなくします。

// Non-generic overloads would duplicate logic:
func eqInt(_ a: Int, _ b: Int) -> Bool { a == b }
func eqStr(_ a: String, _ b: String) -> Bool { a == b }
// A single generic can replace both:

注意点と命名

注意点:

  • 明確な名前を使います。T、Element、またはドメインに応じた名前が適しています。
  • APIは小さく、目的を絞ります。
  • 次は、必要に応じてwhereで制約を追加し、Tを制限します。

<T>の意味

確認:ジェネリック関数における<T>は何を意味するのでしょうか。

まとめ

まとめ:<T>を使ってジェネリック関数を定義し、Stack<Element>のようなジェネリック型を作成します。Swiftは呼び出し時に型を推論するため、コードを再利用しながら安全性を保てます。

よくある質問

「ジェネリック関数とジェネリック型」レッスンは無料ですか?

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

「ジェネリック関数とジェネリック型」で何を学びますか?

型パラメーター(例: )を使ってジェネリック関数とジェネリック型を記述します。コンパイラーによる型推論と、安全で再利用可能なコードの仕組みを学びます。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「ジェネリック関数とジェネリック型」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. ジェネリック関数とジェネリック型
  2. 制約(where)と型推論
  3. コレクションに対するジェネリックアルゴリズム
← Swift Academyに戻る