Mengapa sebagian besar bidang (anggota kelas) dalam tutorial Android dimulai dengan `m`?


446

Saya tahu tentang aturan kasus unta, tapi saya bingung dengan aturan ini. Apa artinya itu? Saya seorang pengembang PHP. "Kami" menggunakan huruf pertama dari variabel sebagai indikasi tipe, seperti 'b' untuk boolean, 'i' untuk integer dan sebagainya.

Apakah ini hal yang Jawa? Apakah ini berdiri untuk seluler? Campuran?


281
awalan itu tidak mengacaukan keterbacaan ...
Dapeng

10
menunjukkan tipe sebagai awalan yang buruk dan disebut notasi Hungaria lihat thc.org/root/phun/unmaintain.html dan kernel.org/doc/Documentation/CodingStyle
Muayyad Alsadi

10
karena mereka tidak memiliki banyak pengetahuan tentang gaya kode java untuk memulai
Victor Ionescu

10
Menurut pendapat saya, jika Anda mengalami kesulitan membedakan variabel lokal dari variabel anggota, Anda memiliki masalah yang jauh lebih besar daripada menyesuaikan diri dengan konvensi kode. Inilah konvensi yang saya gunakan (kadang-kadang): Umur Panjang, Nama Panjang. Kehidupan Singkat, Nama Singkat. Belum bingung sejauh ini.
Brandon

17
Awalan yang benar-benar bodoh. Gunakan IDE Anda untuk menghasilkan setter / getter dan Anda berakhir dengan getmName () dan setmName ()! Juga alat-alat seperti Lombok untuk setter generasi, getter, konstruktor dll akan menghasilkan awalan m. Dalam pilihan saya awalan m tidak menambah nilai dan harus dihapus dari konvensi penamaan.
userM1433372

Jawaban:


551

Notasi ini berasal dari Pedoman Gaya Kode Proyek AOSP (Android Open Source) untuk Kontributor :

Ikuti Konvensi Penamaan Bidang

  • Nama bidang non-publik, non-statis dimulai dengan m.
  • Nama bidang statis dimulai dengan s.
  • Bidang lain dimulai dengan huruf kecil.
  • Bidang final statis publik (konstanta) adalah ALL_CAPS_WITH_UNDERSCORES.

Perhatikan bahwa panduan gaya tertaut adalah untuk kode yang akan dikontribusikan ke Proyek Sumber Terbuka Android.

Ini bukan panduan gaya untuk kode masing-masing aplikasi Android.


33
Menarik .. Gaya Kode Google Java sebenarnya bertentangan dengan Gaya Kode AOSP mengenai hal ini.
Gautam

51
Saya pikir di masa-masa ini adalah omong kosong, terutama untuk melakukannya di aplikasi Anda! "Kelas dan fungsi Anda harus cukup kecil sehingga Anda tidak membutuhkannya. Dan Anda harus menggunakan lingkungan pengeditan yang menyoroti atau mewarnai anggota untuk membuat mereka berbeda. Selain itu, orang dengan cepat belajar untuk mengabaikan awalan (atau akhiran) untuk melihat bagian yang bermakna dari nama. Semakin banyak kita membaca kode, semakin sedikit kita melihat awalan. Akhirnya awalan menjadi berantakan dan penanda kode yang lebih tua. " - Robert Martin dalam Clean Code
mikugo

4
Kontradiksi Panduan Gaya Java Google - "Nama bidang yang tidak konstan (statis atau lainnya) ditulis dalam lowerCamelCase. ... Misalnya, computedValues..."
AlikElzin-kilaka

Untuk masing-masing aplikasi, saya ingat tip yang bagus menyarankan untuk menggunakan inisial huruf kecil dari nama aplikasi alih-alih 'm'.
abcoep

4
Silakan tambahkan komentar Anda untuk permohonan ini untuk menghapus aturan code.google.com/p/android/issues/detail?id=226814
likejudo

83

Banyak baris panduan pengkodean menggunakan m untuk 'anggota' kelas. Jadi ketika Anda pemrograman Anda bisa melihat perbedaan antara variabel lokal dan anggota.


90
Semua IDE modern membedakan penduduk lokal dan anggota dengan warna / font, yang merupakan cara IMHO lebih mudah dibaca daripada mawalan.
Dzmitry Lazerka

5
sepakat. Saya menemukan hal yang sangat mengganggu, tetapi hanya karena IntelliJ menjadi luar biasa.
ZakTaccardi

Silakan tambahkan komentar Anda untuk permohonan ini untuk menghapus aturan code.google.com/p/android/issues/detail?id=226814
likejudo

