web-dev-qa-db-ja.com

Java命名規則とC ++ / C命名規則の比較

私はa Java開発者であり、ますますC++/Cを取り上げ始めています(そう、私はそれらが異なることを知っているので、我慢してください)。これらの言語で使用されている命名規則。Javaでは、次のようなものがよく見られます。

int someVariable = someFunction(someParameterToPass);

ただし、C++/Cでは少し異なります。

int some_variable = some_function(some_parameter_to_pass);

私が尋ねる理由は、私(単独で、チームではない)がC++を使用して大規模なプロジェクトを開始したばかりで、現在Java命名規則をコードで使用しているためです(これは私が慣れていることです) )しかし、いくつかの外部ライブラリをコードに追加すると、命名規則が混在します。コードは簡単に理解でき、その違いを使用して、コードをライブラリコードと区別します。

読みやすさのために(LOCが比較的低い間)他の人に名前付け規則を切り替える必要がありますか、または(私が唯一の開発者であるため)現在実行していることに固執する必要がありますか?

注-私のコードはピアレビューされましたが、レビュー担当者は主にコードの機能に焦点を合わせました。彼らは混合された慣習に言及しなかった、そして私は特にこれについて彼らに尋ねなかった。また、命名規則を切り替える経験もありませんでした。

6
syb0rg

ここで、スタイルに基づいたコーディング標準の大きな問題を見つけます。チームがコードベース全体を作成しない場合、他のコードの標準との不一致があることがわかります。

だから、私のアドバイスはそれを発汗しないことです。コードが明確である限り、キャメルケース、Pascalケース、アンダースコアスタイルのどちらを使用しても問題はありません。コードが読みやすいことがより重要です。

サードパーティのスタイルは決して変更しないでください。新しいバージョンとの比較が不可能になるため、それらに固執する必要があります。 2つの異なるスタイルのライブラリがある場合は、コードスタイルを無視する標準に従うしかありません。あなたが良いコーダーであれば、どんなコードスタイルでも読むことができます。そうでない場合、孤独なスタイルを持っていることはまったく役に立ちません。

12
gbjbaanb

引用する命名規則は、標準ライブラリからのものです。命名規則は規範的というよりは実用的です。つまり、標準ライブラリは、ライブラリを使用するためにシンボルを導入する必要があります。標準ライブラリは、これらのシンボルを固定セットに制限して、ライブラリを使用する開発者が名前の衝突が発生しても驚かないようにします。

標準ライブラリでは、すべての小文字の名前に下線区切りを使用することを選択しています。

開発者としてのあなたの選択は、その規則またはあなたとあなたのチームによって決定された別の規則を使用することです。同じ規則を使用すると読みやすくなりますが、名前の衝突が発生する可能性もあります(名前空間を使用して解決されることが多く、コードのノイズに追加される可能性があります)。

一般的なC++(非標準ライブラリ)規約は、Javaに非常に近いものです。

あなたの例から、C++の命名規則では通常、大文字の関数名と大文字のクラス名を使用します。あなたの例を拡張するには:

int someVariable = SomeClass.SomeMethod(someParameterToPass);

もう1つの違いは、get、set、またはisプレフィックスを前に付けたメソッド名のJavaBeans規則です。多くのC++規則は同様の規則を使用しています。ただし、一部のグループでは、C++の機能を使用してメソッド名をオーバーロードし、getとsetが同じ名前でシグネチャが異なるようにしています。

class Foo
{
public:
    Bar GetBar() const;
    void SetBar(const Bar& bar);
};

class Foo
{
public:
    Bar Bar() const;
    void Bar(const Bar& bar);
};

一部のグループは、過負荷を使用しないことを好み、以前の規則を好みます。

3
Bill Door