メインメニューを開く

差分

プロパティ

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