プロパティ
プロパティ(英語:Property)とは、オブジェクト指向プログラミング言語において、クラスの製作者からはメンバメソッドに見え、クラスの利用者からはメンバ変数に見える機能のことである。
なお、Objective-Cでは他の言語でいうインターフェイスの亜種であり、完全に別ものである点に注意する必要がある。
概要[編集 | ソースを編集]
プロパティを持たないオブジェクト指向なプログラミング言語では、メンバ変数へ安全にアクセスさせるためにはゲッターやセッターなどと呼ばれるアクセサメソッドを利用する必要があった。クラス製作者からすると安全性のためにも入出力チェックを実装できるアクセサメソッドの利用を強制させたいが、クラス利用者からするとアクセサメソッドは見た目が数式っぽくなくソースコードの見通しが非常に悪くなるという問題点を抱えていた。
その問題点をスパッと解決してくれるのがプロパティである。 無くて困るものではないが、あると嬉しい機能である。
なお、プロパティはコンパイル時にアクセサメソッドに自動展開されるマクロのようなものであり、実行時はメソッド呼び出しとなるため、メンバ変数への直接アクセスよりもパフォーマンスは悪くなる。
プロパティをサポートする主なプログラミング言語[編集 | ソースを編集]
各プログラミング言語のプロパティ構文は個別のページに記載する。
- C#
- Delphi
- Objective-C
- ActionScript 3.0
- JavaScript
- JavaScript/プロパティ - 某クソブラウザ(IE8まで)がサポートしていない関係でまったく使われていないが、実は古くからプロパティ構文がある。マイクロソフトのASP.NETの中の人が作ってるKnockout.jsのドキュメントでも同じことが書かれている[1]。
記述例[編集 | ソースを編集]
C#での一般的なプロパティの記述例を示す。 なお、C#にはプロパティの発展系として「インデクサー」という機構もある。
class Hage
{
private String _name;
public String Name {
get { return _name; }
set { _name = value; }
}
}
// こんな感じで使う。
var hage = new Hage();
hage.Name = "hoge";
ActionScript 3.0での一般的なプロパティの記述例を示す。 見てのとおり、プロパティをサポートしないプログラミング言語におけるアクセサの書き方とほぼ同じ。 それなのにプロパティとして快適に扱える。 as3マジオススメ。
class Hage
{
private var _name:String;
public function get name():String {
return _name;
}
public function set name(value:String):void {
_name = value;
}
}
// こんな感じで使う
var hage = new Hage();
hage.name = "hage";
関連項目[編集 | ソースを編集]
参考文献[編集 | ソースを編集]
- ↑ http://knockoutjs.com/documentation/observables.html Reading and writing observablesの項