/* Page prose (ja) */
"DistributedCodableArguments" = "# 引数と戻り値がなぜ `Codable` でなければならないのか\n\nローカルのメソッド呼び出しは、引数を共有メモリ内の参照または値として渡します。呼び出される側はまったく同じオブジェクトを見ます。分散呼び出しはそれができません。呼び出される側は別のマシンにいるかもしれず、あなたのメモリにアクセスできません。ですから、あらゆる引数とあらゆる戻り値は、**バイトに変換され、向こうへ送られ、反対側で再構築され**なければなりません。\n\nだからこそ、分散メソッドのパラメータと戻り値の型は、actor システムの**シリアライズ要件**（`ClusterSystem` とほとんどのシステムでは、それは **`Codable`**）に準拠しなければなりません。\n\n```swift\n// A Codable payload can cross the wire; a non-Codable one can't.\nstruct Receipt: Codable, Sendable {\n    let id: UUID\n    let amount: Int\n    let newBalance: Int\n}\n\ndistributed actor Ledger {\n    typealias ActorSystem = ClusterSystem\n\n    private var balance = 0\n\n    distributed func deposit(_ amount: Int) -> Receipt {\n        balance += amount\n        return Receipt(id: UUID(), amount: amount, newBalance: balance)\n    }\n}\n```\n\n`Int` と `Receipt` は `Codable` なので、旅をすることができます。エンコードでき*ない*もの（生きたデータベースハンドル、クロージャ、`Codable` 準拠のないクラス）を渡したり返したりしようとすると、コンパイラが止めます。生きたファイルハンドルを封筒に入れて別のコンピュータへ郵送する方法は、まったく存在しないのです。\n\n> **これは [グローバル actor と Sendable](Global%20Actors%20and%20Sendable.playgroundchapter/Overview) の章の `Sendable` を、もう一歩進めたものです。** `Sendable` はこう問います。*この値を同じプロセス内の別のタスクに渡しても安全か？* `Codable`（分散の要件として）はより厳しい問いを立てます。*この値をバイトへと平らにして、別のプロセスで再構築できるか？* actor システムの境界をまたぐものはすべて両方を必要とします。移動しても安全であり、*かつ*シリアライズが可能であること。上の `Receipt` がそうしているように、ペイロードの型に `Codable, Sendable` をまとめて印づけるのが一般的なイディオムです。\n\n* callout(考えてみよう): 自分のモデル型のどれか 1 つを見回してみましょう。そのプロパティのうち、どれが喜んで回線を越え、どれ（生きた接続、キャッシュされた画像、クロージャ）を家に残して代わりにプレーンなデータで記述しなければならないでしょうか。\n\n[前へ](@previous)  |  6 / 9 ページ  |  [次へ: 位置透過性](@next)";
