0Pricing
Swift Academy · レッスン

In-Outパラメータと複数の戻り値

inoutで引数を変更し、タプルで複数の値を返します。

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

はじめに

Swiftの関数は通常、値のコピーを使って処理します。`inout`パラメータを使うと、関数から呼び出し側の変数を直接変更できます。タプルを使うと、関数から複数の値を一度に返せます。

inoutキーワード

パラメータに`inout`を指定すると、元の値を変更できます: ```swift func doubleInPlace(_ value: inout Int) { value *= 2 } var x = 5 doubleInPlace(&x) print(x) // 10 ``` 呼び出し側の`&`接頭辞は、その変数が変更される可能性を示します。

構造体でのinout

```swift struct Point { var x: Double; var y: Double } func translate(_ p: inout Point, dx: Double, dy: Double) { p.x += dx p.y += dy } var origin = Point(x: 0, y: 0) translate(&origin, dx: 3.0, dy: 4.0) // origin is now (3.0, 4.0) ```

inoutの制限

• 定数(`let`)を`inout`として渡すことはできません • リテラルを`inout`として渡すことはできません • セッターを持つ添字や計算プロパティは`inout`として使用できます ```swift let c = 5 doubleInPlace(&c) // ❌ cannot pass let as inout ```

タプルによる複数の値の返却

複数の値をタプルにまとめることで返却できます: ```swift func minMax(of array: [Int]) -> (min: Int, max: Int) { (array.min()!, array.max()!) } let result = minMax(of: [3, 1, 7, 2]) print(result.min, result.max) // 1 7 ```

名前付きタプル要素と名前なしタプル要素

名前付き要素を使うと、タプルの内容をコードから読み取りやすくなります: ```swift let named: (width: Int, height: Int) = (1920, 1080) print(named.width) // 1920 let unnamed = (1920, 1080) print(unnamed.0) // 1920 ``` 関数から返すタプルには、名前を付けることをおすすめします。

タプル戻り値の分解

タプルの戻り値を複数の変数に展開します: ```swift let (minimum, maximum) = minMax(of: [5, 3, 8]) print(minimum) // 3 print(maximum) // 8 ``` 不要な要素を破棄するには `_` を使います:`let (minimum, _) = minMax(of: arr)`。

オプショナルなタプル戻り値

失敗する場合は nil を返します: ```swift func parse(_ s: String) -> (Int, Int)? { let parts = s.split(separator: ",") guard parts.count == 2, let a = Int(parts[0]), let b = Int(parts[1]) else { return nil } return (a, b) } ```

inout を使った swap

inout を使った典型的な入れ替え処理です: ```swift func swap(_ a: inout T, _ b: inout T) { let temp = a a = b b = temp } var m = 1, n = 2 swap(&m, &n) print(m, n) // 2 1 ``` Swift の標準ライブラリにはすでに `swap(_:_:)` が用意されているため、自分で書く必要はありません。

inout と戻り値の使い分け

inout で変更するよりも、新しい値を返す方法を優先してください: ```swift // Prefer: func normalised(_ v: SIMD3) -> SIMD3 { v / v.magnitude } // Use inout only when mutation is expected API contract, e.g. algorithms on large arrays func sort(_ arr: inout [Int]) { arr.sort() } ```

理解度チェック

`inout` パラメーターに変数を渡すとき、呼び出し側で必要な接頭辞は何ですか?

まとめ

要点: • `inout` を使うと、関数から呼び出し元の変数を変更できます。渡すときは `&` を付けます • `let` 定数やリテラルは inout として渡せません • タプルを使うと、複数の値をわかりやすく返せます。明確にするために要素に名前を付けます • タプルを分解します:`let (a, b) = f()` • 新しい値を返す方法を優先し、変更が API の契約になっている場合だけ inout を使います 次は、第一級の値としての関数です。

よくある質問

「In-Outパラメータと複数の戻り値」レッスンは無料ですか?

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

「In-Outパラメータと複数の戻り値」で何を学びますか?

inoutで引数を変更し、タプルで複数の値を返します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「In-Outパラメータと複数の戻り値」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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