web-dev-qa-db-ja.com

「電話番号」、「オートバイ」、「波長」などの単語のキャメルケースの書き方

一部の変数名に camelCase構文 を適用する方法を理解するのに問題があります。

たとえば、キャメルケースで「phonenumber」のような単語を正しく書くにはどうすればよいですか? phoneNumberまたはphonenumberですか?同様に、「username」の場合、usernameまたはuserNameですか?

motorCyclepassWordsunDaysetUpまたはwaveLengthのようなキャメルケースでは正しくないようです。それぞれ1単語。ハッシュテーブルは1ワードで、ハッシュマップは2ワードなので、キャメルケースではhashMapと呼ばれますが、キャメルケースでは大文字なしでhashtableとも呼ばれるのは、このためだと思います。

しかし、バイクに色がある場合、Wordが連結されているので、それは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

78
Niklas

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

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

パート1
私があなたをつまずかせているのは、あなたの例のいくつかは 複合語 であるのに対し、他の例はそうではないと思います。

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

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

つまり、motorcycleではなくmotorCycleです。

しかし、「電話番号」は複合語ではなく、キャメルケース表記に従います。つまり、phoneNumberです。

そしてそれはmotorcycleColorにつながります。

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

パート2
2つの例は少しトリッキーです。

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

「hashmap」や「hashtable」と綴る人もいるので、注意が必要です。私がチェックしたばかりの辞書によると、それらは別々の単語であり、複合語ではありません。したがって、正しいキャメルケースはhashMaphashTableになります。すべてのチームがその慣例に従っているわけではないため、チームメイトに何を好むかを尋ね、それを守る必要があります。この場合、辞書は正しいと言うよりも一貫性が重要です。

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

44
user53019

他の人が指摘したように、言葉をつなぐときにキャメルケースが使われます。単一の英語の単語内でキャメルケースを使用しないでください。問題は、どの化合物が単一の単語であるかを決定することです。プログラマは自分たちに任され、英語の知識に応じてさまざまな決定を下します。これは大文字と小文字の不一致につながり、スペルミスと同じくらい煩わしくなります。

これを防ぐために、プログラマは、スペルまたは大文字と小文字の区別がわからない場合、標準的な参照(例 dictionary.com )を使用する必要があります。それでも、ネーミングの一貫性がプロジェクトにとって重要である場合、コードレビューに代わるものはありません。

プロジェクトの参照を1つ選択すると、大文字とスペルに関するほとんどの議論が解決されます。辞書にはないが、JavaおよびC#APIでは単一の単語として大文字で示されているHashtableのような化合物があります。それらについてプロジェクト全体の決定を行う必要があります。Javaでは、 「HashMap」ですが、「Hashtable」です。IMO「Hashtable」は明らかに正しくありません。APIでの名前として以外、単一のWordとして表示されることはありません。

8
kevin cline

ラクダ事件を行う最も簡単な方法は、単語の描写です。

あなたの質問の例:

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

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

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

これは、単純な英語の複雑さが、プログラミングコンテキストでトークンの空白のルールに合わせるために後で英語を悪用する方法の邪魔になる場所です。

あなたが与える例の言葉のうち、ほとんどすべてが複合語です。 Sundayではありません。これは化合物として発生したものですが、非常に古く、現在はほとんど考えられていません。特に、太陽に捧げられていることは、英語を話す人々の宗教的および文化的展望の強い部分。

また、英語では、複合語を書く主な3つの方法は、オープン(2つの単語の間にスペースあり)、ハイフン付き、クローズ(2つの単語の間にスペースやハイフンなし)です。また、特定の状況でオープンコンパウンドをハイフンでつなぐことについてはいくつかのルールがありますが、特定のコンパウンドにどのような形式が使用されているかを知るための確かなルールは、他の人が何をしているのかを見る以外にあまりありません。 '2つまたは3つすべての形式を検索します(eggbeaterEgg-beaterおよびEgg beaterなど)。

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

また、インターキャッピングしてトークンを形成すると、スペースまたはハイフンが削除され、2番目以降のWordがタイトルケースで書き込まれるため、慣習に応じてphoneNumberまたはPhoneNumberになります。

phoneNumberを奇妙に思わせるのは、ほとんどのコンテキストではphoneとして、またはコンテキストが電話接続に関するものである場合はnumberとしてより一般的に与えられることです。

4
Jon Hanna

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

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

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

与えられた 凝集 に慣れるにつれて、概念を表す単語の合成が変化します。

例...

  • 「電話セット」は「電話」だけに短縮されました
  • 「電話」は「電話」に短縮されました
  • 「電話番号」が「電話番号」に短縮されることがあった
  • 「電話番号」はすぐに「電話番号」になりました
  • 「phonenumber」はしばしば「phone」にさらに短縮されます
  • 「携帯電話」、または単に「携帯電話」が今日一般的に使用されています
  • 「自宅電話」と「職場電話」も間もなく一般的になる可能性があります

StackExchangeスペルチェッカーは決定を下すことができないことに注意してください。上記の文の最後にある「電話番号」は問題ありませんでしたが、文頭にある「電話番号」(大文字かどうかにかかわらず)を示しています。

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

2
DocSalvager