0

よし、友達が少ないプロジェクトをやっていて、C++ で物事に名前を付けるための標準が必要だ。よく考えられていて、10分ほどで作成されていない、C ++の適切な命名スキームを持っている人はいますか?

たとえば、int* house は int* house_p という名前にする必要があります。これにより、誰かがコードを読むときに、ポインタ、配列、行列などであるかどうかを常にスクロールする必要がなくなります...

あなたが使用しているよく考え抜かれた命名スキームを投稿してください!

4

6 に答える 6

19

たとえば、int*houseにはint*house_pという名前を付ける必要があります。これにより、誰かがコードを読んだときに、何かがポインタ、配列、行列などであるかどうかを常にスクロールする必要がなくなります。

しかし、その型が変更された場合はどうなりますか?すべてのコードを調べて、すべての変数の名前を変更しますか?そして、変数が複合型のインスタンスである場合はどうなりますか?

ComplicatedDerivativeFinancialInstrument x;

どの接尾辞を使用しますか?

あなたが質問しているのはハンガリアン記法として知られています-C++でのその使用はほとんど普遍的に悪い考えであると考えられています。

于 2009-04-03T13:06:16.893 に答える
5

C ++では、コードを設計/リファクタリングするときに、ポインター(int*)から参照(int&)に変更するのが一般的です。変数名にポインターであることを示す接尾辞を含めて繰り返した場合は、それを別の場所に変更する必要があります。これは非常に無意味な作業のように思われるため、コードを編集して必要なものに形作るのが難しくなります。

そのようなリマインダーは必要ありません。たとえば、変数がポインタであるかどうかは、使用法から非常に明確になります。

于 2009-04-03T13:09:47.243 に答える
1

そこには良い命名規則がありますが、変数の名前に含まれる型情報(1つの形式はハンガリアン記法と呼ばれます)はあまり人気がなくなってきています。最新のIDEのほとんどは、変数の型など、変数にマウスを合わせるだけで、変数に関する有用な情報を提供します。しかし、それがあなたにとって重要であるならば、ハンガリアン記法はおそらくあなたが望むものです。

于 2009-04-03T13:06:53.337 に答える
1

ニールとアーロニスが述べたように、あなたはハンガリアン記法の形式について話している。C ++は強く型付けされた言語であるため、一般的には悪い考えと見なされます。邪魔になる余分な文字がたくさんあるため、コードが読みにくくなります。

元のハンガリアン記法は、実際には、タイプが伝えた以上の情報を伝えるために使用されていました。たとえば、グラフィックスの作業を行っていて、さまざまな座標系にポイントがあるとします。これらはすべてPointタイプですが、オブジェクト座標にあるもの、カメラ座標にあるもの、ワールド座標にあるものがあります。その場合、それぞれの変数にoPt、cPt、wPtなどの名前を付けるのが理にかなっています。

歴史的に、この「アプリ」ハンガリー語は、一部の人々にとっては良いアイデア(非タイプ情報を示す追加の文字コード)のように見え、彼らはそれを「システム」ハンガリー語(C ++タイプを示す追加の文字コード)に変えすぎました。最近は眉をひそめています。

于 2009-04-03T13:13:34.270 に答える
0

原則として、解決しようとしている現実世界の問題の言語を使用します。外の世界にとって意味のある、適切でわかりやすい識別子を使用すると、コード自体が文書化されます。

構文に関しては、読み取り可能で、識別子に関する情報を伝えますが、実装に縛られることのない規則を選択してください。シンプルで覚えやすいものにすることで、コーダーはコーディングにより多くの時間を費やすことができ、複雑な構文要件に従う時間を減らすことができます。私は、次のことは非常に見やすく、十分に有益だと思います。

  • クラスとメソッドの定義 - 最初の文字を大文字にし、連結された単語の最初の文字も大文字にする
  • オブジェクト インスタンスと関数の引数 - 最初の文字が小文字で、連結された単語の最初の文字が大文字
  • クラス データ フィールド - 末尾のアンダースコア、最初の英字は小文字、連結された単語の最初の文字は大文字

残念ながら10分テストには合格しないと思いますが、説明に10分以上かかる場合は、実際の作業に支障をきたしている可能性があります。

class FooProblem {
  int fooData_;
  public:
  FooProblem(int fooData): fooData_(fooData){}
};
于 2009-04-03T14:17:40.280 に答える