0Pricing
Swift Academy · レッスン

第一級値としての関数

関数を変数に保存し、引数として渡し、関数から返す方法を学びます。

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

ようこそ

Swift では、関数は第一級の値として扱われます。変数に格納したり、引数として渡したり、ほかの関数から返したり、関数の中にネストして定義したりできます。

関数の型

すべての関数には、パラメーターの型と戻り値の型によって定義される型があります: ```swift func add(_ a: Int, _ b: Int) -> Int { a + b } let operation: (Int, Int) -> Int = add print(operation(3, 4)) // 7 ``` `add` の型は `(Int, Int) -> Int` です。

関数を引数として渡す

```swift func apply(_ f: (Int) -> Int, to value: Int) -> Int { f(value) } func double(_ n: Int) -> Int { n * 2 } print(apply(double, to: 5)) // 10 ``` これは `map` や `filter` のような高階関数の基礎となる仕組みです。

関数を返す

```swift func multiplier(by factor: Int) -> (Int) -> Int { return { value in value * factor } } let triple = multiplier(by: 3) print(triple(7)) // 21 ``` 関数を返すと、`factor` をキャプチャする *クロージャ* が作成されます。

ネストした関数

関数はほかの関数の中に定義できます: ```swift func chooseStep(goForward: Bool) -> (Int) -> Int { func forward(_ n: Int) -> Int { n + 1 } func backward(_ n: Int) -> Int { n - 1 } return goForward ? forward : backward } let step = chooseStep(goForward: true) print(step(3)) // 4 ```

短縮構文としてのクロージャ

名前のないクロージャリテラルは、任意の関数型の代わりに使用できます: ```swift let square: (Int) -> Int = { $0 * $0 } print(square(6)) // 36 let doubled = [1, 2, 3].map { $0 * 2 } // [2, 4, 6] ``` `$0` は、短縮クロージャ構文における最初の引数を表します。

コレクションへの関数の格納

```swift let operations: [(Int, Int) -> Int] = [ { $0 + $1 }, { $0 - $1 }, { $0 * $1 } ] for op in operations { print(op(10, 3)) } // 13, 7, 30 ```

トレーリングクロージャ構文

最後の引数が関数の場合、その関数を丸括弧の外に記述できます: ```swift func withLogging(_ label: String, action: () -> Void) { print("Start: \(label)") action() print("End: \(label)") } withLogging("fetch") { fetchData() } ```

関数の同一性と等価性

Swift では、2 つの関数値を `==` で比較できません。関数は Equatable ではないためです: ```swift // let same = add == add ❌ ``` 比較する必要がある場合は、関数を Equatable に準拠する構造体またはクラスでラップしてください。

カリー化パターン

部分適用した関数を返すことで、カリー化を再現できます: ```swift func add(_ a: Int) -> (Int) -> Int { { b in a + b } } let add5 = add(5) print(add5(3)) // 8 print(add5(10)) // 15 ``` 汎用的な関数から特化した関数を作成する場合に便利です。

理解度チェック

2 つの `Int` を受け取り、`Int` を返す関数の関数型は何ですか?

まとめ

要点: • 関数には `(ParamTypes) -> ReturnType` のような型があります • 変数に格納したり、引数として渡したり、関数から返したりできます • クロージャ(`{ }`)は名前のない関数値です • トレーリングクロージャ構文を使うと、呼び出し側を簡潔にできます • 関数から関数を返すと、変数をキャプチャするクロージャが作成されます 次は、オプショナルチェーンとアンラップのレッスンです。

よくある質問

「第一級値としての関数」レッスンは無料ですか?

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

「第一級値としての関数」で何を学びますか?

関数を変数に保存し、引数として渡し、関数から返す方法を学びます。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「第一級値としての関数」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. 引数ラベルとパラメータ名
  2. デフォルト引数と可変長引数
  3. In-Outパラメータと複数の戻り値
  4. 第一級値としての関数
← Swift Academyに戻る