4
@DzmitryLazerka di sebagian besar alat peninjau kode Anda tidak memiliki tingkat penyorotan ini. Jadi itu masuk akal dalam proyek open source besar.
JWqvist

@DzmitryLazerka bagaimana dengan membaca kode di notepad atau github dan sebagainya?
user924

57

Apa itu mawalan?

msingkatan variabel anggota atau anggota data. Gunakan mawalan untuk bidang non-publik dan non-statis.

Kapan Harus Digunakan?

private String mCityName;
private float mTemperature;

Kapan tidak digunakan?

public static int mFirstNumber;
public static final String mDATABASE_NAME;

Apa yang saya lakukan?

Secara pribadi, saya tidak menggunakannya. Itu membuat kode lebih rumit dan kekacauan keterbacaan. Jika Anda masih menggunakan Notepad untuk pengkodean saya tidak memiliki kata-kata, tetapi IDE modern mampu menyoroti dan mewarnai variabel anggota dan lokal atau apa pun.

Kesimpulan

Menggunakan? "Ya" atau "Tidak" adalah pilihan pribadi Anda.


1
Anda juga dapat menggunakannya untuk public static int, tetapi menggunakan sbukannya m: public static int sFirstNumber;, lihat stackoverflow.com/a/49453184/7767664
user924

31

Jika variabel anggota di kelas, 'm' berarti 'anggota'. Banyak programmer Java melakukan itu, meskipun dengan IDE modern itu tidak diperlukan karena Anda telah menyoroti, mengarahkan mouse ke tooltips, dll.


9
Saya berpendapat bahwa bahkan dengan IDE modern itu baik untuk awalan anggota dengan m atau m_ untuk tujuan membesarkan semua variabel anggota untuk kelas di tempat yang sama saat menggunakan penyelesaian kode. Ini berarti bahwa ketika Anda bekerja di kelas, Anda bisa menekan spasi m_ + ctrl untuk mendapatkan daftar semua anggota.
Nailer

38
Nailer, Anda dapat mencapai hal yang sama dengan menggunakan ini. + ctrl space :)
Romain Guy

3
Juga, jika Anda mencetak daftar kode, itu sangat membantu - Anda tidak memiliki tooltips untuk membantu Anda di luar sana (ya, saya suka mencetak kode dan membacanya di kursi malas atau bahkan di tempat tidur sewaktu-waktu).
B. Clay Shannon

3
@domenicop Saya bukan awalan m-, namun saya kira idenya adalah untuk membedakan antara jenis atribut dalam kelas. Yang sedang berkata, saya biasanya tidak menggunakan atribut publik non-statis di mana pun, kecuali di kelas yang secara eksklusif berisi atribut tersebut dan tidak ada logika bisnis (catatan kelas). Dalam hal ini, m tidak berguna karena tidak ada logika bisnis di kelas. Oleh karena itu, lebih baik untuk menghapusnya agar mudah dibaca di luar kelas (ketika Anda referensi bidang ini)
Joffrey

2
Menurut pendapat saya jika Anda tidak dapat dengan mudah membedakan antara bidang, parameter dan variabel tanpa menggunakan awalan seperti itu, itu berarti ada sesuatu yang salah dengan kode. Kemungkinan besar kelas atau metodenya terlalu besar.
Konrad Morawski

9

Menurut buku Clean Code, ini bukan kode bersih.

Anda tidak perlu membuat awalan variabel anggota dengan m . Selain itu, orang dengan cepat belajar untuk mengabaikan awalan atau akhiran untuk melihat bagian bermakna dari nama tersebut.


9

Jika Anda memiliki masalah seperti

IDE Anda untuk menghasilkan setter / getter dan Anda berakhir dengan getmName () dan setmName ()

Jangan lupa lakukan selanjutnya ( Pengaturan / Editor / Gaya Kode / Java / Pembuatan Kode ):

masukkan deskripsi gambar di sini

Perbarui: kami tidak menggunakan sesuatu seperti ini di Kotlin (jadi lebih baik beralih ke itu dan tidak menggunakan awalan lagi)


6

Saya pikir ini sangat individual yang menggunakan konvensi kode. Saya lebih suka memberi nama variabel saya dengan awalan berikut:

  • m - Variabel metode
  • c - Variabel kelas
  • p - Variabel parameter

Tapi saya rasa setiap programmer memiliki gayanya masing-masing.


