/* Page prose (ja) */
"ActorIsolation" = "# actor 分離（isolation）: 外は `await`、内は同期\n\n外から残高を読んだ方法をもう一度見てみましょう。`await ledger.balance` です。なぜ `await` なのでしょうか？\n\nそれは actor が**取り込み中**かもしれないからです。**外から** actor のメソッドを呼んだり、その可変状態を読んだりするとき、あなたのタスクは、今まさに中にいる誰かが終わるのを待たなければならないことがあります。その待つ可能性のある箇所がサスペンションポイント（中断ポイント）であり、Swift ではすべてのサスペンションポイントが `await` で印されます。これが **actor 分離**です。actor の可変状態は actor に*分離され*、外部の者は `await` を通してしかそこに到達できません。\n\nactor の内部では違います。actor の*中で*実行されるコードは、すでに actor を自分のものにしているので、自身の状態に**同期的に**触れます。`await` はいりません。";
"ActorIsolation-2" = "**実行して確認:** `Balance is now 50`、`Balance is now 75`、続いて `Read from outside: 75` と表示されます。パターンに注目してください。`Task` からの**すべての**アクセスが `await` を必要とし、`deposit` や `report` の内部では 1 つも必要としませんでした。actor の内部では、あなたはすでに列の先頭にいるのです。\n\n---\n\n## 保護のいらない状態のための `nonisolated`\n\nactor の中のすべてが可変状態に触れるわけではありません。不変の `let` は決して変わらないので、それを読んでも競合しません。呼び出し側に `await` させる理由もありません。そうしたメンバーを **`nonisolated`** と印して、分離から外しましょう。\n\n```swift\nactor Account {\n    let owner: String   // immutable, safe to read anytime\n    private(set) var balance: Int\n\n    init(owner: String, balance: Int) {\n        self.owner = owner\n        self.balance = balance\n    }\n\n    nonisolated var label: String {\n        \"Account for \\(owner)\"   // only reads the immutable `owner`\n    }\n\n    func deposit(_ amount: Int) {\n        balance += amount\n    }\n}\n\nlet account = Account(owner: \"Robin\", balance: 100)\nprint(account.label)   // no await, it's nonisolated\n```\n\n`label` は不変の `owner` を読むだけなので、`nonisolated` と宣言され、普通のプロパティのように呼び出せます。`await` も待ちもありません。ただし注意点があります。`nonisolated` メンバーは **actor の可変状態に触れてはいけません**。`label` の中から `balance` を読もうとすると、コンパイラはそれを拒否します。そのアクセスは保護を*必要とする*からです。そのエラーは、分離のルールがあなたを正直に保っているのです。\n\n> 上の `label` の文字列に `balance` を加えたら、コンパイラはまさにその場所でコードを拒否します。`nonisolated` メンバーは分離された状態に触れてはいけないからです。そのエラーは分離のルールが意図どおり働いているのであって、あなたのコードのバグではありません。\n\n[前へ](@previous)  |  3 / 7 ページ  |  [次へ: 再入（reentrancy）](@next)";
