CamelCaseの頭字語[終了]


243

CamelCaseについて疑問があります。あなたがこの頭字語を持っているとしましょう:Unesco = United Nations Educational, Scientific and Cultural Organization.

あなたは書くべきです: unitedNationsEducationalScientificAndCulturalOrganization

しかし、頭字語を書く必要がある場合はどうでしょうか?何かのようなもの:

getUnescoProperties();

このように書くのは正しいことですか? getUnescoProperties() OR getUNESCOProperties();


2
これはprogrammers.SEにあるべきではありませんか?
Pacerier、2015

5
IMOをsnake_caseに変換すると、最適なソリューションが明らかになります。あなたは好きですget_unesco_propertiesget_u_n_e_s_c_o_properties
jchook


回答:


195

マイクロソフトが書いたいくつかのガイドラインcamelCaseは次のとおりです。

頭字語を使用する場合、2文字を超える頭字語にはPascalケースまたはキャメルケースを使用してください。たとえば、HtmlButtonまたはを使用しますhtmlButton。ただし、System.IO代わりになどの2文字のみで構成される頭字語は大文字にする必要がありSystem.Ioます。

識別子またはパラメータ名に省略形を使用しないでください。略語を使用する必要がある場合は、単語の標準的な略語と矛盾しても、2文字以上の略語にはキャメルケースを使用してください。

まとめ:

  • 2文字の長さの略語または頭字語を使用する場合は、すべて大文字で入力してください。

  • 頭字語が2文字より長い場合は、最初の文字に大文字を使用します。

それで、あなたの特定のケースでgetUnescoProperties()は、正しいです。


11
私はID代わりIdに使用を始めるべきだと思います(どこでも使用/参照しています)
jasonscript

30
技術的には「ID」は頭字語ではありませんが(「identifier」または「identification」の略語です)、このガイドラインがどのように役立つか、またはこのガイドラインが役立つかどうかは本当にわかりません。:-\
ブライアント2014

63
これは良い基準ではないと思います。通常の頭字語、2文字の頭字語、および通常の単語を区別することは複雑すぎるようであり、一貫した命名規則を持つという考えに反しています。
2014

40
また、Microsoftによって言及されても、何かが「正しく」なるわけではありません。
Sam

48
彼らが独自のガイドラインに従っていることを知っておくのは良いことですXMLHttpRequest()。もともとはMicrosoftからのものでした。
Makyen

314

受け入れられた回答からのマイクロソフトのアドバイスに対する正当な批判があります

  • 文字数に応じた頭字語/頭文字の扱いに一貫性がない:
    • playerIDplayerIdplayerIdentifier
  • 2文字の頭字語が識別子の先頭にある場合でも、大文字にする必要があるかどうかの質問:
    • USTaxesusTaxes
  • 複数の頭字語を区別することの難しさ:
    • すなわちUSIDvs usId(またはparseDBMXMLWikipediaの例では)。

したがって、私はこの回答を、承認された回答の代わりとして投稿します。すべての頭字語は一貫して扱われるべきです。頭字語は他の単語と同じように扱う必要があります。ウィキペディアの引用

...一部のプログラマーは、略語を小文字の単語のように扱うことを好みます...

だからre:OPの質問、私は受け入れられた答えに同意します。これは正しいです:getUnescoProperties()

しかし、私はこれらの例では別の結論に達すると思います:

  • US TaxesusTaxes
  • Player IDplayerId

したがって、2文字の頭字語を他の頭字語と同様に扱う必要があると思われる場合は、この回答に投票してください。

キャメルケースは慣例であり、仕様ではありません。だから私は人気のある意見のルールを推測します。

編集: @Brian Davidが言うように、投票でこの問題を決定する必要があるというこの提案を削除します;スタックオーバーフローは「人気コンテスト」ではなく、この質問は「意見ベース」としてクローズされました)

