Android kimlik adlandırma kuralı: alt çizgi ile deve harfleri arasındaki küçük harf


90

Şu anda Android için bir uygulama programlıyorum. Şimdi öğrendiğim şey, kaynak nesnelerini, örneğin bir resmi çekilebilir klasöre yerleştirip "myTestImage.jpg" olarak adlandıramayacağınızdır. Deve durumu sözdizimine izin verilmediğinden, bu size bir derleyici hatası verecektir, bu nedenle "test_resim.jpg" olarak yeniden adlandırmanız gerekir.

Peki ya XML dosyasında tanımladığınız kimlikler? Aşağıdaki tanıma sahip olduğunuzu varsayalım

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

Bu geçerli bir tanımdır, derler ve Android emülatörümde gayet iyi çalışır, ancak - gördüğünüz gibi - camel case sözdiziminde kimliği belirtiyorum.

Şimdi, Android örnekleri her zaman küçük harf ve alt çizgi kullanır. Bu, kimlikler için alt çizgi ile küçük harf kullanımı için bir adlandırma kuralı mı yoksa gerçek cihazda sorunlara neden olabilir mi?

Teşekkür

Yanıtlar:


87

Deve çantası kimlik adlarını kullanırsanız cihaz şikayet etmeyecektir. İlk uygulamam için tüm kimlikleri deve durumunda yazdım çünkü Java kodunda bu şekilde daha iyi göründüğünü düşünüyorum ve gayet iyi çalışıyor.

Yine de deve vakası konusunda fikrimi yavaşça değiştiriyorum, çünkü sonunda iki farklı adlandırma kuralına sahipsiniz - örneğin:

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

Ben de buradaki standartları merak ediyorum. Google, örneklerinde tutarsızdır; bazen tümü küçük harf kullanırlar, bazen alt çizgi eklerler ve bazen deve harfleri kullanırlar.


19
Evet, bu benim sorunum. XML mizanpaj tanımları içindeki kontrollere / widget'lara referans veren kimlikler için deve durumunu veya altı çizili olanı kullanırken, mizanpajlar için altı çizili adlandırma kuralını kullanmaya zorlarlar. Google burada gerçekten bazı standartlar tanımlamalı (zaten yapmadıysa, en azından hiçbir şey bulamadım). Dolayısıyla, ister düzenlere ister kimlik referanslı alanlara başvuruyor olun, uygulama boyunca tutarlı olmanın en iyisi olduğundan emin olun.
Juri

Sadece merak için: Google'ın tutarsız olduğu, yani kimlikler için deve-büyük-küçük harf gösterimini kullandıkları bir bağlantınız var mı?
Juri

6
İşleri daha da karıştırmak için, proje şablonlarındaki stil isimleri (stiller için ID'ler gibi) PascalCase kullanır, örneğin AppBaseThemeve AppTheme.
Edward Brey

4
Alt çizgi yöntemi, dahil olduğum ekiplerde genellikle çok daha az okunabilir olarak kabul edilir. Deve durumunda olmasına izin verilmeyen kaynak dosya adlarının biraz garip sınırlaması, Java arayüzlerinin geri kalanı için düşüncenizi kirletmemelidir - camelCase sağlam bir şekilde kökleşmiş ve adlandırma kurallarında yeni bir "_" stili uyguladığınız için kimsenin size teşekkür edeceğini sanmıyorum.
RichieHH

3
@RichardRiley Bunu ilginç buluyorum, altçizgilerde olduğu gibi, kelime sınırları düzgün bir şekilde tanımlanırken, deve durumunda birlikte sıkıştırılırlar, böylece alt çizgi ile ayrılmış isimleri ayrıştırmada deve kasalı isimlere göre daha kolay bir zamanım var.
JAB

13

android.R.id.*Tarlalara bakarsanız hepsinin deve sandığı içinde olduğunu fark edeceksiniz. Yani android kimlikleri deve durumunda yazılırsa, sanırım bu sözleşmeye uymamız gerekiyor :)


CamelCase'de yaratıldıkları için orada deve davasındalar. Bu, genel olarak topluluk için herhangi bir kodlama stili emsali oluşturmaz ve bu, kaynak dosyalarının adlandırma kurallarına karşı orijinal posterin sorduğu kimlik dizelerinin adlandırma kurallarıyla bağlantılı değildir.
RichieHH

