「電話番号」、「バイク」、「波長」などの単語のラクダケースの書き方


75

キャメルケース構文を一部の変数名に適用する方法を理解するのに問題があります。

たとえば、キャメルケースで「電話番号」のような単語を正しく書くにはどうすればよいですか?それphoneNumberphonenumber?同様に、「ユーザー名」の場合、それusernameまたはuserName

私はそれはのようなキャメルケースに右見ていないと思うmotorCyclepassWordsunDaysetUpまたはwaveLengthこれらのことからちょうど1ワードずつです。ハッシュテーブルは1ワードで、ハッシュマップは2ワードであるため、最後のケースではキャピタルを使用せずにキャメルケースでhashMapも呼び出される理由だと思いhashtableます。

しかし、オートバイに色がある場合はmotorcycleColor、単語が連結されているためでしょうか?正しいか、それがあるべきであるということであるphoneNUmberwaveLengthsunBlockとさえsunDay週の日曜日のために?

たとえば、メソッドが呼び出されているgetISOCountriesときに呼び出されるのは、HttpHeadersたとえば、String camelCaseString = dog.toCamelCase()またはのようなメソッドがある場合に何が小文字になるかが明確ではないからinterface CamelCaseです。

関連:https : //english.stackexchange.com/questions/889/when-should-compound-words-be-written-as-one-word-with-hyphens-or-with-spaces


7
2語のフレーズが複合語であるかどうかを判断するのが非常に難しい場合は、大文字を選択してそのまま使用します。ほとんどのコーディング規約と同様に、1つのプロジェクト内で一貫性を保つことが最も重要です。
ケビン14

2
すばらしい質問です。私はいつも「fileName」(および間違った「filename」)の書き方を自問しました。私は...この言葉は、プログラマに異なり、プログラマから書かれていると思う
レイ

3
@PacMani ここでディスカッションをお楽しみください
ジェイソンC 14

4
@ 909Niklas「名前」はできる限り完全に削除します。単に「ストリート」を使用します。文字列の場合は、それが有害または混乱を招かない限り、名前です。 usernameそれはコールサインではなく、「ユーザ名」だ、ので、それはより多くのfirstNameまたは(キャメル記法されなければならない)lastNameのよりオートバイのようなものだものです
ピーター・ターナー

2
@PeterTurner一部のプログラマーはstreet、それがクラスでありname、その属性/データメンバーの1つであるべきだと言うでしょう。
JAB 14

回答:


173

「通常」スペースがある場所(ソースコードの代わりに文字を書く場合)の後に、文字を大文字にする必要があります。最初の仮定は正しいです:

  • これは「モーターサイクル」ではなく「モーターサイクル」なので、変数の名前はmotorcycleでなくである必要がありmotorCycleます。
  • これは「ハッシュマップ」なのでhashMap、ではなくで行きますhashmap
  • 「日曜日」は1つの単語->でありsunday、ではありませんsunDay
  • 「曜日」はになりますがdayOfWeek、ではありませんdayofweek

4
hashmap皮肉なことに私たちはそれをしませんが、それが価値があるもののために、私のチームと私は一般に一語として使用しtree mapます。肩をすくめる
corsiKa 14

1
さて、オートバイはちょっとした例です(実際、それはもともとはモーターサイクルでしたが、今ではそれは別のものです)。honeyBeehoneybee実際、「ミツバチ」ではなく「ミツバチ」ではありません)、およびbutterfly
オロム14

3
setUpただし、アドレス指定されていないケースはエッジケースであり、1つの単語ですが、JUnit歴史的にはという名前のフィクスチャ初期化がありsetUpます。
TC1

23
@ TC1実際には、「セットアップ」は名詞であり、動詞ではありません。アクションの正しい形式を「セットアップ」します。JUnit私たちの残りはエッジケースです。:)
ジェイソンC 14

3
@JasonCありがとう、ついにカウンターパートがtearDownD である理由が理にかなっています
TC1 14

44

パート1
あなたがつまずいたのは、あなたの例のいくつかは複合語ですが、他の例はそうではないということです。

  • 電話番号//複合語ではない
  • オートバイ//複合語
  • 波長//複合語
  • 日焼け止め//複合語
  • 日曜日//複合語*
  • オートバイの色//非複合語とともに使用される複合語。

複合語は、複合語の2番目の単語のキャメルケース表記法に従いません。

だからそうでmotorcycleはないmotorCycle

