Android eğitimindeki çoğu alan (sınıf üyeleri) neden `` m` ile başlıyor?


446

Deve durumu kurallarını biliyorum, ama bu m kuralı ile kafam karıştı. Ne anlama geliyor? Ben bir PHP geliştiricisiyim. "Biz" değişkenlerin ilk harflerini boole için 'b', tamsayı için 'i' gibi tür göstergesi olarak kullanırız.

'M' Java bir şey mi? Mobil cihazlar için mi duruyor? karışık?


281
bu önek okunabilirliği
bozmaktan

10
önek olarak tür belirtmek kötüdür ve Macarca gösterim olarak adlandırılır. bkz. thc.org/root/phun/unmaintain.html ve kernel.org/doc/Documentation/CodingStyle
Muayyad Alsadi 24:13

10
çünkü başlamak için java kodu stili hakkında fazla bilgi sahibi değillerdi
Victor Ionescu

10
Bence, yerel değişkenleri üye değişkenlerden ayırt etmekte sorun yaşıyorsanız, bir kod kuralına uymaktan çok daha büyük sorunlarınız var. İşte kullandığım kongre (bazen): Uzun Ömür, Uzun İsim. Kısa Ömür, Kısa İsim. Şimdiye kadar kafam karışmadı.
Brandon

17
Gerçek bir aptal önek. Seterler / alıcılar oluşturmak için IDE'nizi kullanın ve getmName () ve setmName () ile sonuçlanın! Ayrıca nesil belirleyiciler, alıcılar, yapıcılar vb. İçin Lombok gibi araçlar da m önekini üretecektir. Benim seçeneğimde m öneki değer katmaz ve adlandırma kuralından kaldırılmalıdır.
userM1433372

Yanıtlar:


552

Bu gösterim AOSP (Android Açık Kaynak Projesi) Katılımcılar için Kod Stili Yönergeleri'nden alınmıştır :

Alan Adlandırma Kurallarına uyun

  • Herkese açık olmayan, statik olmayan alan adları m ile başlar.
  • Statik alan adları s ile başlar.
  • Diğer alanlar küçük harfle başlar.
  • Genel statik son alanlar (sabitler) ALL_CAPS_WITH_UNDERSCORES.

Bağlantılı stil kılavuzunun kodun Android Açık Kaynak Projesine katkıda bulunacağına dikkat edin.

Bireysel Android uygulamalarının kodu için bir stil kılavuzu değildir.


33
İlginç .. Google Java Kod Stili aslında bu konuda AOSP Kod Stili ile çelişiyor .
Gautam

51
Bence bu zamanlarda saçma, özellikle de uygulamanızda bunu yapmak! "Sınıflarınız ve işlevleriniz onlara ihtiyacınız olmayacak kadar küçük olmalıdır. Ayrıca, üyeleri farklı kılmak için vurgulayan veya renklendiren bir düzenleme ortamı kullanmalısınız. Ayrıca, insanlar görmek için öneki (veya soneki) görmezden gelmeyi öğrenir Kodu ne kadar çok okursak, önekleri o kadar az görürüz. Sonunda önekler görünmeyen karmaşa ve eski kodun bir işareti haline gelir. " - Temiz Kodda Robert Martin
mikugo

4
Çelişkiler Google'ın Java Stil Kılavuzu - "Sabit olmayan alan adları (statik veya başka türlü) lowerCamelCase'de yazılmıştır . ... Örneğin, computedValues..."
AlikElzin-kilaka

Bireysel uygulamalar için, uygulama adının 'm' yerine küçük harf baş harflerini kullanmanızı öneren güzel bir ipucunu hatırlıyorum.
abcoep


83

Kodlama kılavuz satırlarının çoğu, bir sınıfın 'üyeleri' için m kullanır. Böylece programlama yaparken yerel ve üye değişkenler arasındaki farkı görebilirsiniz.


90
Tüm modern IDE'ler, yerlileri ve üyeleri, mönekten daha okunabilir IMHO olan renk / yazı tipine göre ayırır.
Dzmitry Lazerka

5
kabul. M şeyi çok sinir bozucu buluyorum, ama sadece IntelliJ harika olduğu için.
ZakTaccardi


4
@DzmitryLazerka çoğu kod inceleme araçlarında u bu vurgulama seviyesi yoktur. Bu yüzden büyük bir açık kaynak projesinde mantıklı.
JWqvist

@DzmitryLazerka Not defteri veya github ve benzeri kod okumaya ne dersiniz?
user924

57

Nedir mönek?

müye değişkeni veya veri üyesi anlamına gelir. mGenel olmayan ve statik olmayan alanlar için önek kullanın .

Ne Zaman Kullanılır?

private String mCityName;
private float mTemperature;

Ne Zaman Kullanılmamalıdır?

public static int mFirstNumber;
public static final String mDATABASE_NAME;

Ne yaptığım?

Şahsen ben kullanmıyorum. Kodu daha karmaşık hale getirir ve okunabilirliği kaos eder. Kodlama için hala Not Defteri'ni kullanıyorsanız, kelimelerim yok, ancak modern IDE'ler üye ve yerel değişkenleri veya başka bir şeyi vurgulayabilir ve renklendirebilir.

Sonuç

Kullanım? "Evet" veya "Hayır" kişisel tercihinizdir.


1
Ayrıca aşağıdakiler için de kullanabilirsiniz public static int, ancak sbunun yerine mşunları kullanın : public static int sFirstNumber;bkz. stackoverflow.com/a/49453184/7767664
user924 19:03

31

Sınıflardaki üye değişkenleri ise 'm', 'üye' anlamına gelir. Birçok Java programcısı bunu yapar, ancak modern IDE'lerde vurgulama, fareyle araç ipuçları vb.


9
Modern bir IDE ile bile kod tamamlama kullanırken aynı yerde bir sınıf için tüm üye değişkenleri getirmek amacıyla m veya m_ ile üyeleri önek güzel olduğunu iddia ediyorum. Bu, bir sınıfta çalışırken tüm üyelerin bir listesini almak için m_ + ctrl alanına basabileceğiniz anlamına gelir.
Nailer

38
Nailer, bunu kullanarak da başarabilirsin. + ctrl space :)
Romain Guy

3
Ayrıca, kod listesini yazdırırsanız, bu yardımcı olur - orada size yardımcı olacak araç ipuçlarına sahip değilsiniz (evet, kodu yazdırmayı ve kolay bir sandalyede veya hatta yatakta okumayı seviyorum).
B. Clay Shannon

3
@domenicop Ben ön ek değilim, ama sanırım bu fikir bir sınıf içindeki öznitelik türlerini ayırt etmek. Bununla birlikte, genel olarak statik olmayan öznitelikleri, yalnızca bu öznitelikleri içeren ve iş mantığı içermeyen sınıflar (kayıt sınıfları) dışında hiçbir yerde kullanmıyorum. Bu durumda, sınıfta iş mantığı olmadığından m işe yaramaz. Bu nedenle, sınıf dışında okunabilirlik için kaldırmak daha iyidir (bu alanlara başvurduğunuzda).
Joffrey

2
Bence bu önekleri kullanmadan alanları, parametreleri ve değişkenleri kolayca ayırt edemezseniz, kodda bir sorun var demektir. Büyük olasılıkla sınıf veya yöntem çok büyük.
Konrad Morawski

9

Temiz Kod kitabına göre, temiz bir kod değildir.

Üye değişkenlere m öneki eklemenize gerek yoktur . Ayrıca, insanlar adın anlamlı kısmını görmek için öneki veya soneki görmezden gelmeyi öğrenir.


9

Gibi problemleriniz varsa

ayarlayıcılar / alıcılar oluşturmak için IDE'niz olur ve getmName () ve setmName () ile sonuçlanırsınız

Sonra yapmayı unutmayın ( Ayarlar / Editör / Kod Stili / Java / Kod Üretimi ):

resim açıklamasını buraya girin

Güncelleme: Kotlin'de böyle bir şey kullanmıyoruz (bu yüzden ona geçmek daha iyidir ve artık önek kullanmayın)


6

Hangi kod kurallarının kullanıldığının çok bireysel olduğunu düşünüyorum. Değişkenlerimi aşağıdaki öneklerle adlandırmayı tercih ederim:

  • m - Yöntem değişkenleri
  • c - Sınıf değişkenleri
  • p - Parametre değişkenleri

Ama her programcının kendine özgü bir tarzı olduğunu düşünüyorum.


7
Çoğu Java geliştiricisinin sınıf, yöntem, statik ve parametre değişkenleri için farklı görsel stiller ayarlamaya izin veren IDE'leri kullandığını düşünürsek, örneğin statik değişkenler / altı çizili yöntemler, italik sınıf değişkenleri vb. kendi yazı tiplerinizi ve renklerinizi ayarlayabilirsiniz. Ve her zaman çalışacaktır kullandığınız önek ne olursa olsun. Ancak, elbette, IDE'den ayrıldığınızda sihir hepsi gitti.
ccpizza

4

Kodunuzdaki değişkenleri adlandırmak için bu kuralı kesinlikle tedavi etmemeniz gerektiğini kanıtlamak için, aşağıdaki ana Android Studio'dan bir ekran görüntüsü geçiyorum.

M değişkenlerini yerel değişkenlerinizden daha düşük olacak şekilde, bir nesnenin içindeki değişkenleri özel olarak sıralayın . Bu yüzden onları kodunuzda "m" önekiyle adlandırarak bunları kendinizden bir yığın halinde gizlersiniz .

resim açıklamasını buraya girin


3

Bu kod stili bulduğum bir fayda, bir değişkene bazı başvuru otomatik tamamlama sırasında, sadece üye değişkenleri görmek için "m" yazabilirsiniz biliyorum olduğunu.


2

Daha önce de belirtildiği gibi, farklı değişkenler için tasarlanmıştır. Ancak kod üretimi için de çok faydalıdır. "Alt + Insert" tuşlarına basarsanız, en yaygın kod oluşturma özellikleri için pencereler alırsınız. Eğer değişkeniniz için "get" yöntemi oluşturmak istiyorsanız elde edersiniz.

public class Foo{
   private int bar;

   public int getBar(){
       return this.bar;
   }

   public void setBar(int bar){
       this.bar = bar; 
   }

}

Ama eğer "m, s" yazarsanız:

public class Foo{
private int mBar;

public int getBar(){
   return mBar;
}

public void setBar(int bar){
   mBar = bar;
}
}

Otomatik olarak oluşturulacak ve "m" veya "s" kurucunuzdan silinecek, get, set yöntemleri adı. Bundan sonra alan için "get" 've "set" "m" olmadan oluşturulur. Andoroid Fle-> Ayar-> Kod Stili-> Java-> Kod Üretimi. Ve bir resimdeki gibi yap. Belki yardımcı olacaktır. Eng için özür dilerim. Android'i yapılandır


2

Bazı eski Android / Google mühendislerinin üye değişkenleri 'm' ile başlatmaları kişisel bir tercih gibi görünüyor ve bunu tavsiye ettiler.

Şimdi bu kural, AOSP katkısı olmayan şirketlerde geliştiricilerin boğazına zorlanıyor, çünkü bu sayfa Android Kod Stili kuralları olarak kabul ediliyor. Bu kuralın faydası çok azdır. Google, kaldırmayı düşünmelidir. Aksi takdirde, lütfen Kod Stili Kurallarından hangisinin isteğe bağlı olduğunu Android Uygulamaları için belirtin.

Https://code.google.com/p/android/issues/detail?id=226814 kuralı kaldırmak için lütfen destek dilekçenizi bu kampanyaya ekleyin


2

Okunabilirlik açısından, Android Studio gibi modern bir IDE kullanıyorsanız müye değişkenler ve sstatik alanlar için kurallar artık kullanılmamalıdır. Android Studio, mveya eklemeden olanlar arasında ayrım yapabilir s.


1

Sınıf / Örnek'te "Bu değişken benimdir ve başka hiç kimse buna ulaşamaz." Statik olmaktan farklı olarak, yalnızca Sınıf tarafından kullanılabilir olsa da, bu sınıfın tüm örnekleri tarafından paylaşılır. Daireler çiziyormuşsunuz gibi, her dairenin yarıçapının ne kadar büyük olduğunu bilmeniz gerekir

    private double mRadius;

ancak aynı zamanda bir sayacın tüm daireleri takip etmesini istersiniz, daire sınıfının içinde

    private static int sCircleCount;

ve şu anda sahip olduğunuz çevrelerin sayısını artırmak ve azaltmak için statik üyelere sahip olun.


1

Adlandırma kuralları aşağıdadır,

  • Herkese açık olmayan, statik olmayan alan adları m ile başlar.
  • Statik alan adları s ile başlar.
  • Diğer alanlar küçük harfle başlar.
  • Genel statik son alanlar (sabitler) ALL_CAPS_WITH_UNDERSCORES.

Misal:

public class MyClass {
    public static final int SOME_CONSTANT = 42;
    public int publicField;
    private static MyClass sSingleton;
    int mPackagePrivate;
    private int mPrivate;
    protected int mProtected;
}
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.