Swift Academy · レッスン

OptionalのNil合体と三項演算子

デフォルト値に??を使い、Nil合体演算子を連鎖させます。

レッスン 2/412 ステップ

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

ようこそ

nil 合体演算子 `??` は、オプショナルが nil の場合にデフォルト値を提供します。三項演算子と組み合わせることで、簡潔で表現力の高いオプショナル処理ができます。

?? 演算子

```swift let name: String? = nil let display = name ?? "Guest" print(display) // "Guest" let known: String? = "Alice" print(known ?? "Guest") // "Alice" ``` オプショナルが nil ではない場合はアンラップした値が使われ、それ以外の場合はデフォルト値が使われます。

短絡評価

`??` の右辺は、左辺が nil の場合にだけ評価されます: ```swift func expensiveDefault() -> String { print("Computing...") return "Default" } let val: String? = "Existing" let result = val ?? expensiveDefault() // expensiveDefault not called ```

?? の連結

複数の `??` 演算子を連結して、いくつかの代替値を順に試せます: ```swift let primary: String? = nil let secondary: String? = nil let fallback = "Anonymous" let user = primary ?? secondary ?? fallback print(user) // "Anonymous" ``` 最初に nil ではない値が見つかった時点で評価が止まります。

計算プロパティでの ??

```swift struct Config { var theme: String? var displayTheme: String { theme ?? "light" } } var c = Config() print(c.displayTheme) // "light" c.theme = "dark" print(c.displayTheme) // "dark" ``` 計算プロパティでデフォルト値を扱う、簡潔なパターンです。

オプショナルでの三項演算子

三項演算子 `condition ? a : b` は、オプショナルの確認にも使えます: ```swift let score: Int? = 85 let label = score != nil ? "\(score!)" : "No score" ``` ただし、通常は `??` のほうが簡潔です: ```swift let label = score.map { "\($0)" } ?? "No score" ```

変換のための Optional.map

アンラップせずに、オプショナルがラップしている値を変換します: ```swift let maybeInt: Int? = 42 let maybeStr = maybeInt.map { "Value: \($0)" } // Optional("Value: 42") let nilInt: Int? = nil let nilStr = nilInt.map { "Value: \($0)" } // nil ```

オプショナルチェーンのための flatMap

変換処理自体がオプショナルを返す場合は、`flatMap` を使います: ```swift let str: String? = "123" let num = str.flatMap { Int($0) } // Optional(123) let bad: String? = "abc" let nil2 = bad.flatMap { Int($0) } // nil ```

??= 代入演算子(組み込みではありません)

Swift には `??=` が組み込まれていませんが、再現することはできます: ```swift var cache: [String: Int] = [:] // Assign only if nil: if cache["key"] == nil { cache["key"] = expensiveCompute() } // Or with a helper: func ??= (lhs: inout T?, rhs: @autoclosure () -> T) { if lhs == nil { lhs = rhs() } } ```

可読性に関するガイドライン

適切な方法を選んでください: • `??` — 単純なデフォルト値 • `if let` — アンラップした値を複数の文で使う場合 • `guard let` — 前提条件の確認と早期終了 • `.map` / `.flatMap` — アンラップせずに変換する場合 nil になることが本当にない場合を除き、`!` による強制アンラップは避けてください。

理解度チェック

`optional` が `nil` の場合、`optional ?? default` は何を返しますか?

まとめ

要点: • `a ?? b` — `a` が nil ではなければその値を返し、nil なら `b` を返します • 短絡評価されるため、`b` は `a` が nil の場合にだけ評価されます • `a ?? b ?? c` のように連結できます • `.map` はラップされた値を変換し、`.flatMap` は変換結果が Optional になる場合に対応します • 三項演算子と強制アンラップの組み合わせより、`??` を優先してください 次は、`?.` を使ったオプショナルチェーンです。
無料で開始

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

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

コース
122
レッスン
409

よくある質問

「OptionalのNil合体と三項演算子」レッスンは無料ですか?

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

「OptionalのNil合体と三項演算子」で何を学びますか?

デフォルト値に??を使い、Nil合体演算子を連鎖させます。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「OptionalのNil合体と三項演算子」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. if letとguard letによるバインディング
  2. OptionalのNil合体と三項演算子
  3. Optional Chaining ?. 演算子
  4. 暗黙的アンラップOptionalと避けるべき場面
← Swift Academyに戻る