読者です 読者をやめる 読者になる 読者になる

無限大な夢のあと

テニスとアニメが大好きな厨二病SEのブログ

Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 10章「型の設計指針」

会社で書籍を購入して頂けたので、気になるところを拾い読みしています。

Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plus)

Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plus)

簡単に自分の理解をブログにまとめたいと思います。
なお、最近iOS開発を始めて、Swiftを始めたばかりなので、ひよこレベルです。

今回は10章の「型の設計指針」がテーマです。
大きく以下の3つの章で構成されています。

  1. クラスに対する構造体の優位性
  2. クラスの継承に対するプロトコルの優位性
  3. オプショナル型の利用指針

クラスに対する構造体の優位性

「クラスに対する構造体の優位性」については、iOS開発に入る前のチュートリアルとしてDDDで掲示板を作成した際に、社内の方がコードレビューで指摘してくださり、以下のリンクを参考にすれば良いと教えていただいたのを思い出し、また記事を読んでいました。
cockscomb.hatenablog.com

この段落では以下の例が挙げられていました。

  • 参照型のクラスがもたらすバグ
  • 値型の構造体がもたらす安全性
  • クラスを利用すべき時

構造体の不要なコピーを発生させない最適化として、内部ではコピーオンライトが使われているようです。
いわゆるプロセスをフォークして子プロセスを作った時に、子プロセスが実際に使われた際に初めてメモリを確保するというのと同じ原理です。

クラスの継承に対するプロトコルの優位性

「クラスの継承に対するプロトコルの優位性」については、以下の例が挙げられていました。

  • クラスの継承がもたらす期待しない挙動
  • プロトコルによるクラスの継承の問題点と克服
  • クラスの継承を利用すべき時

クラスの継承を利用すべき時の中で、複数の型の間でストアドプロパティの実装を共有するというところでプロトコルエクステンションがよくわかっていないかったのですが、理解が深まった気がします。
また、理解が浅かったことを実感し、5章の型の構成要素も読み直しました。

オプショナル型の利用指針

「オプショナル型の利用指針」については、以下の例が挙げられていました。

  • Optional型(?)を利用すべき時
  • ImplicitlyUnwrappedOptional型(!)を利用すべき時
  • 比較検討する時

ImplicitlyUnwrappedOptional型(!)を利用すべき時の例では、サブクラスの初期化より前にスーパークラスを初期化するというところではそうだよね、納得できるなと読んでいました。
また、比較検討する時では、安全性を取るか、厳密性を取るかという点も参考になりました。

11章以降も頑張りたい。

Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plus)

Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plus)