標準型とユーザー定義型を構文的に区別する意味は何ですか?


13

ここでは特にC ++とBjarne Stroustrupの命名規則に言及しますが、原則として、人々はあちこちで他の言語にも多少似たルールを使用しているのを見てきました。

そのため、基本的な考え方は、コードを読み取りながら標準タイプとユーザー定義タイプ区別できるようにすることです。たとえば、Bjarne Stroustrupは、

タイプの最初の大文字(例:SquareおよびGraph)

それを考慮して

C ++言語と標準ライブラリは大文字を使用しません

上記の目標を達成できます。

しかし、なぜそうする必要があるのでしょうか?標準型とユーザー定義型を区別する目的は何ですか?

私はそのことに関するBjarne Stroustrupの推論を見つけることができませんでした。さらに、私自身は正反対に考えています。:DI知っています、「Stroustrupに異議を唱えるのは誰ですか?」しかし、listen、たとえば演算子のオーバーロードなどのC ++言語機能の束は、ユーザー定義型に標準型と同様のレベルの構文サポートを許可する目的に役立ちます。そして、これはすべて異なる命名規則に困惑しています...

PS言うまでもなく、1つの単語でクラスに名前を付けるのに十分ではなく、アンダースコアで区切られた大文字で始まる単語はあまりにも異質に見えます。


6
最終的には、ハンガリー表記法の形式と呼ぶこともできます(つまり、名前にタイプ/使用法に関する情報を埋め込む)。これは通常、眉をひそめます。したがって:良い質問です。
stijn 14年

2
@ stijn:はい、しかしあなたはそれが眉をひそめている理由を知っていますか?かつて、誰もがテキストエディタを使用してプログラムを記述していたとき、識別子を見ることでタイプを知ることは役に立ちました。しかし、今日では、最新のIDEで識別子にカーソルを合わせると、タイプがわかります。
ロバートハーヴェイ14年

4
@RobertHarveyハンガリーの表記法も、強力なIDEを持たないコミュニティでは使用されないか、ほとんどの場合プレーンテキストエディタを使用します。

1
@RobertHarveyいいえ、私は両方(「アプリハンガリー語」と「システムハンガリー語」)を認識していますが、私の経験では、たとえばPythonとRustではどちらも一般的ではありません。

3
@RobertHarveyハンガリー語の表記法はC、C ++、VBにしか存在しなかったと言っていますか?とにかく、私のポイントは、あなたがそれを眉をひそめている理由を質問することでした(タイプを伝えるIDEがあるので冗長です)その理由はそのようなIDを持たない言語には適用されないため、あなたの推論によって、ハンガリー語の恩恵を受けるはずです。Pythonが動的に型付けされても違いはありません。実際、通常、プログラマはコードを記述するときに型を知っていますが、自動的に推論することはできないため、推論を強化する必要があります。

回答:


5

そのような目的や利益はまったくありません。C ++の目標の1つは、UDTとプリミティブを交換可能に扱うことであり、完全に成功したわけではありませんが、これは差別化する必要のない領域の1つです。

ネーミングに関して言えば、Stroustrupは非常に重要であり、これは科学的に証明された事実です。


2
RAIIを確認し、SFINAEを作成します。
ロバートハーヴェイ14年

5
標準型とUDTを区別することがどのように役立つのかがわかりました。あなたが持っていない限り、あなたは、標準ライブラリのコードを変更するべきではない、本当に良い理由を下ケースを見てするだけでなく、それが標準ライブラリにあります、ので、あなたはコードを見て行く必要はありませんことを示しているので、。
ロバートハーヴェイ14年

4
@delnan:はい。それは、「多くの人々」側の権威への訴えに他なりません。「多くの人々」がここを乗り越えて彼らの推論を議論したい場合、彼らは自由にそうすることができ、それまで、彼らは追加するものは何もありません。FTR、私はUDTにも大文字を使用しています...しかし、エイリアスを必要とする原因があるときはいつでもプリミティブにも使用します。
DeadMG

2
@RobertHarvey:それは、あなたが目の前で標準型を認識できないことを前提としています。または、ご使用の環境でそれらの上にマウスを置いて、「std ::」を確認します。または、[定義に移動]などを使用します。したがって、基本的には適用されません。
DeadMG

1
名前空間が出現する前に、私はいつも目的が標準型と区別することだと思っていました。最近では、古い考え方の遺物に過ぎません(「ベストプラクティス」は、しばらく前にベストでなくなった)。FWIW、私の個人的なプロジェクトでsnake_caseは、クラスと名前空間に小さな文字を使用していますが、これによる問題や混乱はまだありません。
utnapistim 14

3

命名規則は、コードの人間(つまり、プログラマーとメンテナー)の理解をサポートすることに関するものです。

UDTは、変数の宣言、初期化、式、およびステートメントが標準タイプの場合とは異なる方法で機能するように指定できます。問題発見のために、メンテナーがコードのいくつかのセクションがファンキーなことをするかもしれないという手がかりがあると便利です(例えば、ある関数内で使用されるユーザー定義の整数型の実装は追加方法に欠陥があるかもしれません)。

そのようなキューを提供する多くの方法があります(コメント、設計仕様など)。命名規則の利点は、コード内に存在することです。一方、コメントは省略したり、古くなったりすることができます。


2

型に大文字の単語を使用する1つの理由は、変数を型と区別するためです。これにより、大文字と小文字は別として、同じ名前で変数を宣言できます。

Foo foo;
Graph graph;

これは、構成設定など、各コンテキストで1つのインスタンスのみが使用されるクラスに役立ちます。


私見これは見出しの質問に答えません。「この点で、標準タイプに小さい文字を付けることは、cstdlibとの後方互換性のためだけである」と付け加えるかもしれません。
ヴォラック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.