UnityLearn Scripting Tutorials -Interfaces-日本語
UnityLearnのチュートリアルを日本語に翻訳しました。
素人の翻訳なので間違いがあると思います。
間違いを見つけた人はコメントでおしえていただけると嬉しいです。
インターフェースは機能間の繋がりと考えることができます。
インターフェースを実装するクラスは、そのインターフェースの全てのメソッド、プロパティを必ず持たなければなりません。
その代わりに、実装したクラスはポリモーフィズムを使うことで他のクラスと一緒にインターフェースのように扱うことができます。
注意することは、インターフェースはクラスではないので、インスタンスを持つことができないということです。
継承は Is-A関係であり、1つのクラスが別のクラスから継承されますが、インターフェースは実装関係(Implements relationship)であり、1つのクラスがインターフェースを実装します。
インターフェースは通常、クラス外部で宣言されます。
インターフェースを宣言するときは、1つのインターフェースにつき1つのスクリプトを使います。
しかし、今回の例では、同じスクリプトに2つ書きます。
慣例的に、インターフェース名前は大文字の「I」で初め、その後に別の大文字で始まる名前を続けて宣言します。
インターフェースは通常、実装クラスの持つ機能を記述するので、多くのインターフェースは接尾辞「-able」で終わります。
ただし、インターフェースを必ず使わなければならない、という事はなく、インターフェースによっては誤解を招く恐れもあります。
ここでは、IKillableとIDamageableの2つのインターフェイスを宣言しています。
IKillableではKill()という関数があり、戻り値の型は「void」で、パラメーターはありません。
IKillableインターフェースを実装するクラスは、このシグネチャーに一致するパブリック関数を必ず持たなければいけません。
IDamageableインターフェイスにはジェネリック型Tがあります。
これは、インターフェース内での全てのものがジェネリック型を持つことを意味します。
IDamageableのDamage()関数はT型のパラメーターを持ちます。
クラスにジェネリック型のインターフェースを実装する場合、型を選択する必要があります。
そして、その対応した型を全体を通して使います。
インターフェースを実装するこで、必要なものを実装させられ、いくかのメリットをを得られます。
インターフェースを実装するために、実装させたいクラス内で、そのインターフェースにあるメソッド、プロパティ、イベント、インデクサ、これら全てをpublicに宣言しなければなりません。
これをしないと、エラーが発生します。
インターフェースの主な利点は、多くのクラスに共通の機能を定義できることです。
したがって、そのクラスができることを、継承したインターフェースに基づいて簡単に想像することができます。
インターフェースを実装するためには、継承しているクラスの後にコンマを加え、その後ろにインターフェース名を続けます。
継承しているクラスがない場合はコンマは必要ないです。
インターフェースがジェネリック型を持つ場合は、インターフェース名に<>を続け、その(<>)中に型を書きます。
今回の場合、MonoBehaviourを継承し、「float」型の IKillable と IDamageable を実装したAvatarクラスがあります。
私たちは実装した両方インターフェースが要求する関数を宣言しなければいけません。
注意すべきところは、その関数本体はインターフェースから独立しており、自由に実装できる、ということです。
このインターフェースの原理は、ゲーム内で全てにkillやdamageを与えたい時に役立ちます。
IKillable か IDamageable を実装した全てのものを見ても、Kill()関数 か Damage()関数 があることを確認できます。
クラスで関数を1度定義し、そのクラスを継承させればいいのに、なぜクラスにインターフェイスを実装するのか疑問に思うかもしれません。
簡単な答えは、複数のクラスは継承することができませんが、インターフェースなら複数継承できる、ということです。
したがって、インターフェースは幅広い機能を提供するには良い方法です。
しかし、より適切な答えとしては、インターフェースは互いに無関係な多くのクラスにまたがる共通した機能を定義するのに使われる、ということです。
<終>
———————————————————————
そのほかの日本語訳の記事はこちらから。
この記事が気に入ったらサポートをしてみませんか?