Konvensi penamaan ID Android: huruf kecil dengan garis bawah vs. huruf besar / kecil

89

Saya sedang memprogram aplikasi untuk Android. Sekarang yang saya temukan adalah Anda tidak dapat menempatkan objek sumber daya, misalnya, gambar dalam folder drawable dan beri nama seperti "myTestImage.jpg". Ini akan memberi Anda kesalahan kompiler karena sintaks kasus unta tidak diizinkan, jadi Anda harus mengganti namanya seperti "my_test_image.jpg".

Tapi bagaimana dengan id yang Anda tentukan di file XML. Katakanlah Anda memiliki definisi berikut

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

Ini adalah definisi yang valid, mengkompilasi dan berfungsi dengan baik di emulator Android saya meskipun - seperti yang Anda lihat - saya menentukan id dalam sintaks kasus unta.

Sekarang, sampel Android selalu menggunakan huruf kecil dan garis bawah. Apakah ini hanya konvensi penamaan untuk menggunakan huruf kecil dengan garis bawah untuk id atau mungkin itu menyebabkan masalah pada perangkat sebenarnya?

Terima kasih

Juri
sumber

Jawaban:

87

Perangkat tidak akan mengeluh jika Anda menggunakan nama id kasus unta. Untuk aplikasi pertama saya, saya menulis semua ID dalam camel-case karena menurut saya tampilannya lebih baik dalam kode Java seperti itu, dan berfungsi dengan baik.

Saya perlahan-lahan berubah pikiran tentang tas unta, karena Anda berakhir dengan dua konvensi penamaan yang berbeda - misalnya:

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

Saya juga bertanya-tanya tentang standar di sini. Google tidak konsisten dalam contoh mereka; terkadang mereka menggunakan huruf kecil semua, terkadang mereka memasukkan garis bawah, dan terkadang mereka menggunakan case unta.

Dan Lew
sumber
18
Ya, itulah masalah saya. Mereka memaksa Anda untuk menggunakan konvensi penamaan yang digarisbawahi untuk tata letak sementara Anda dapat menggunakan camel-case atau garis bawah untuk id yang mereferensikan kontrol / widget di dalam definisi tata letak XML. Google harus benar-benar menetapkan beberapa standar di sini (jika mereka belum melakukannya, setidaknya saya tidak menemukan apa pun). Jadi menggunakan satu cara pasti yang terbaik untuk konsisten di seluruh aplikasi apakah Anda mereferensikan tata letak atau bidang yang direferensikan id.
Juri
Hanya untuk penasaran: Apakah Anda memiliki tautan di mana Google tidak konsisten, yang berarti di mana mereka menggunakan notasi kasus unta untuk id?
Juri
6
Untuk membingungkan lebih jauh, nama gaya (yang seperti ID untuk gaya) dalam template proyek menggunakan PascalCase, misalnya AppBaseThemedan AppTheme.
Edward Brey
4
Metode garis bawah umumnya dianggap kurang dapat dibaca dalam tim yang pernah saya ikuti. Batasan yang agak aneh dari nama file sumber daya yang tidak diizinkan dalam kasus unta seharusnya tidak mencemari pemikiran Anda untuk antarmuka Java lainnya - camelCase adalah tertanam kuat dan saya rasa tidak ada yang akan berterima kasih karena Anda memaksakan gaya "_" baru dalam konvensi penamaan.
RichieHH
3
@RichardRiley Menurut saya hal itu menarik, karena dengan garis bawah, batas kata didefinisikan dengan benar sementara dengan kotak unta mereka disatukan jadi saya memiliki waktu yang lebih mudah untuk mengurai nama yang dipisahkan garis bawah daripada yang menggunakan kerangka unta.
JAB
13

Jika Anda melihat ke android.R.id.*ladang, Anda akan melihat bahwa semuanya ada dalam kotak unta. Jadi jika id android ditulis dalam camel-case, saya rasa kita harus mengikuti konvensi ini :)