3
Evet, deve durumunda yaratıldılar. Ancak bu kimlikler android API'nin kendisinden geliyor, bu nedenle API'nin yaratıcısı deve vakası kullandıysa, sanırım onun kurallarını takip etmek iyi bir yaklaşımdır.
Kiril Aleksandrov

8
Orada widget_frametarla [ developer.android.com/reference/android/R.id.html#widget_frame] Ayrıca android.R.id.*alanlar. Google bu alanda deve vakası değil alt çizgi kullanın. Bu nedenle, deve vakası konvansiyonu hakkındaki sonucunuz doğru kimlik konvansiyonu seçimi yanlış olabilir
ahmed hamdy

4

Tüm küçük harfleri alt çizgi ile kullanmamızın iyi olacağını düşünüyorum.

Sadece şuna bak (Daniel'in yanıtladığı şeye ekleyerek)

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

Kendi tecrübelerime göre, xml'deki deve vakası konvansiyonu konusunda biraz kafa karıştırmaya meyilliyim çünkü onu aynı zamanda deve kasası kullanan Java'ya bağladığınızda (çünkü bu standarttır) bir doppleganger gibi görünüyor.


Bu çok özneldir ve dizeleri tanımlayabildiğiniz için kaynak dosyalarını neden benzer şekilde adlandıramadığınıza dair Q'ya cevap vermez.
RichieHH

3

Xml dosyalarında id için alt çizgi kuralı ve sınıf alanları için deve durum kuralı kullanırsak, xml kimlikleri ve sınıf alanları arasında ayrım yapmak için her geliştiriciye daha iyi görünürlük sağlayacaktır.



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

Her şeyden önce, hangisinin daha Uygun olduğunu tanımlayacak belirli bir standart yok ama bu konuda kendi fikrim var. Benim fikrim, XML id ve java değişkenini deve-durum konvansiyonu ile aynı isimde tutmak mantıklı.

  1. Projeyi hem XML hem de java tarafında arayarak değişkene ulaşmak kolaydır.

  2. butterKnife kütüphane tanımı

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

Bu şekilde tutmak daha doğrudur.


3
Kotlin'in görüş bağlaması butterKnife ile aynı şeyi döndürüyor, bu yüzden snake_case'i tamamen bırakıyorum.
Rik Martins

1

xml dosya adlarının (çekilebilir klasörde kullanılan) tümü küçük harfle alt çizgi karakteri ile ayrılmalıdır, çünkü büyük harfli dosya adları xml'de desteklenmez.


1
Bu, dosya isimleriyle ilgili değildir ve ayrıca, bazı insanlar deve kılıfı takarken ilk harfi büyük yazmamayı tercih eder.
Jesper

Bu garip tutarsız bir konu IMO. Ayırmak için büyük / küçük harf duyarlılığına sahip olamazsınız, hayır, ancak neden aynı dizinde kök bileşen adı aynı olan kaynak dosyalarını yasaklamıyorsunuz?
RichieHH

(Btw it, dosya adları ve kaynak kimlikleri hakkındadır:
OP'yi

0

Android'in derleyicisi gerçekten deve durumunu kısıtlayarak söylediklerinizi gerçekten yapıyorsa (ki bu oldukça tuhaf görünüyor), o zaman yerleşik kurallara bağlı kalmalısınız.

Tahıllara karşı çıkmak yalnızca gereksiz kafa karışıklığına neden olur. Mümkün olan her yerde her şeyin tutarlı olmasını sağlayın.


Muhtemelen söylemeye çalıştığımı yanlış anladınız. Kaynakları bir dosya gibi koyup bunu deve durumunda yazarsanız derleyici şikayet edecektir. Ancak diğer durum, XML düzen dosyalarında kimlikler belirttiğiniz zamandır. Orada deve kasası kimlik isimlerini yerleştirme olanağınız var ve emülatör gayet iyi çalışıyor. Şimdi bahsettiğim gibi, Google örneklerinin hepsi my_id_name biçiminde, ancak deve-büyük-küçük harf adlarına sahip olmakla ilgili başka birçok örnek var ...
Juri
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.