ネットでc++の命名規則を検索するとほぼすべてのサイトでクラス名はパスカル記法にするべきとなっています。
がしかし、c++の標準ライブラリではクラス名はスネーク記法を採用しています。
javaはすべてのクラスを初めからパスカル記法で書いているのでそれに合わせる意味でもクラス名はパスカル記法にするべきだと思うのですが、
c++の場合、自作クラスをパスカル記法で書いてしまうとコードの中でスネーク記法とパスカル記法が出てくることになり返ってコードが見にくくなる気がするのですがなぜクラス名はパスカル記法が推奨されることが多いのでしょうか?
あと、皆さんはクラス名はどう命名していますか?
参考までにお教えしていただけると助かります。
c++の命名規則について
Re: c++の命名規則について
自分が普段使っている命名ルールは、「Google C++スタイルガイド」です。
https://google.github.io/styleguide/cppguide.html
公式ページは英語ですが、検索すると有志の方が日本語に翻訳したものが見つかると思います。
「Google C++スタイルガイド」で、クラス名(型名)は、
大文字で始めて、単語の頭文字を大文字にして、アンダーバーを使わないようにする。
となっているので、パスカル記法を使っています。
個人的に可読性は良いと感じています。
標準ライブラリの命名規則について未確認かつ不確かな情報ですが、
「C++標準ライブラリは、既存のライブラリと名前衝突しないように命名規則を一般的でないものにしている」
みたいなことを聞いたことがあります。
https://google.github.io/styleguide/cppguide.html
公式ページは英語ですが、検索すると有志の方が日本語に翻訳したものが見つかると思います。
「Google C++スタイルガイド」で、クラス名(型名)は、
大文字で始めて、単語の頭文字を大文字にして、アンダーバーを使わないようにする。
となっているので、パスカル記法を使っています。
個人的に可読性は良いと感じています。
標準ライブラリの命名規則について未確認かつ不確かな情報ですが、
「C++標準ライブラリは、既存のライブラリと名前衝突しないように命名規則を一般的でないものにしている」
みたいなことを聞いたことがあります。
Re: c++の命名規則について
なるほど…。inemaru さんが書きました:標準ライブラリの命名規則について未確認かつ不確かな情報ですが、
「C++標準ライブラリは、既存のライブラリと名前衝突しないように命名規則を一般的でないものにしている」
みたいなことを聞いたことがあります。
しかしc++には名前衝突しないためにそもそも名前空間というものがあるのですから、
わざわざクラス自身の名前を他と変える必要性が感じられません。
正直、有難迷惑に感じます…。
Re: c++の命名規則について
標準ライブラリの命名規則に関しては、
イマイチはっきりした情報が見つけられない(不確かな情報)なので、
あまり信用しないで
一意見として受け取ってください。
少し調べてみたところ、C++標準委員会とかで議論されてはいるみたいですが
誤解釈とかもありうるので、
間違ってたらすいません。
イマイチはっきりした情報が見つけられない(不確かな情報)なので、
あまり信用しないで
一意見として受け取ってください。
少し調べてみたところ、C++標準委員会とかで議論されてはいるみたいですが
- ローカル変数と型名の衝突の回避
- テンプレート引数名をテンプレートクラス内でusing宣言する事が多い為、名前衝突が起こりうる
誤解釈とかもありうるので、
間違ってたらすいません。
Re: c++の命名規則について
歴史的経緯を考えれば,Upper-camel (Pascal) case ではないことは,ある程度予想が付きます。
まず,Cのライブラリが小文字のみからなること。
初期のC++コンパイラであるCfrontはCへのトランスレータですから,Cのライブラリと調和が取れた表記であることは必要条件です。
この時点で,Upper-camel caseはCのライブラリと合わなくなります。
あと,namespaceは標準化がなされる段階で入った,新しい機能です。
ref) D&E 日本語版 P.165
このため,少なくとも初期のライブラリの名前付け規約を考える上で,namespaceは存在せず,考慮に入れられなかったのは間違いないです。
で,一番大きそうなもの。
Stroustrup御大曰く
ref) http://www.stroustrup.com/bs_faq2.html#Hungarian
まず,Cのライブラリが小文字のみからなること。
初期のC++コンパイラであるCfrontはCへのトランスレータですから,Cのライブラリと調和が取れた表記であることは必要条件です。
この時点で,Upper-camel caseはCのライブラリと合わなくなります。
あと,namespaceは標準化がなされる段階で入った,新しい機能です。
ref) D&E 日本語版 P.165
このため,少なくとも初期のライブラリの名前付け規約を考える上で,namespaceは存在せず,考慮に入れられなかったのは間違いないです。
で,一番大きそうなもの。
Stroustrup御大曰く
だそうです。Stroustrup: C++ Style and Technique FAQ さんが書きました:I prefer to use underscores to separate words in an identifier (e.g, element_count) rather than alternatives, such as elementCount and ElementCount.
ref) http://www.stroustrup.com/bs_faq2.html#Hungarian
Re: c++の命名規則について
c言語との調和性はなるほど確かに納得のいく理由になりそうです。YuO さんが書きました:歴史的経緯を考えれば,Upper-camel (Pascal) case ではないことは,ある程度予想が付きます。
まず,Cのライブラリが小文字のみからなること。
初期のC++コンパイラであるCfrontはCへのトランスレータですから,Cのライブラリと調和が取れた表記であることは必要条件です。
この時点で,Upper-camel caseはCのライブラリと合わなくなります。
c++はあくまでc言語の強化なので標準ライブラリの命名規則をc言語に沿うようにした、という認識でいいのでしょうか?
c++の開発者の好み…YuO さんが書きました:で,一番大きそうなもの。
Stroustrup御大曰くだそうです。Stroustrup: C++ Style and Technique FAQ さんが書きました:I prefer to use underscores to separate words in an identifier (e.g, element_count) rather than alternatives, such as elementCount and ElementCount.
ref) http://www.stroustrup.com/bs_faq2.html#Hungarian
あくまで利用者である以上は有無を言わずそれに順応しろということですかね…
Re: c++の命名規則について
> c++の開発者の好み…
> あくまで利用者である以上は有無を言わずそれに順応しろということですかね…
文句を言うなら使うな、というのは極論ですが、不便に思う人が少数派なのではないですか?
標準ライブラリの部分と、自分(自社)で書いた部分が区別しやすいとも言えます。
多くの人が不便に思うなら、今の形に落ち着いていないでしょう。
最初の開発者の意向も尊重されますが、今や多くの人が標準化に関わっています。
現実問題として、30年以上使われている標準ライブラリの命名規則は変えられず、
自作の部分を気に入ったコーディングルールで作成するしかないのではないでしょうか。
スネーク記法で標準ライブラリに合わせる方法もありますが、
こんたさんの調査結果によると、自作部分でパスカル記法を採用している人が多いのでしょう。
私もその一人です。
> あくまで利用者である以上は有無を言わずそれに順応しろということですかね…
文句を言うなら使うな、というのは極論ですが、不便に思う人が少数派なのではないですか?
標準ライブラリの部分と、自分(自社)で書いた部分が区別しやすいとも言えます。
多くの人が不便に思うなら、今の形に落ち着いていないでしょう。
最初の開発者の意向も尊重されますが、今や多くの人が標準化に関わっています。
現実問題として、30年以上使われている標準ライブラリの命名規則は変えられず、
自作の部分を気に入ったコーディングルールで作成するしかないのではないでしょうか。
スネーク記法で標準ライブラリに合わせる方法もありますが、
こんたさんの調査結果によると、自作部分でパスカル記法を採用している人が多いのでしょう。
私もその一人です。
Re: c++の命名規則について
初期のC++はC with classesという名前の通り,Cにクラスを追加しただけのものだったわけで,Cに沿わせた可能性は高いと思います。こんた さんが書きました:c++はあくまでc言語の強化なので標準ライブラリの命名規則をc言語に沿うようにした、という認識でいいのでしょうか?
標準ライブラリがsnake caseで提供され,それを使う以上は標準ライブラリがsnake caseであることを受け入れなければなりません。こんた さんが書きました:c++の開発者の好み…
あくまで利用者である以上は有無を言わずそれに順応しろということですかね…
それ以外の識別子には,いくつかの制限がある (__などが使えない) ことを除けば名前について制限は無いのですから,
自分の作成する識別子の名前に対しては,自分の考える名前付け規約で名前を付ければよいと思います。
Re: c++の命名規則について
みなさまご解答ありがとうございました。
c++標準ライブラリのスネーク記法についての理由はある程度納得いきました。
それを踏まえたうえで自分の命名規則はもう一度よく考えていきます。
c++標準ライブラリのスネーク記法についての理由はある程度納得いきました。
それを踏まえたうえで自分の命名規則はもう一度よく考えていきます。