プログラミング言語SwiftのStructuresとProtocolについて

 Structures(以下構造体)は定数、変数、関数の定義に使用する構文を使用して、プロパティとメソッドを定義し、機能を追加します。Classes(以下クラス)でもいいのではと思ってしまうのですが、特にクラス特有の機能が必要なければ構造体を使うことが推奨されています。

 クラスは他のクラスを継承することでプロパティとメソッドの定義を継承・追加・変更できます。さらにインスタンスという具体的なのもとして、変数に割り当てるとき、参照渡しとして、割り当てます。素敵な機能なのですが、何世代も継承されると、変更がどこに影響するかがわからなくなる可能性があったりするようです。そこが、致命的な問題のようです。そこで構造体が登場です。この子は他の構造体のプロパティとメソッドの定義を継承できません。また、インスタンスを変数に割り当てるとき値渡しとして、割り当てます。シンプルを極めた感じです。これでデバッグをしやすくした感じです。

 ところが、継承ができないと、同じ機能を持つものとして扱うことが難しくなり、汎用性が妨げられます。そこで登場するのがProtocol(以下プロトコル)です。プロトコルは特定のタスクや機能に適したメソッド、プロパティ、その他の要件の設計図を定義します。 その後、プロトコルをクラス、構造、または列挙で採用して、これらの要件の実際の実装を提供できます。 プロトコルの要件を満たす型は、そのプロトコルに準拠していると言われます。型を同じプロトコルに準拠させることで、汎用性がひろがります。

 値渡しをすることで、複雑さを避け、プロトコルに準拠させることで汎用性をました構造体はSwiftでプログラミングすることの利点だと思います。