Hari ini saya berdiskusi dengan rekan kerja tentang penamaan final
bidang di kelas Java.
Dalam final
bidang opionionnya juga harus dianggap konstanta karena nilainya tidak akan berubah setelah pembuatan instance.
Ini akan mengarah pada konvensi penamaan untuk final
bidang berikut:
public class Foo {
private static final String BLA_BLA = "bla";
private final String BAR_BATZ;
...
}
Menurut pendapat saya hanya static final
bidang yang harus dianggap konstanta sementara bidang yang hanya final
harus mengikuti konvensi penamaan camelCase biasa.
public class Foo {
private static final String BLA = "bla";
private final String barBatz;
...
}
Sekarang saya agak tidak pasti karena dia adalah programmer yang jauh lebih berpengalaman daripada saya dan saya biasanya setuju dengan pendapatnya dan menganggapnya sebagai pengembang yang sangat baik.
Ada masukan tentang ini?
...
dimaksudkan untuk melambangkan konstruktor yang mungkin yang menetapkanfinal
bidang, tapi itu jelas tidak mungkin untukstatic final
bidang.static { }
blok yang dapat digunakan untuk mengatur bidang statis di dalam kelas satu kali ketika kelas dimuat. Terkait Bekerja dengan konstruktor statis di Jawa .Jawaban:
Sun (dan sekarang Oracle) memelihara sebuah dokumen berjudul Konvensi Kode untuk Bahasa Pemrograman Java . Pembaruan terakhir untuk ini adalah di '99, tetapi esensi dari garis panduan gaya hidup.
Bab 9 membahas konvensi penamaan.
Untuk jenis pengidentifikasi 'konstanta':
Contoh-contoh yang diberikan:
Dalam dokumen yang lebih baru - itu tergelincir di sana. Dari Variabel (Tutorial Java> Mempelajari Bahasa Jawa> Dasar-Dasar Bahasa :
Banyak analisa statis untuk Java berusaha untuk menegakkan ini. Misalnya checkstyle memberlakukan:
Ini benar-benar bermuara pada konvensi komunitas yang menulis kode ... dan idealnya menjaganya tetap sama.
Contoh di atas diberikan sebagai contoh
static final
yang kemungkinan berasal dari konvensi C untuk#define
- yang seperti C, diganti dalam kode selama kompilasi daripada pada saat runtime.Pertanyaan yang kemudian harus ditanyakan adalah "apakah ini berperilaku seperti sebuah konstanta? Atau apakah itu berperilaku seperti bidang yang pernah ditulis?" - dan kemudian mengikuti konvensi yang sesuai. Tes lakmus untuk pertanyaan seperti itu adalah "Jika Anda membuat serial objek, apakah Anda akan memasukkan bidang terakhir?" Jika jawabannya adalah konstanta maka perlakukan seperti itu (dan jangan diserialisasi). Di sisi lain, jika itu adalah bagian dari keadaan objek yang perlu diserialisasi, maka itu bukan konstanta.
Apapun masalahnya, penting untuk tetap dengan gaya kode namun benar atau salah itu. Masalah yang lebih buruk muncul dari konvensi yang tidak konsisten dalam suatu proyek daripada hanya sesuatu yang menyinggung mata. Pertimbangkan untuk mendapatkan beberapa alat analisis statis dan konfigurasikan untuk mempertahankan konsistensi.
sumber
MinWidth
bukannyaMIN_WIDTH
. Pertanyaan lain adalah: bagaimana dengan pembalakan akhir statis? Apakah Anda memanggil merekaLOG
/LOGGER
ataulog
/logger
. Secara pribadi,log
terlihat lebih baik sejalan dengan kode, tetapi kapan inkonsistensi dapat diterima, jika sama sekali?BAR_BATZ
bukan konstanta dalam contoh ini. Konstruktor dariFoo
dapat mengaturnya ke nilai yang berbeda di tingkat objek. Sebagai contohsumber