Android IDの命名規則:アンダースコア付きの小文字vsキャメルケース


89

現在、Android向けのアプリケーションをプログラミングしています。私が見つけたのは、リソースオブジェクト、たとえば画像を描画可能フォルダに配置して、「myTestImage.jpg」のような名前を付けることができないことです。キャメルケースの構文は許可されていないため、これによりコンパイラエラーが発生し、「my_test_image.jpg」のように名前を変更する必要があります。

しかし、XMLファイルで定義するIDはどうでしょうか。次の定義があるとします

<TextView android:id="@+id/myTextViewFirstname"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Firstname" />

これは有効な定義であり、コンパイルして私のAndroidエミュレーターで問題なく機能します。ただし、ご覧のとおり、キャメルケース構文でIDを指定しています。

現在、Androidサンプルでは常に小文字とアンダースコアが使用されています。これは、IDにアンダースコア付きの小文字を使用するための単なる命名規則ですか、それとも実際のデバイスで問題が発生する可能性がありますか?

どうも

回答:


87

キャメルケースID名を使用しても、デバイスは文句を言いません。私の最初のアプリケーションでは、すべてのIDをキャメルケースで記述しました。これは、Javaコードでその方が見栄えがよく、問題なく機能するためです。

キャメルケースについては、次のような2つの異なる命名規則になってしまうので、少しずつ気が変わります。

// This must be undescored due to naming constrictions
setContentView(R.layout.my_long_layout_name);

// Now this looks a little out of place
findViewById(R.id.myLongSpecificId);

私もここの基準について疑問に思っています。グーグルは彼らの例で一貫していません。すべて小文字を使用することもあれば、アンダースコアを挿入することもあり、キャメルケースを使用することもあります。


18
はい、それはまさに私の問題です。レイアウトにはアンダースコア付きの命名規則を使用する必要がありますが、XMLレイアウト定義内のコントロール/ウィジェットを参照するIDにはキャメルケースまたはアンダースコアを使用できます。Googleは実際にいくつかの標準をここで定義する必要があります(まだ定義されていない場合でも、少なくとも何も見つかりませんでした)。したがって、レイアウトを参照する場合でも、ID参照フィールドを参照する場合でも、アプリケーション全体で一貫性を保つのが最善の方法です。
ジュリ

好奇心のために:Googleが矛盾しているリンク、つまりIDにキャメルケース表記を使用しているリンクがありますか?
ジュリ

6
さらに混乱させるために、プロジェクトテンプレートのスタイル名(スタイルのIDのようなもの)はPascalCaseを使用AppBaseThemeしていAppThemeます。
Edward Brey 2013年

4
アンダースコアの方法は、私が関与したチームでは一般的に読みにくいと考えられています。リソースファイル名がキャメルケースであることを許可されていないという奇妙な制限によって、残りのJavaインターフェースの考えが損なわれることはありません-camelCaseはしっかりと染み込んでいて、命名規則で新しい「_」スタイルを強制してくれたことに感謝する人はいないと思います。
RichieHH 2014年

3
@RichardRiley興味深いことに、アンダースコアの場合は単語の境界が適切に定義されているため、キャメルの場合は一緒に押しつぶされているため、キャメルの場合よりもアンダースコアで区切られた名前を解析する方が簡単です。
JAB 2014

13

android.R.id.*フィールドを見てみると、すべてがキャメルケースに入っていることがわかります。したがって、Android IDがキャメルケースで記述されている場合、私はこの規則に従う必要があると思います:)


彼らはキャメルケースで作成されたので、彼らはそこでキャメルケースにあります。これは、コミュニティ全体のコーディングスタイルの前例を設定するものではなく、リソースファイルの命名規則と、元の投稿者が要求しているID文字列の命名規則とは関係ありません。
RichieHH 2014年

3
はい、キャメルケースで作成されました。しかし、これらのIDはAndroid API自体からのものであるため、APIの作成者がラクダのケースを使用している場合、彼の慣習に従うのが良い方法だと思います。
Kiril Aleksandrov

8
そこwidget_frameフィールド[ developer.android.com/reference/android/R.id.html#widget_frame]もで android.R.id.*フィールド。この分野ではGoogleはキャメルケースではなくアンダースコアを使用しているので、ラクダケースの規則についてのあなたの結論は正しいIDの選択に適しています
ahmed hamdy

4

アンダースコア付きのすべての小文字を使用するのが良いと思います。

これを見てください(ダニエルの答えに加えて)

  // Camel Case
    TextView tvUserName = (TextView) findViewById(R.id.tvUserName);
    // Small Caps and Underscores
    TextView tvUserName = (TextView) findViewById(R.id.tv_user_name);

私自身の経験では、キャメルケースを使用するJavaにリンクすると(それが標準であるため)、それがdopplegangerのように見えるため、XMLでのキャメルケースの規則について少し混乱する傾向があります。


これは非常に主観的であり、文字列をIDできるのと同じようにリソースファイルに同じ名前を付けることができない理由についてのQには答えません。
RichieHH 2014年

3

XMLファイルのIDにアンダースコアの規則を使用し、クラスフィールドにキャメルケースの規則を使用すると、すべての開発者がXML IDとクラスフィールドを区別しやすくなります。



3
android:id="@+id/frag_account_button"
frag_account_button = ((ListView)view.findViewById(R.id.frag_account_button));

android:id="@+id/fragAccountButton"
fragAccountButton = ((ListView)view.findViewById(R.id.fragAccountButton));

まず第一に、どれがより適切であるかを定義する特定の基準はありませんが、私はそれについて私自身の考えを持っています。私の考えは、キャメルケースの規約とまったく同じ名前でXML IDとJava変数を維持するのに妥当です。

  1. XML側とJava側の両方でプロジェクトを検索することで、変数に簡単にアクセスできます。

  2. butterKnifeライブラリの定義

    @BindView(R.id.infoTextView)TextViewFont infoTextView;

このようにしておく方が適切です。


3
KotlinのビューバインディングはbutterKnifeと同じ結果を返すため、snake_caseを完全に削除します。
Rik Martins

1

大文字と小文字を区別するファイル名はxmlでサポートされていないため、xmlファイル名(ドローアブルフォルダーで使用されるもの)はすべてアンダースコア文字_で区切って小文字にする必要があります。


1
これはファイル名に関するものではありません。また、一部の人々は、ラクダの大文字と小文字を区別するときに最初の文字を大文字にしないことを好みます。
Jesper、2012年

それは奇妙な矛盾した問題IMOです。区別するために大文字と小文字を区別することはできません。ただし、同じディレクトリに同じ名前のルートコンポーネントを持つリソースファイルを禁止しないのはなぜですか。
RichieHH 2014年

(それはファイル名とリソースIDの関係です:OPを再確認してください)
RichieHH

0

Androidのコンパイラが本当にラクダのケースを制限している(これはかなり奇妙に思えます)ことを実行している場合は、確立された規則に従う必要があります。

穀物に逆らうと、不必要な混乱が生じるだけです。可能な限り、すべての場所で一貫性を保ちます。


あなたはおそらく私が言おうとしていたことを誤解したでしょう。ファイルのようなリソースを入れてキャメルケースで書いた場合、コンパイラは文句を言うでしょう。ただし、もう1つのケースは、XMLレイアウトファイルでIDを指定する場合です。そこにキャメルケースID名を配置する可能性があり、エミュレータは正常に動作します。先ほど触れたように、Googleのサンプルはすべてmy_id_nameの形式ですが、ラクダの大文字のID名を持つ他の多くのサンプルがあります...
Juri
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.