Kiril Aleksandrov
sumber
Mereka ada di dalam tas unta di sana karena mereka diciptakan dalam camelCase. Ini tidak menetapkan preseden gaya pengkodean apa pun untuk komunitas pada umumnya dan ini tidak terkait dengan konvensi penamaan file sumber daya vs string ID yang ditanyakan oleh pengirim asli.
RichieHH
3
Ya, mereka diciptakan dalam wadah unta. Tetapi ID ini berasal dari Android API itu sendiri jadi jika pembuat API telah menggunakan case camel, saya kira itu adalah pendekatan yang baik untuk mengikuti konvensi ini.
Kiril Aleksandrov
8
ada kolom widget_frame[ developer.android.com/reference/android/R.id.html#widget_frame] juga di android.R.id.*kolom. dalam bidang ini Google gunakan garis bawah bukan camel-case Jadi kesimpulan Anda tentang konvensi case-unta yang benar memilih untuk konvensi ID mungkin salah
ahmed hamdy
4

Saya rasa itu bagus jika kita menggunakan semua huruf kecil dengan garis bawah.

Lihat saja ini (Menambah apa yang telah dijawab Daniel)

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

menurut pengalaman saya sendiri saya cenderung sedikit bingung dengan konvensi camel case di xml karena ketika anda menautkannya ke Java yang juga menggunakan camel case (karena sudah standar) terlihat seperti doppleganger.

Rogene Sagmit
sumber
Ini sangat subjektif dan tidak menjawab pertanyaan Q tentang mengapa Anda tidak dapat menamai file sumber daya dengan cara yang sama seperti yang Anda dapat ID string.
RichieHH
3

Saya pikir jika kita menggunakan konvensi garis bawah untuk id dalam file xml dan konvensi kasus unta untuk bidang kelas maka itu akan memberikan visibilitas yang lebih baik untuk setiap pengembang untuk membedakan antara id xml dan bidang kelas.

Yasir Ali
sumber
3

Jika Anda melihat beberapa contoh aplikasi Google seperti:

https://github.com/google/iosched

Mereka menggunakan garis bawah. Jadi .... mungkin begitulah seharusnya kita melakukannya?

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

Pertama-tama, tidak ada standar pasti untuk menentukan mana yang lebih Layak tapi saya punya ide sendiri tentang itu. Ide saya masuk akal untuk menjaga XML id dan variabel java dengan nama yang sama persis dengan konvensi kasus unta.

  1. Sangat mudah untuk menjangkau variabel dengan mencari proyek di sisi XML dan java.

  2. definisi perpustakaan butterKnife

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

Lebih tepat untuk tetap seperti ini.

Samet ÖZTOPRAK
sumber
3
Pengikatan tampilan Kotlin mengembalikan sama seperti butterKnife, jadi saya menghapus snake_case sama sekali.
Rik Martins
1

Nama file xml (yang digunakan dalam folder drawable) harus menggunakan huruf kecil semua dipisahkan oleh karakter garis bawah _ karena nama file dalam huruf besar tidak didukung dalam xml.

Paul
sumber
1
Ini bukan tentang nama file, dan selain itu, beberapa orang lebih memilih untuk tidak menggunakan huruf pertama saat menggunakan casing unta.
Jesper
Ini IMO masalah tidak konsisten yang aneh. Anda tidak dapat memiliki sensitivitas huruf untuk membedakan, tidak, tetapi mengapa tidak melarang file sumber daya yang memiliki komponen root nama yang sama di direktori yang sama.
RichieHH
(Btw itu tentang nama file vs ID sumber daya: periksa ulang OP)
ngomong RichieHH
0

Jika compiler Android benar-benar melakukan apa yang Anda katakan dengan membatasi camel case (yang tampaknya agak aneh) maka Anda harus tetap berpegang pada konvensi yang telah ditetapkan.

Melawan arus hanya akan menyebabkan kebingungan yang tidak perlu. Jaga konsistensi di semua tempat jika memungkinkan.

Brock Woolf
sumber
Anda mungkin salah paham tentang apa yang ingin saya katakan. Kompilator akan mengeluh jika Anda meletakkan sumber daya seperti file dan menuliskannya dalam kasus camel. Namun kasus lainnya adalah ketika Anda menentukan ID dalam file layout XML. Di sana Anda memiliki kemungkinan untuk menempatkan nama id kasus-unta dan emulator berfungsi dengan baik. Sekarang seperti yang saya sebutkan, sampel Google semuanya dalam bentuk my_id_name, tetapi ada banyak sampel lain yang memiliki nama id kasus unta ...
Juri