「プロパティ」の版間の差分

提供:MonoBook
imported>Administrator
編集の要約なし
編集の要約なし
 
(2人の利用者による、間の15版が非表示)
1行目: 1行目:
'''プロパティ'''(Property)とは、[[クラス]]の製作者からは[[メンバメソッド]]に見え、[[クラス]]の利用者からは[[メンバ変数]]に見える機能のことである。
'''プロパティ'''([[英語]]: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;


34行目: 37行目:
     }
     }
}
}
// こんな感じで使う。
var hage = new Hage();
hage.Name = "hoge";
</source>
</source>


41行目: 48行目:
[[as3]]マジオススメ。
[[as3]]マジオススメ。
<source lang="actionscript3">
<source lang="actionscript3">
class Hage {
class Hage  
 
{
     private var _name:String;
     private var _name:String;


53行目: 60行目:
     }
     }
}
}
// こんな感じで使う
var hage = new Hage();
hage.name = "hage";
</source>
</source>


== 関連項目 ==
== 関連項目 ==
* [[スライス]]
* [[インデクサー]]
* [[アクセサ・メソッド]]
== 参考文献 ==
== 参考文献 ==
<references/>
{{reflist}}
== 外部リンク ==


{{stub}}
{{stub}}

2014年10月8日 (水) 09:32時点における最新版

プロパティ英語:Property)とは、オブジェクト指向プログラミング言語において、クラスの製作者からはメンバメソッドに見え、クラスの利用者からはメンバ変数に見える機能のことである。

なお、Objective-Cでは他の言語でいうインターフェイスの亜種であり、完全に別ものである点に注意する必要がある。

概要[編集 | ソースを編集]

プロパティを持たないオブジェクト指向プログラミング言語では、メンバ変数へ安全にアクセスさせるためにはゲッターセッターなどと呼ばれるアクセサメソッドを利用する必要があった。クラス製作者からすると安全性のためにも入出力チェックを実装できるアクセサメソッドの利用を強制させたいが、クラス利用者からするとアクセサメソッドは見た目が数式っぽくなくソースコードの見通しが非常に悪くなるという問題点を抱えていた。

その問題点をスパッと解決してくれるのがプロパティである。 無くて困るものではないが、あると嬉しい機能である。

なお、プロパティはコンパイル時にアクセサメソッドに自動展開されるマクロのようなものであり、実行時はメソッド呼び出しとなるため、メンバ変数への直接アクセスよりもパフォーマンスは悪くなる。

プロパティをサポートする主なプログラミング言語[編集 | ソースを編集]

各プログラミング言語のプロパティ構文は個別のページに記載する。

記述例[編集 | ソースを編集]

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";

関連項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]

  1. http://knockoutjs.com/documentation/observables.html Reading and writing observablesの項