多くの人は頭字語を他の単語と同じように扱うことを好みますが、より一般的な慣習は、頭字語をすべて大文字にすることです(それが「嫌悪」につながる場合でも)。

その他のリソース:

  • 一部の人々は略語と頭字語を区別することに注意してください
  • Microsoftのガイドラインでは、2文字の頭字語と「2文字を超える頭字語」を区別しています。
  • 一部の人々は略語/頭字語を完全に避けることを推奨していることに注意してください
  • CamelCase / PascalCaseを完全に避けることを推奨する人もいることに注意してください
  • 一部の人々は、「一貫性」を「内部的に矛盾しているように見えるルール」(つまり、2文字の頭字語を3文字の頭字語とは異なるものとして扱う)と区別しています。一部の人々は、「一貫性」を「同じ規則を一貫して適用する」と定義しています(規則が内部的に矛盾していても)
  • フレームワーク設計ガイドライン
  • マイクロソフトガイドライン

26
1)矛盾はありません。「Id」は略語であり、頭字語ではありません。2)識別子のコンテキスト、つまりクラス、インターフェース、属性、列挙型、静的フィールド、パラメーター、メソッド、プロパティ、またはイベントによって異なります。識別子のガイドラインがPascalCaseを使用している場合、それはUSTaxesand PlayerIdです。camelCase:usTaxesおよびplayerId。3)USIdPascalCase、usIdcamelCase、およびparseDbmXmlcamelCaseにあります。
Frederik Krautwald、2015年

6
あなたは正しい、それは略語です。私のポイントは、それはUsTaxes、UsIdであるべきだということです。2文字の「省略形または頭字語」は、3文字または他の「通常の単語」と異なる扱いをしないでください。@Eonilの答えからの他のアドバイスは、短縮剤を完全に避けることです。unitedStatesTaxes、またはplayerIdentifier。
Red Pea

3
ははは。混乱が生じるのではないかと思いますが、ガイドラインは、混乱を防ぐためのガイドラインです。科学の文脈における考案された(悪い)頭字語の例:InIN(item)vs InIn(item)(ヒント:INはインチです)。または、IDById(id)IdById(id)、コンテキスト・サイエンス(ヒント:IDは、感染deseaseを意味します)。「2つの文字が長い」-どのような状況で何をしますか?
Frederik Krautwald、2015年

2
、Microsoftのリンク 「...パスカルケースや頭字語のためのキャメルケースを使用つ以上の文字が ...。しかし、あなたはで構成されている略語活用すべきである2文字のみを ...」それは私が呼ぶだろう部「矛盾しています」より優れた特性評価は「例外」です。そして、少なくとも、2文字の頭字語がより混乱する理由を合理化しました。しかし、「CanCan」を使用するプログラムは、運が悪いと思います。それはダンスの動き、またはセルクルドゥAviron・デ・ナントコミュニティ・エリア・ネットワーク:)のかどうか、あいまいな
赤エンドウ豆の

18
著者資本オフェンス:キャメルケースでの略語ハンドルにどのように彼は書いたときに、正しく「醜態」という用語を呼び出す:「簡単な例で働く[大文字頭字語使用]は一方で、1つの略語は別の後に続く場合、それは憎むべきにつながる:HttpURLConnectionの、XMLIDREF」を
kghastie 2015

21

最初に、私はネイティブスピーカーはないこと明確にする必要があります。そのため、英語の文法に関する私の主張は単に間違っている可能性があります。そのようなエラーを発見した場合は、お知らせください。非常に感謝いたします。


頭字語のベストプラクティスは、頭字語をできるだけ避けることです。とにかく、頭字語UNESCOはフルネームよりもよく知られているので、これはそうではありませんUnitedNationsEducationalScientificAndCulturalOrganization

そうすれば、実生活に身近なだけで身近になるというだけでUNESCOなくUnesco、もっと理にかなっていると思います。私はその言葉がUnesco実際に何を意味するのか理解するのに苦労しました。

