最新版 |
編集中の文章 |
1行目: |
1行目: |
− | '''プロパティ'''([[英語]]:Property)とは、[[オブジェクト指向プログラミング言語]]において、[[クラス]]の製作者からは[[メンバメソッド]]に見え、[[クラス]]の利用者からは[[メンバ変数]]に見える機能のことである。 | + | '''プロパティ'''(Property)とは、[[クラス]]の製作者からは[[メンバメソッド]]に見え、[[クラス]]の利用者からは[[メンバ変数]]に見える機能のことである。 |
| | | |
− | なお、[[Objective-C]]では他の[[言語]]でいう[[インターフェイス]]の亜種であり、完全に別ものである点に注意する必要がある。
| + | プロパティを持たない[[オブジェクト指向]]な[[プログラミング言語]]では、メンバ変数へ安全にアクセスさせるためには[[ゲッター]]や[[セッター]]などと呼ばれる[[アクセサメソッド]]を利用する必要があった。 |
| | | |
− | == 概要 ==
| + | クラス製作者からすると安全性のためにも入出力チェックを実装できる[[アクセサメソッド]]の利用を強制させたいが、クラス利用者からすると[[アクセサメソッド]]は見た目が数式っぽくなく[[ソースコード]]の見通しが非常に悪くなるという問題点を抱えていた。 |
− | プロパティを持たない[[オブジェクト指向]]な[[プログラミング言語]]では、メンバ変数へ安全にアクセスさせるためには[[ゲッター]]や[[セッター]]などと呼ばれる[[アクセサメソッド]]を利用する必要があった。クラス製作者からすると安全性のためにも入出力チェックを実装できる[[アクセサメソッド]]の利用を強制させたいが、クラス利用者からすると[[アクセサメソッド]]は見た目が[[数式]]っぽくなく[[ソースコード]]の見通しが非常に悪くなるという問題点を抱えていた。
| |
| | | |
| その問題点をスパッと解決してくれるのがプロパティである。 | | その問題点をスパッと解決してくれるのがプロパティである。 |
− | 無くて困るものではないが、あると嬉しい機能である。
| + | 無くて困るものではない。 |
| | | |
− | なお、プロパティは[[コンパイル]]時に[[アクセサメソッド]]に自動展開される[[マクロ]]のようなものであり、実行時はメソッド呼び出しとなるため、[[メンバ変数]]への直接アクセスよりもパフォーマンスは悪くなる。
| + | なお、プロパティはコンパイル時にアクセサメソッドに自動展開される[[マクロ]]のようなものであり、実行時はメソッド呼び出しとなるため、メンバ変数への直接アクセスよりもパフォーマンスは悪くなる。 |
| | | |
| == プロパティをサポートする主なプログラミング言語 == | | == プロパティをサポートする主なプログラミング言語 == |
16行目: |
15行目: |
| ** [[C Sharp/プロパティ|C#/プロパティ]] | | ** [[C Sharp/プロパティ|C#/プロパティ]] |
| * [[Delphi]] | | * [[Delphi]] |
− | ** [[Delphi/プロパティ]] | + | ** [[Delphi/プロパティ|C#/プロパティ]] |
| * [[Objective-C]] | | * [[Objective-C]] |
| ** [[Objective-C/プロパティ]] | | ** [[Objective-C/プロパティ]] |
| * [[ActionScript 3.0]] | | * [[ActionScript 3.0]] |
| ** [[ActionScript 3.0/プロパティ]] | | ** [[ActionScript 3.0/プロパティ]] |
− | * [[JavaScript]] | + | * [[Ruby]] |
− | ** [[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>
| |
| | | |
| == 関連項目 == | | == 関連項目 == |
− | * [[スライス]]
| |
− | * [[インデクサー]]
| |
− | * [[アクセサ・メソッド]]
| |
− |
| |
| == 参考文献 == | | == 参考文献 == |
− | {{reflist}}
| + | <references/> |
| + | == 外部リンク == |
| | | |
| {{stub}} | | {{stub}} |