しかし、「電話番号」の合成語ではありません、それは考えキャメルケースの表記に従ってください。すなわちphoneNumber

そして、それは次のことにつながりますmotorcycleColor

単語が本当に複合語であるかどうか思い出せない場合は、確実に辞書で調べます。

パート2 2
つの例は少し複雑です。

  • ハッシュマップ
  • ハッシュ表

一部は「ハッシュマップ」および「ハッシュテーブル」と綴るので、それらは扱いにくいです。私がチェックした辞書によると、それらは別々の単語であり、複合語ではありません。だから、正しいキャメルケースは次のようになりますhashMaphashTable。すべてのチームがその規則に従うわけではないため、チームメイトに自分が好むものを尋ねてからそれに従う必要があります。この場合、辞書が正しいと言うよりも一貫性が重要です。

*週の他の曜日はそうではないため、日曜日は複合語であると主張する人もいますが、この質問の目的のために、私はその問題を回避します。複合語として扱うのが最も簡単なので、キャメルケースはありません。


6
週の他の曜日もすべて化合物でした。「月曜日」<-月曜日、火曜日<-ティウの日、水曜日<-木曜日の日、木曜日<-トールの日、金曜日<-フリッグの日、土曜日<-土星の日
ケビンクライン14

6
@kevincline:当時の名前の形式はおそらく今では古風だと考えられているので、実際の目的のために実際に数えないでください。...実際にif (currentDay == thorsDay) {...うーんのように見えるコードを書いていない限り... 曜日のフルネームを取得したい場合、あまりにも悪い日付ライブラリにはフォーマットオプションとしてそれがありません。
FrustratedWithFormsDesigner

15
@FrustratedWithFormsDesigner:ポイントは、現代の使用法では、日曜日は月曜日と同じ程度の複合語であり、まったくないということです。「月曜日」が「月曜日」に短縮され、「日曜日」の「太陽」が単独で立つことができるのは単なる偶然です
ケビンクライン14

6
さらに良いことに、変数にはhashMapやhashTableよりも良い名前を使用してください。これは、コードのこの素晴らしいラインにつながる滑りやすい路面です:HashMap hashMap = new HashMap();
エリック・アンドレス

8

他の人が指摘しているように、単語を結合するときにキャメルケースが使用されます。1つの英語の単語内でキャメルケースを使用しないでください。問題は、どの化合物が単一の単語であるかを判断することです。プログラマーは、自分の英語の知識に応じてさまざまな決定を下すことになります。これは大文字化の不整合につながり、スペルミスとほとんど同じように迷惑です。

これを防ぐために、プログラマはスペルや大文字の使用について不明な場合は標準参照(例えばdictionary.com)を使用する必要があります。 それでも、プロジェクトで命名の一貫性が重要である場合、コードレビューに代わるものはありません。

プロジェクトの単一の参照を選択すると、大文字と小文字の区別に関するほとんどの議論が解決されます。Hashtableのような辞書にはない化合物がありますが、JavaおよびC#APIで単一の単語として大文字になっています。それらについてプロジェクト全体の決定をしたいと思うでしょう。Javaでは、「HashMap」ですが「Hashtable」です。IMO「ハッシュテーブル」は明らかに間違っています。APIの名前を除き、単一の単語として表示されることはありません。


4

キャメルケースを行う最も簡単な方法は、単語の描写です。

あなたの質問の例:

  • 電話番号:phoneNumber
  • オートバイ:オートバイ
  • 日曜日:日曜日
  • 波長:波長

2つの単語に分割しない場合は、キャメルケースも使用しないでください。それ以外の場合は、音節でそれを使用していますが、これはどのように見えますか

  • auxIlIArY(これは5音節の単語です。言うまでもなく、私は非等幅/サンセリフフォントのがらくたのように見えます)。

5
電話番号はそれ自身の単語ではなく、単一の単語としてグーグルに入力します。電話番号ではなく「電話番号」を持つすべてを検索します。セットアップは2語ではなく、パスワードでもありません。
ジェフランゲマイヤー14

6
@JeffLangemeier非常に小さな口論:「セットアップ」は名詞で、「セットアップ」は動詞です。したがって、何かの設定方法を表すオブジェクトがある場合は呼び出されsetupますが、何かを設定する関数がある場合は呼び出されsetUpます。
bdesham

2
@bdesham私はそれを理解していますが、私はsetUpから離れるだけです。より良く曖昧でない動詞が初期化されるので、実際にはセットアップの動詞バージョンを完全に忘れていました。
ジェフランゲマイヤー

1
私は「WA」で始まる一つとすることができるいずれかと思うだろうwavelength、またはwaveLength波のいくつかの種類の(必ずしも距離ではない)、それは、「長さ」に関連するかどうか、問題の値であるか否かに依存する周波数で割った伝播速度に関連し、又は。たとえば、ウェーブに関連付けられたサンプル数のオーディオ合成ライブラリの変数はwavelengthbutではありませんwaveLength
supercat 14

2
@kevincline:オーディオ合成エンジンでは、ウェーブの1つまたは複数のサンプル全体を含むウェーブテーブルが一般的です。再生がテーブルの最後に達すると、先頭(単純なエンジンの場合)またはWaveの他の場所のいずれかにループバックします。確かに、WaveLength最も単純なシナリオ(バッファサイズまたはループセクションの長さを参照)以外の場合、それ自体は少し曖昧になりますが、単語はより長い名前で完全に表示されます。
supercat 14

4

これは、プログラミングの文脈でトークンのホワイトスペース規則に適合するために、後で英語を乱用する方法の邪魔になるプレーン英語の複雑さです。

あなたが与える例の言葉のうち、ほとんどすべてが複合語です。日曜日は、それが化合物として生まれたのではなく、それがずっと前に行われたので、今ではほとんど考えることができません。英語を話す人々の展望。

そして、英語では、複合語を書くための3つの主な方法は、開いている(2つの単語の間にスペースがある)、ハイフネーションされている、閉じている(2つの間にスペースやハイフンがない)です。また、特定の状況でオープン化合物をハイフネーションすることに関するいくつかのルールがありますが、特定の化合物にどのフォームが使用されているかを知ることは、他の人が何をしているのかを見ること以外にあまりありません。 2つまたは3つすべての形式(eggbeateregg-beateregg beaterなど)が見つかります。

ここでは、電話番号はほとんどの場合オープンに書かれているため、2つの単語として扱う必要があります。

トークンを形成するために相互キャッピングときと、したがって、スペースやハイフンを除去して2回目以降の単語がタイトルケースで書かれたphoneNumberか、PhoneNumberあなたの大会のために、適切な。

作る事phoneNumber奇妙に思えるが、それがより一般的に同じように与えられたということはおそらくありphone、ほとんどの状況で、またはとしてnumberコンテキストが電話接続に関するとき。


2

コードファイル内の一貫性を保証します。

コードプロジェクト内の一貫性を促進します。

コードライブラリ内の一貫性を優先します。

概念を表す単語の組み合わせは、特定の凝集に慣れるにつれて変化します。

例えば...

  • 「電話セット」は「電話」に短縮されました
  • 「電話」は「電話」に短縮されました
  • 「電話番号」は時々「電話番号」に縮小されました
  • 「電話番号」はすぐに「電話番号」になりました
  • 「電話番号」はしばしば「電話」に短縮されます
  • 「携帯電話」または単に「セル」が今日一般的に使用されています
  • 「自宅の電話」と「職場の電話」もすぐに一般的になります

StackExchangeスペルチェッカーはその決定を下すことができないことに注意してください。上記の文の末尾にある「電話番号」は問題ありませんでしたが、文の先頭にあるものにフラグを付けます(大文字または小文字)。

ほとんどすべての人が、物事を行うための「正しい方法」があることを望んでいますが、言語に関して言えば、それは決してありえないことです。プロジェクトを完了するまでに、使用方法はおそらく変更されています。確かにあなたの理解は変わり、method / et.alの機能も変わります。おそらく変わったでしょう。(その場合、おそらく名前を適切に変更する必要があります。)


-1

厳密に技術的な(米国)の観点から見ると、xxx-yyy-zzzzは通常「電話番号」と考えられますが、xxxの部分は市外局番と呼ばれ、yyyの部分は交換し、zzzzは適切に番号と呼ばれます。

「電話番号」は複合語ではない(まだ)だけでなく、1つになった場合、作成者の意図以外の何かを誤って参照するため、camelCase構文はそれを参照する変数にphoneNumberを必要としますが、実際の電話システムで何でもするつもりです。7桁の場合はphoneExchangeNumberを、10桁のバージョンの場合はphoneACExchangeNumberを使用します。


1
ポイントが作られたと説明した上で、これはかなりのものを提供していないようだ。この前の答えの前に3年間で投稿されました
ブヨ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.