ゆとりーなの日記

日記的な事を書いて行くと思はれる

ぷろぱてぃ

久々の暇日。暇日でも暇日でなくてもやることはあまり変わらないという事実。寧ろ暇日の方が何もやる気が起きないという事実。
しかしこの何日か続く暇日を無駄にするのももったいないですし、なんかしなければと思っていたところC++でシューティング作る説明が余りないっぽいのでやってみようかしらとか思ってみたり。対象はVC++win32DirectXをそのまま使うことになるんですかね。簡単だと囁かれているDXライブラリは良く分からないので。そういえばC言語だと四聖龍神録のところが有名ですね。思ってみただけなのでやんない可能性はかなり高いです。

プロパティって何が便利なのか

タイトルと記事内容が一致している奇跡が見られたところで今日の話です。C#とかにはプロパティってのがあります。privateメンバ変数だけど、publicメンバ変数の様にアクセス出来る機能の事です。

using System;

class Toki {
private int hp_;
public  int hp {
  set {this.hp_ = value;}
  get {return this.hp_;}
}
}

class Battle {
static void main() {
  Toki toki = new Toki();
  toki.hp = 10000; // 値設定もメンバ変数アクセスっぽい
  Console.Write("トキ:HP = ", toki.hp); // 値取得もメンバ変数アクセスっぽい
}
}

雰囲気こんな感じの事が出来るんです。C#は書いたことないんでどこか間違ってるかもしれませんが。
で、これが便利だとする主張は以下の通りです。

  • メンバ変数の数だけgetなにがし、setなにがしがあるのはうざい
  • メンバ変数はprivateであって欲しいが、値の取得、設定はpublicの時見たく書きたいしそのほうが見栄えがいい

一番目については、プロパティの宣言にも何かしら書く訳だからそんなにうざさは変わらないと思います。そして2番目、私がプロパティを余り好きではない理由です。個人的には、メンバ変数へのアクセスがアクセッサを介することで、この変数はprivateでアクセッサを使って値を操作するので安心だな〜と思うところがあるわけです。それをpublicメンバ変数とおんなじような書式にされたらなんだか訳分からなくなるんです。慣れの問題の様な気もしますがね。まあpublicメンバ変数をクラス利用者が嫌うのは、クラス作成者がそのメンバ変数に値チェックを付けてから使わせたいとか思いだした時に突如アクセッサ化されると困るというところですよね。だからその時にも利用者のソース変更の必要がないように初めからアクセッサにしておけという話です。その意味では、プロパティはこの用件を満たしているので、クラス利用者としては困ることはないんですよね。実は。
C++にはプロパティの機能はありません。私は別に欲しいとは思いません。しかしCプラーとしては、プロパティっぽいことを実現するものを作りたいと思うのが残当です。ざっと調べたところ、マクロを駆使する方法とテンプレートを駆使する方法があるみたいですね。ちらっと見たところによると、マクロの方は矢張りCプラーはマクロ嫌いが多い、テンプレートはその性質上コンパイル時間が長引くといった懸案があるみたいです。