7
Menimbang bahwa sebagian besar pengembang Java menggunakan IDE yang memungkinkan pengaturan berbagai gaya visual untuk variabel kelas, metode, statis, dan parameter, saya merasa jauh lebih berguna untuk memiliki misalnya variabel statis / metode yang digarisbawahi, variabel kelas dalam huruf miring, dll. Dan tentu saja Anda dapat mengatur font dan warna Anda sendiri. Dan itu akan selalu berhasil, apa pun awalan yang Anda gunakan. Tapi, tentu saja, keajaibannya hilang ketika Anda meninggalkan IDE.
ccpizza

4

Untuk membuktikan bahwa Anda seharusnya tidak memperlakukan konvensi ini untuk variabel penamaan dalam kode Anda, saya melewatkan tangkapan layar dari induk Android Studio di sini.

Temukan variabel di dalam objek yang diurutkan khusus untuk menempatkan variabel-m lebih rendah dari variabel asli Anda . Jadi dengan memberi nama mereka dalam kode Anda dengan "m" awalan, Anda menyembunyikannya di tumpukan dari diri Anda sendiri .

masukkan deskripsi gambar di sini


3

Satu manfaat yang saya temukan dari gaya kode ini, adalah ketika selama auto-complete dari beberapa referensi ke suatu variabel, saya tahu bahwa saya dapat mengetik "m" untuk melihat hanya variabel anggota.


2

Seperti yang disebutkan sebelumnya, itu ditata untuk variabel yang berbeda. Tetapi juga sangat berguna untuk pembuatan kode. Jika Anda menekan "Alt + Insert" Anda akan mendapatkan windows untuk properti pembuatan kode paling umum. Jika Anda ingin menghasilkan metode "get" untuk variabel Anda, Anda akan mendapatkannya.

public class Foo{
   private int bar;

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

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

}

Tetapi jika Anda menyatakan "m, s" Anda akan mendapatkan:

public class Foo{
private int mBar;

public int getBar(){
   return mBar;
}

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

Ini akan secara otomatis dihasilkan dan "m" atau "s" dihapus dari konstruktor Anda, dapatkan, atur nama metode. Setelah ini "get" 'dan "set" untuk bidang akan dihasilkan tanpa "m". Andoroid Fle-> Setting-> Code Style-> Java-> Genenretion Code. Dan buat seperti pada gambar. Mungkin itu akan membantu. Maaf untuk eng saya. Konfigurasikan android


2

Tampaknya telah menjadi preferensi pribadi dari beberapa insinyur Android / Google awal untuk memulai variabel anggota dengan 'm' dan mereka merekomendasikannya.

Sekarang aturan ini dipaksakan ke tenggorokan pengembang di perusahaan yang bukan kontributor AOSP, hanya karena halaman itu dianggap sebagai aturan Gaya Kode Android. Ada sedikit jika ada manfaat dalam aturan itu. Google harus mempertimbangkan untuk menghapusnya. Kalau tidak, sebutkan bahwa untuk Aplikasi Android yang mana dari Aturan Gaya Kode adalah opsional.

Harap tambahkan komentar Anda tentang dukungan pada petisi ini untuk menghapus aturan https://code.google.com/p/android/issues/detail?id=226814


2

Sebagai pembacaan, konvensi muntuk variabel anggota dan suntuk bidang statis tidak boleh digunakan lagi jika Anda menggunakan IDE modern seperti Android Studio. Android Studio dapat membedakan antara yang tanpa menambahkan matau s.


1

Dapat juga dinyatakan bahwa itu adalah singkatan dari "mine", seperti dalam Class / Instance mengatakan "Variabel ini adalah milikku dan tidak ada orang lain yang bisa mendapatkannya." Berbeda dengan statis yang, walaupun mungkin hanya tersedia untuk Kelas tetapi dibagi oleh semua instance dari kelas itu. Seperti jika Anda menggambar lingkaran, Anda harus tahu seberapa besar radius setiap lingkaran

    private double mRadius;

tetapi pada saat yang sama Anda ingin penghitung untuk melacak semua lingkaran, di dalam kelas lingkaran yang bisa Anda miliki

    private static int sCircleCount;

dan kemudian hanya memiliki anggota statis untuk menambah dan mengurangi jumlah lingkaran yang saat ini Anda miliki.


1

Berikut ini adalah konvensi penamaan,

  • Nama bidang non-publik, non-statis dimulai dengan m.
  • Nama bidang statis dimulai dengan s.
  • Bidang lain dimulai dengan huruf kecil.
  • Bidang final statis publik (konstanta) adalah ALL_CAPS_WITH_UNDERSCORES.

Contoh:

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;
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.