別の例として、について考えますArc。これは円の周りの曲線のように聞こえますが、Rustではこれはを意味しAtomically Reference Countedます。のようARCに書かれている場合、少なくとも読者は、その単語が一種の曲線ではなく、何か別の頭字語であることを認識します。

現代のプログラムは主に人間の読者のために書かれています。次に、機械の処理や分析ではなく、人間が読みやすいようにこれらの命名規則を設定する必要があります。

この観点では、何も得られないうちにUnescoover UNESCOを使用すると読みやすさが失われます。

その他の場合でも、ほとんどの場合、読みやすいように、英語の頭字語の規則(または規則)に従うだけで十分だと思います。


4
上記の例は少し誤解を招くものです。「私が今まで見た中で最高のアプローチはAppleのものだった...つまり、頭字語を固有名詞のように扱うことを意味する...だからユネスコはもっと理にかなっている」-それはあなたが固有名詞を書く方法ではない。
Mikko Rantanen、2015

@MikkoRantanen回答を更新しました。
Eonil 2016年

7
うわー、私は同意するであろうその答えの文章を見つけることがほとんどできません:-)
JosefSáblJun

略語/頭字語が多かれ少なかれ意味があるかどうかは、作業しているコードのコンテキストに完全に依存します。たとえば、私は金融業界で働いており、業界全体、そして実際には世界全体で統一されている非常に多くのユニークな用語があります。あなたは、その会社で働くすべての人が心で知っている頭字語を使用しないことによって、時間を浪費し、不必要な冗長性を作成することになります。たとえば、現在価値のPV、将来価値のFV、平均の平均、指数の指数など
Will Ediger

@ pm100私が言ったことじゃないですか?ユネスコは固有名詞の書き方ではありません。
ミッコランタネン2017

17

CamelCaseに変換するために、Googleの(ほぼ)確定的なCamelケースアルゴリズムもあります

名前の散文形式から始めます。

  1. フレーズをプレーンASCIIに変換し、アポストロフィをすべて削除します。たとえば、「ミュラーのアルゴリズム」は「ミュラーのアルゴリズム」になる可能性があります。
  2. この結果を単語に分割し、スペースと残りの句読点(通常はハイフン)で分割します。
    1. 推奨:通常の使用で単語に従来のキャメルケースの外観が既にある場合は、これを構成部分に分割します(たとえば、「AdWords」は「adwords」になります)。「iOS」のような単語自体は、実際にはキャメルケースではないことに注意してください。規約に反するため、この推奨事項は適用されません。
  3. 次に、すべて(頭字語を含む)を小文字にし、次に最初の文字のみを大文字にします。
    1. …キャメル大文字を生成するための各単語、または
    2. …最初の単語を除く各単語で、キャメルケースを小文字にする
  4. 最後に、すべての単語を1つの識別子に結合します。

元の単語の大文字小文字の区別はほとんど無視されていることに注意してください。

次の例では、「XML HTTPリクエスト」はXmlHttpRequestに正しく変換され、XMLHTTPRequestは正しくありません。


17

getUnescoProperties() 最善の解決策になるはずです...

可能であれば、純粋camelCaseに従うだけで、頭字語がある場合は、可能であれば大文字にしてくださいcamelCase

一般に、オブジェクト指向プログラミングでは、変数は小文字(lowerCamelCase)で始まり、クラスは大文字()で始まる必要がありUpperCamelCaseます。

疑わしい場合は、純粋に行ってくださいcamelCase;)

parseXML大丈夫parseXmlですcamelCase

XMLHTTPRequest後続の大文字の頭字語と一緒に行くべきであるXmlHttpRequestxmlHttpRequest、そうするべきではない、それはすべてのテストケースについて明確に明確ではありません。

例えば、どのようにこの言葉を読んでくださいHTTPSSLRequestHTTP + SSLまたはHTTPS + SL(平均何でも...しないこと)、その場合のフォローキャメルケースの大会ではとのために行くhttpSslRequesthttpsSlRequest、多分それはもはや素敵ではありませんが、それは間違いなく、より明確です。


