私はC++を初めて使用し、自分自身をもっと学ぶためのゲームを作っています。
大量の変数の格納/アクセスに関するご意見をお聞かせください。
これまでに行ったことは、「重要な」変数を別々の名前空間に貼り付けて、プログラム全体でそれらにアクセスできるようにすることです。
これは良い考えですか?噛み付くために戻ってくるのではないかと強く感じています。
よろしくお願いします=]
編集:私は1年生のコンピューティングの学生ですが、Javaの経験が数年あります。C++は非常に異なります= /
私はC++を初めて使用し、自分自身をもっと学ぶためのゲームを作っています。
大量の変数の格納/アクセスに関するご意見をお聞かせください。
これまでに行ったことは、「重要な」変数を別々の名前空間に貼り付けて、プログラム全体でそれらにアクセスできるようにすることです。
これは良い考えですか?噛み付くために戻ってくるのではないかと強く感じています。
よろしくお願いします=]
編集:私は1年生のコンピューティングの学生ですが、Javaの経験が数年あります。C++は非常に異なります= /
group your variables into structs or classes. If you need to expose large amount of variables outside your class then you have to reconsider your design
データを整理するための主な武器はクラスです。クラスは、プログラムの要素を表すオブジェクトです。名前を付け、変数と関数を指定してから、プログラムにインスタンスを作成します。クラスはそのすべてのデータに責任があり、他のクラスがそれにアクセスするのを防ぐことができます。
class foo
{
public:
int iAmAPublicVariable; // <---This variable can be accessed by anyone who has access to an instance of the class
private:
int iAmAPrivateVariable; // <---- This variable can be accessed only from within the class itself.
};
クラスデータへのアクセスを制御するための優れた手法の1つは、ゲッターとセッターを使用することです。それで...
class foo
{
public:
int getImportantData();
void setImportantData(int );
private:
int importantData;
};
int foo::getImportantData()
{
//here I could put some validation to make sure that it's ok to give out importantData;
return importantData; //this will return a copy of importantData, so the original is still safe within the class
}
void foo::setImportantData(int newData)
{
//here I could put some validation to make sure that it's ok to overwrite importantData;
importantData = newData;
}
この設定では、importantDataにアクセスできる唯一の方法はgetメソッドとsetメソッドを使用することであるため、クラスはそれに何が起こるかを最終的に制御できます。
クラスはプログラムの基盤となるはずです。大量の変数がある場合は、それらが何のためにあるのか、どの関数がそれらを使用するのかを調べ、プロセスを機能の個別の領域に分割してみてください。次に、これらの領域を表すクラスを作成し、必要な変数とメソッドを提供します。コードは、より小さく、理解しやすく、安定し、デバッグしやすく、再利用しやすく、モデル化しようとしているものをより適切に表現できるようになるはずです。