見出し画像

UnityLearn Scripting Tutorials -Properties- 日本語

UnityLearnのチュートリアルを日本語に翻訳したものです。
素人の翻訳なので間違いは、あると思います。
間違いを見つけた人はコメントでおしえていただけると嬉しいです。

日本語訳

他のクラスのコードから、現在のコードのメンバ変数にアクセスが必要になることは誰しもあると思います。

それを実現する1つの方法は、public な変数を作り、直接アクセスすることです。
それで十分かもしれないですが、もっと良い方法があります。

その良い方法というのがプロパティを使うことです。

プロパティ自身は変数のように振る舞い、メンバ変数をカプセル化します。これをフィールドとも呼びます。

カプセル化により外からフィールドにアクセスのタイミング、方法をより細かく制御できるようになります。

Playerというクラスにexperienceというフィールドをがあり、それに外部からアクセスしたいとします。
プロパティを作ることにしました。

プロパティの構文は次のようになっています

はじめに、アクセス修飾子を指定します

そして、型を指定し、その後ろにプロパティの名前を指定します。

良い名前の付け方は、1文字を大文字にすることを除いてフィールドの名前と同じにすることです。

それが終わったら、関数と同じように { } を置きます

この { } 中にプロパティのアクセサを書きます

プロパティは”get” , ”set”の2つのアクセサを持つことができます。

これらはプロパティが参照、割り当てられた時にそれぞれ呼ばれる関数です。

これらはget、setキーワードで宣言され、{ }が続きます。

getアクセサ内ではカプセル化したフィールドを返します。

setアクセサ内ではvalueというキーワードを用いて、フィールドに割り当てます。

これで、プロパティに必要な要素は全です

では、ほかのスクリプトから、普通にする様に、プロパティを使って、フィールドの代わりにアクセスしてみましょう。

public修飾子変数にをつければいいだけなのに、なぜプロパティを利用するのか疑問に思ってるかもしれません。

それには2つ、プロパティにはできて、publicな変数にはできないことがあります。

1つはget か set を省略して、効果的にwrite-only、read-onlyにするこどができることです。

もし、フィールドがプライベートだったら、getアクセサがなければ読み取ることができないし、setアクセサがなければ、書き込む(代入する)ことができません。

2つ目は、アクセサを関数のように扱えるということです。

というのは、アクセサの中で、ほかのコードを実行したり、ほかの関数を呼び出すことができるのです。

この考えを拡張すると、setアクセサ内でコルーチンをスタートさせることができます。

カプセル化したフィールドは直接的である必要がありません。

プレイヤーが1000経験値貰った時にレベルアップするゲームを考えます。

もし、経験値を表すフィールドがあれば、プレイヤーのレベルを表すプロパティを持つことができます

レベルのプロパティのgetアクセサは経験値を返す代わりに1000ごとにレベルを返します。

このようにプロパティはプレイヤーの持つ経験値を返さず、レベルの値を返すことができます。

さらに、レベルプロパティはsetアクセサを持てるのでプレイヤーのもらった経験値を計算し、経験値フィールドに集計、保存することができます。

プロパティのもう1つの特徴はプロパティを自動実装できることです。

自動実装プロパティを作るためには、省略構文はを使います。

この構文では、getアクセサとsetアクセサの後にセミコロンを続けるだけです

このようにしてプロパティを作ると、フィールドのように振る舞わせることができ、getかsetのアクセサを取り除くだけで、read-onlyかget-onlyにできます。

VisualStudioを使うときはサポート機能を使って、このプロパティを素早く書くことができます。

その方法は”prop”と打ってtabキーを押すと、自動的にプロパティを挿入できます。

<終>
———————————————————————

Summary

・プロパティを使うことで、自身のprivateなメンバに安全にアクセスできるようになります。
・アクセス制限(アクセスレベル変更)が簡単にできるようになります。
・アクセサを関数のように使えるようになり、柔軟なコードが書けるようになります。

———————————————————————

そのほかの日本語訳の記事はこちらから。


この記事が気に入ったらサポートをしてみませんか?