2
私はあなたのHTTPSSL例が好きですが、SLは何も意味しませんが、HTTPSSHTunnelのようなものはどうですか?HTTPS + SH(シェル)またはHTTP + SSHですか?Googleの慣習は、あいまいさが少なくなります。
L. Holanda

10

たくさんの星(現時点では57.5k)の githubにairbnb JavaScript Style Guideがあり、次のような頭字語についてのガイドがあります:

頭字語と頭文字は常にすべて大文字にするか、すべて小文字にする必要があります。

どうして?名前は読みやすくするためのものであり、コンピュータアルゴリズムを緩和するものではありません。

// bad
import SmsContainer from './containers/SmsContainer';

// bad
const HttpRequests = [
  // ...
];

// good
import SMSContainer from './containers/SMSContainer';

// good
const HTTPRequests = [
  // ...
];

// also good
const httpRequests = [
  // ...
];

// best
import TextMessageContainer from './containers/TextMessageContainer';

// best
const requests = [
  // ...
];

7
なぜですか。名前はコンピュータアルゴリズムを緩和するためでXMLHTTPRequestなく、読みやすさのためにあります」なので、よりも読みやすいXmlHttpRequestでしょう。
L.ホランダ

2
なぜhttpRequests良いと考えられているHttpRequestsが悪いのか理解できない。この原則に従うと、XML HTTPリクエストxmlhttpRequest???
L.ホランダ

1
私はよくAirBnbスタイルガイドを引用しますが、この場合は同意しません。私は特に彼らの発言に同意しません:「頭字語とイニシャリズムは常にすべて大文字か、すべて小文字でなければなりません。」 私の意見xmlHttpRequestよりも読みやすいですXMLHTTPRequest
Ronan

3

現在、私は以下のルールを使用しています:

  1. 頭字語のための資本ケース:XMLHTTPRequestxmlHTTPRequestrequestIPAddress

  2. 略語のためのキャメルケース:ID[entifier]Exe[cutable]App[lication]

ID 例外ですが、申し訳ありませんが本当です。

大文字を見るとき、私は頭字語、つまり各文字の個別の単語を想定しています。略語では文字ごとに個別の単語がないため、キャメルケースを使用します。

XMLHTTPRequest あいまいですが、まれなケースであり、それほどあいまいではないため、OKです。ルールよりもロジックが美よりも重要です。


1

JavaScript Airbnbスタイルガイドはこれについて少し話しています。基本的に:

// bad
const HttpRequests = [ req ];

// good
const httpRequests = [ req ];

// also good
const HTTPRequests = [ req ];

私は通常、クラスの先頭の大文字を読むので、それを避ける傾向があります。結局のところ、それはすべての好みです。


1

@valexの発言に加えて、この質問に対するいくつかの回答をまとめます。

一般的な答えは次のとおりです。使用しているプログラミング言語によって異なります。

Cシャープ

Microsoft HtmlButton、このケースのクラスに名前を付けるのに適切であると思われるガイドラインをいくつか作成しました。

JavaScript

Javascriptには頭字語を含むいくつかのグローバル変数があり、すべて大文字で使用します(ただし、おかしなことに、常に一貫しているわけではありません)。次に例を示します。

encodeURIComponent XMLHttpRequest toJSON toISOString


まあ、それはNetscapeの古いもので、のようなcamelCaseのないものもありonerrorます。
エディ

1

免責事項:英語は私の母音ではありません。しかし、私は長い間この問題について考えてきました。特に、ノード(キャメルケーススタイル)を使用してデータベースを処理するときは、テーブルフィールドの名前をヘビ化する必要があるため、これは私の考えです。

プログラマーには2種類の「頭字語」があります。

  • 自然言語で、ユネスコ
  • たとえば、コンピュータプログラミング言語ではtmc and textMessageContainer、ローカル変数として通常表示されます。

