「プロパティ」の版間の差分
imported>Administrator 編集の要約なし |
編集の要約なし |
||
| (2人の利用者による、間の12版が非表示) | |||
| 1行目: | 1行目: | ||
'''プロパティ''' | '''プロパティ'''([[英語]]:Property)とは、[[オブジェクト指向プログラミング言語]]において、[[クラス]]の製作者からは[[メンバメソッド]]に見え、[[クラス]]の利用者からは[[メンバ変数]]に見える機能のことである。 | ||
なお、[[Objective-C]]では他の[[言語]]でいう[[インターフェイス]]の亜種であり、完全に別ものである点に注意する必要がある。 | |||
== 概要 == | |||
プロパティを持たない[[オブジェクト指向]]な[[プログラミング言語]]では、メンバ変数へ安全にアクセスさせるためには[[ゲッター]]や[[セッター]]などと呼ばれる[[アクセサメソッド]]を利用する必要があった。クラス製作者からすると安全性のためにも入出力チェックを実装できる[[アクセサメソッド]]の利用を強制させたいが、クラス利用者からすると[[アクセサメソッド]]は見た目が[[数式]]っぽくなく[[ソースコード]]の見通しが非常に悪くなるという問題点を抱えていた。 | |||
その問題点をスパッと解決してくれるのがプロパティである。 | その問題点をスパッと解決してくれるのがプロパティである。 | ||
無くて困るものではないが、あると嬉しい機能である。 | |||
なお、プロパティは[[コンパイル]]時に[[アクセサメソッド]]に自動展開される[[マクロ]] | なお、プロパティは[[コンパイル]]時に[[アクセサメソッド]]に自動展開される[[マクロ]]のようなものであり、実行時はメソッド呼び出しとなるため、[[メンバ変数]]への直接アクセスよりもパフォーマンスは悪くなる。 | ||
== プロパティをサポートする主なプログラミング言語 == | == プロパティをサポートする主なプログラミング言語 == | ||
| 20行目: | 21行目: | ||
* [[ActionScript 3.0]] | * [[ActionScript 3.0]] | ||
** [[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>。 | |||
== 記述例 == | == 記述例 == | ||
| 25行目: | 28行目: | ||
なお、C#にはプロパティの発展系として「[[インデクサー]]」という機構もある。 | なお、C#にはプロパティの発展系として「[[インデクサー]]」という機構もある。 | ||
<source lang="csharp"> | <source lang="csharp"> | ||
class Hage { | class Hage | ||
{ | |||
private String _name; | private String _name; | ||
| 45行目: | 48行目: | ||
[[as3]]マジオススメ。 | [[as3]]マジオススメ。 | ||
<source lang="actionscript3"> | <source lang="actionscript3"> | ||
class Hage { | class Hage | ||
{ | |||
private var _name:String; | private var _name:String; | ||
| 64行目: | 67行目: | ||
== 関連項目 == | == 関連項目 == | ||
* [[ | * [[スライス]] | ||
* [[インデクサー]] | |||
* [[アクセサ・メソッド]] | * [[アクセサ・メソッド]] | ||
== 参考文献 == | == 参考文献 == | ||
{{reflist}} | |||
{{stub}} | {{stub}} | ||