Quy ước đặt tên id Android: chữ thường có dấu gạch dưới so với chữ hoa lạc đà


89

Tôi hiện đang lập trình một ứng dụng cho Android. Bây giờ những gì tôi phát hiện ra là bạn không thể đặt các đối tượng tài nguyên, chẳng hạn như một hình ảnh trong thư mục có thể vẽ và đặt tên nó như "myTestImage.jpg". Điều này sẽ cung cấp cho bạn lỗi trình biên dịch vì cú pháp chữ hoa và chữ thường lạc đà không được phép, vì vậy bạn phải đổi tên nó như "my_test_image.jpg".

Nhưng những gì về id bạn xác định trong tệp XML. Giả sử bạn có định nghĩa sau

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

Đây là một định nghĩa hợp lệ, biên dịch và hoạt động tốt trên trình giả lập Android của tôi mặc dù - như bạn thấy - tôi đang chỉ định id trong cú pháp trường hợp lạc đà.

Giờ đây, các mẫu Android luôn sử dụng chữ thường và dấu gạch dưới. Đây chỉ là một quy ước đặt tên để sử dụng chữ thường với dấu gạch dưới cho id hoặc nó có thể gây ra sự cố trên thiết bị thực?

Cám ơn

Câu trả lời:


87

Thiết bị sẽ không phàn nàn nếu bạn sử dụng tên id vỏ camel. Đối với ứng dụng đầu tiên của tôi, tôi đã viết tất cả các id trong camel-case vì tôi nghĩ rằng nó xuất hiện tốt hơn trong mã Java theo cách đó và nó hoạt động tốt.

Tuy nhiên, tôi đang dần thay đổi ý định về trường hợp lạc đà, vì bạn kết thúc với hai quy ước đặt tên khác nhau - ví dụ:

// 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);

Tôi cũng thắc mắc về các tiêu chuẩn ở đây. Google không nhất quán trong các ví dụ của họ; đôi khi họ sử dụng toàn bộ chữ thường, đôi khi họ chèn dấu gạch dưới, và đôi khi họ sử dụng chữ hoa camel.


18
Vâng, đó chính xác là vấn đề của tôi. Chúng buộc bạn phải sử dụng quy ước đặt tên gạch dưới cho bố cục trong khi bạn có thể sử dụng kiểu chữ hoa camel hoặc gạch dưới cho các điều khiển / tiện ích tham chiếu id bên trong định nghĩa bố cục XML. Google thực sự nên xác định một số tiêu chuẩn ở đây (nếu họ chưa có, ít nhất tôi đã không tìm thấy bất cứ điều gì). Vì vậy, đi theo một cách chắc chắn là tốt nhất để nhất quán trong toàn bộ ứng dụng cho dù bạn tham chiếu bố cục hay trường tham chiếu id.
Juri

Chỉ vì tò mò: Bạn có một liên kết mà Google không nhất quán, nghĩa là nơi họ đã sử dụng ký hiệu hoa camel cho id?
Juri

6
Để làm nhầm lẫn mọi thứ hơn nữa, tên kiểu (giống như ID cho kiểu) trong các mẫu dự án sử dụng PascalCase, ví dụ AppBaseThemeAppTheme.
Edward Brey,

4
Phương pháp gạch dưới thường được coi là ít dễ đọc hơn nhiều trong các nhóm mà tôi đã tham gia. Hạn chế hơi kỳ lạ của tên tệp tài nguyên không được phép đặt trong trường hợp lạc đà sẽ không làm ảnh hưởng đến suy nghĩ của bạn đối với các giao diện Java còn lại - camelCase là đã ăn sâu và tôi không nghĩ bất cứ ai sẽ cảm ơn bạn vì đã áp dụng kiểu "_" mới trong quy ước đặt tên.
RichieHH

3
@RichardRiley Tôi thấy điều đó thật thú vị, như với dấu gạch dưới, các ranh giới từ được xác định đúng cách trong khi với trường hợp lạc đà, chúng được ghép lại với nhau, vì vậy tôi có thời gian dễ dàng hơn khi phân tích các tên được phân tách bằng dấu gạch dưới so với các tên được viết bằng lạc đà.
JAB

13

Nếu bạn nhìn vào android.R.id.*các lĩnh vực, bạn sẽ nhận thấy rằng tất cả chúng đều nằm trong hộp đựng lạc đà. Vì vậy, nếu id android được viết bằng camel-case, tôi đoán chúng ta phải tuân theo quy ước này :)