プログラミングの世界では、自然言語の頭字語はすべて単語として扱う必要があります。その理由は次のとおりです。

  1. プログラミング時には、頭字語スタイルまたは非頭字語スタイルのいずれかで変数に名前を付ける必要があります。したがって、関数にgetUNESCOPropertiesという名前を付けた場合、それはユネスコが頭字語であることを意味します(それ以外の場合はすべて大文字にする必要はありません)が、明らかに頭字語getpropertiesはありません。したがって、この関数にはgunescopまたはgetUnitedNationsEducationalScientificAndCulturalOrganizationPropertiesのいずれかを指定する必要があります。どちらも使用できません。

  2. 自然言語は絶えず進化しており、 今日の頭字語は明日に言葉になるでしょうが、プログラムはこの傾向に依存せず、永遠に存続する必要があります。

ちなみに、最も投票された回答では、IOはコンピューター言語の意味での頭字語(InputOutputの略)ですが、頭字語(コンピューター言語で)はローカル変数ですが、トップレベルのクラス/関数なので、IOの代わりにInputOutputを使用する必要があります


「トーン」ではなく「舌」
Dan Dascalescu

0

ユネスコは特別なケースです。UEFA、RADA、BAFTAのように、BBC、HTML、SSLとは異なり、通常は(英語で)単語として読み取られ、頭字語ではありません。


1
これが「頭字語」と単なる「略語」の違いです。この区別は、全体の議論に関連しているように見えますが、提示された回答ではほぼ完全に省略されています。
サイモン、

BBC、HTML、SSL、および各文字を発音させるその他の頭字語は、より正確にイニシャリズムと呼ばれます。ユネスコのような単語として発音される言葉は、真の頭字語です。
Lrdwhyt

-2

大文字(HTML)または小文字(html)のいずれかを使用して頭字語の読みやすさを優先するが、両方(Html)を避けようとする別のキャメルケース規則もあります。

したがって、あなたの場合、あなたは書くことができますgetUNESCOPropertiesunescoProperties変数またはUNESCOPropertiesクラスを記述することもできます(クラスの規則は大文字で始めることです)。

たとえば、XML HTTPリクエストという名前のクラスの場合、このルールは2つの頭字語を組み合わせたい場合に注意が必要です。大文字で始まりますが、XMLHTTPRequest読みづらく(XMLH TTPリクエストですか?)、XMLhttpRequestキャメルケースの規則に違反する(XM Lhttpリクエストですか?)ので、大文字と小文字を混在させるのが最善のオプションXMLHttpRequestです。W3Cが実際に使用したもの。ただし、この種のネーミングは使用しないでください。この例でHTTPRequestは、より良い名前になります。

識別/識別のための公式の英語の単語はIDのようですが、頭字語ではありませんが、同じ規則を適用できます。

この慣習は非常に人気があるようですが、それは単なる慣例であり、正誤はありません。慣習に固執し、名前が読みやすいことを確認してください。


3
私はこのスレッド全体を信じていません:-)つまり、それはXMLToHtmlConverterですが、HTMLToXmlConverterでしょうか?うわー...
ジョセフSábl

1
@JosefSábl、はい、そうです。あなたの反対票に関して、私はこの慣習が好きだと言っているわけではありませんが、確かに存在しています。
ヘススカレラ2016年

1
私は質問を「キャメルケースでアクロニムを書くのに良い慣習は何か」ではなく、「存在するすべての慣習を列挙できますか」と読んだ。そして、私はあなたの言及された慣習を非常に悪いと思うので、私は反対票を投じました:-)
JosefSábl16年

さて、質問は「このように書くことは正しいですか?」であり、それは単なる慣例であり、この慣習は非常に人気があるため(あなたがそれをどのように考えるかに関係なく)、多くの「正しい」方法を書くので、私の答えは非常に有効です:-)
ヘスス・カレラ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.