Skip to content

Commit

Permalink
Merge pull request #15 from kaseken/kaseken/fix-typo-1
Browse files Browse the repository at this point in the history
Fix typo in protocol-oriented-programming/index.md
  • Loading branch information
koher authored Aug 22, 2024
2 parents 1468140 + 2619fd1 commit 6c94b49
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion protocol-oriented-programming/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ print(MemoryLayout.size(ofValue: animal)) // 40

1 バイトか 4 バイトの値を格納するだけなら 4 バイトあれば十分なように思えます。なぜ 40 バイトもの領域が必要なのでしょうか。

`Animal` 型変数に格納できるのは `Cat``Dog` のインスタンスだけではありません。 `Aniaml` 型として考えると、 `Animal` に適合した任意の型のインスタンスを格納できなければなりません。しかし、 `Animal` に適合した型は、理論上いくらでも大きくできます。たとえば、 1 バイトの Stored Property を 1,000 個持たせれば 1,000 バイトになります。単純に大きな領域を用意するだけでは任意の型のインスタンスを格納することはできません。
`Animal` 型変数に格納できるのは `Cat``Dog` のインスタンスだけではありません。 `Animal` 型として考えると、 `Animal` に適合した任意の型のインスタンスを格納できなければなりません。しかし、 `Animal` に適合した型は、理論上いくらでも大きくできます。たとえば、 1 バイトの Stored Property を 1,000 個持たせれば 1,000 バイトになります。単純に大きな領域を用意するだけでは任意の型のインスタンスを格納することはできません。

そのため、プロトコル型変数にインスタンスを格納する際には、 **_Existential Container_** という特殊な入れ物が用いられます。 _Existential Container_ は任意のサイズのインスタンスを格納できる入れ物です。インスタンスは _Existential Container_ に入れられた上で変数に格納されます。上記の例では _Existential Container_ のサイズが 40 バイトなので、 `animal` のサイズも 40 バイトとなっています。

Expand Down

0 comments on commit 6c94b49

Please sign in to comment.