Chúng ở trong hộp đựng lạc đà ở đó vì chúng được tạo ra trong camelCase. Điều này không đặt ra bất kỳ tiền lệ nào về phong cách mã hóa cho cộng đồng nói chung và điều này không được liên kết với quy ước đặt tên của tệp tài nguyên so với quy ước đặt tên của chuỗi ID, đó là điều mà người đăng ban đầu đang yêu cầu.
RichieHH

3
Vâng, chúng được tạo ra trong hộp đựng lạc đà. Nhưng những ID này là từ chính API android, vì vậy nếu người tạo API đã sử dụng trường hợp lạc đà, tôi đoán đó là một cách tiếp cận tốt để tuân theo quy ước của họ.
Kiril Aleksandrov

8
cũng có widget_frametrường [ developer.android.com/reference/android/R.id.html#widget_frame] trong android.R.id.*các trường. trong trường này Google sử dụng dấu gạch dưới không phải trường hợp lạc đà Vì vậy, kết luận của bạn về quy ước trường hợp lạc đà là đúng, lựa chọn đúng cho quy ước ID có thể sai
ahmed hamdy

4

tôi nghĩ sẽ tốt nếu chúng ta sử dụng tất cả các chữ cái nhỏ với dấu gạch dưới.

Chỉ cần nhìn vào điều này (Thêm vào những gì Daniel đã trả lời)

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

theo kinh nghiệm của riêng tôi, tôi có xu hướng hơi nhầm lẫn với quy ước trường hợp lạc đà trong xml vì khi bạn liên kết nó với Java cũng sử dụng trường hợp lạc đà (vì nó là tiêu chuẩn), nó trông giống như doppleganger.


Điều này rất chủ quan và không trả lời cho câu hỏi tại sao bạn không thể đặt tên tệp tài nguyên tương tự như bạn có thể làm chuỗi ID.
RichieHH

3

Tôi nghĩ rằng nếu chúng ta sử dụng quy ước gạch dưới cho id trong tệp xml và quy ước chữ hoa camel cho các trường lớp thì nó sẽ cung cấp khả năng hiển thị tốt hơn cho mọi nhà phát triển để phân biệt giữa id xml và trường lớp.



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));

Trước hết, không có tiêu chuẩn nhất định nào để xác định cái nào đúng hơn nhưng tôi có ý kiến ​​riêng về điều đó. Ý tưởng của tôi là hợp lý khi giữ id XML và biến java ở cùng một tên với quy ước camel-case.

  1. Có thể dễ dàng tiếp cận biến bằng cách tìm kiếm dự án cả bên XML và bên java.

  2. Định nghĩa thư viện butterKnife

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

Sẽ đúng hơn nếu giữ theo cách này.


3
Liên kết khung nhìn của Kotlin trả về giống như butterKnife, vì vậy tôi đang loại bỏ solid_case hoàn toàn.
Rik Martins

1

tên tệp xml (là những gì được sử dụng trong thư mục có thể vẽ) phải là tất cả các chữ thường được phân tách bằng ký tự gạch dưới _ vì tên tệp viết hoa không được hỗ trợ trong xml.


1
Đây không phải là về tên tệp, và bên cạnh đó, một số người không muốn viết hoa chữ cái đầu tiên khi viết hoa camel.
Jesper

Đó là một vấn đề lạ không tồn tại IMO. Bạn không thể có phân biệt chữ hoa chữ thường để phân biệt, không, nhưng tại sao không chỉ cấm các tệp tài nguyên có cùng tên thành phần gốc trong cùng một thư mục.
RichieHH

(Btw nó là về tên tệp và ID tài nguyên: kiểm tra lại OP)
RichieHH

0

Nếu trình biên dịch của Android thực sự đang làm những gì bạn nói là hạn chế trường hợp lạc đà (có vẻ khá kỳ quặc) thì bạn nên tuân thủ các quy ước đã thiết lập.

Đi ngược lại với hạt sẽ chỉ gây ra sự nhầm lẫn không cần thiết. Giữ mọi thứ nhất quán ở mọi nơi nếu có thể.


Bạn có thể hiểu sai những gì tôi đang cố gắng nói. Trình biên dịch sẽ phàn nàn nếu bạn đặt tài nguyên như một tệp và viết nó trong trường hợp lạc đà. Tuy nhiên, trường hợp khác là khi bạn chỉ định ID trong các tệp bố cục XML. Ở đó bạn có thể đặt tên id trường hợp lạc đà và trình giả lập hoạt động tốt. Như tôi đã đề cập, các mẫu của Google đều có dạng my_id_name, nhưng có rất nhiều mẫu khác xung quanh việc có tên id trường hợp lạc đà ...
Juri
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.