Swift Academy · レッスン

純粋関数と副作用のない設計

同じ入力に対して常に同じ出力を返す関数を記述します。

レッスン 1/412 ステップ

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

ようこそ

純粋関数は、同じ入力に対して常に同じ出力を返し、副作用を発生させません。純粋関数は、Swiftにおける関数型プログラミングの基礎となります。

純粋関数の定義

次の条件を満たす関数は純粋関数です: • 同じ入力からは常に同じ出力が得られる • 観測可能な副作用がない(変更、I/O、グローバル状態がない) ```swift func add(_ a: Int, _ b: Int) -> Int { a + b } // pure ```

不純な関数の例

```swift var total = 0 func addToTotal(_ n: Int) { total += n } // impure — mutates global ``` この関数を`5`で2回呼び出すと、異なるコンテキストで呼び出した場合に異なる結果になります。

参照透過性

純粋関数の呼び出しは、プログラムの動作を変えずに、その結果で置き換えられます: ```swift let result = add(2, 3) // same as writing 5 ```

純粋関数のメリット

• テストしやすい — セットアップや後処理が不要です • 並列化しても安全 — 共有状態がありません • 合成しやすい — 副作用を気にせず連結できます • キャッシュ可能 — メモ化を安全に行えます

Swiftの値型が純粋性を実現する

structのメソッドはコピーを受け取るため、自然に純粋な処理になりやすい性質があります: ```swift struct Vector { var x, y: Double } func scaled(_ v: Vector, by f: Double) -> Vector { Vector(x:v.x*f, y:v.y*f) } ```

副作用を分離する

副作用はシステムの境界に寄せます: ```swift // Pure core logic: func processOrders(_ orders: [Order]) -> Invoice { ... } // Impure at the edge: func run() { let inv = processOrders(load()); save(inv) } ```

純粋関数とテスト

```swift func test() { let result = add(2, 3) assert(result == 5) // no mocks needed! } ``` 純粋関数ではmockオブジェクトは必要ありません。呼び出してアサートするだけです。

実例

```swift func discountedPrice(base: Double, discount: Double) -> Double { base * (1 - discount) } let final = discountedPrice(base: 100, discount: 0.2) // 80.0 ```

純粋関数を合成する

```swift func double(_ n: Int) -> Int { n * 2 } func addOne(_ n: Int) -> Int { n + 1 } let transform: (Int) -> Int = { addOne(double($0)) } print(transform(5)) // 11 ```

理解度チェック

mockなしで関数をテストしやすくする性質はどれですか?

まとめ

重要なポイント: • 純粋関数:同じ入力 → 同じ出力、かつ副作用がない • 参照透過性により、結果による置き換えが可能になります • 副作用はシステムの境界に寄せます • 純粋関数は簡単にテストでき、並列化も容易です 次は、高階関数です。
無料で開始

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

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

コース
122
レッスン
409

よくある質問

「純粋関数と副作用のない設計」レッスンは無料ですか?

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

「純粋関数と副作用のない設計」で何を学びますか?

同じ入力に対して常に同じ出力を返す関数を記述します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「純粋関数と副作用のない設計」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. 純粋関数と副作用のない設計
  2. 高階関数:map、flatMap、compactMap
  3. 関数合成とパイプライン
  4. 効率化のための遅延シーケンス
← Swift Academyに戻る