Saya tahu bahwa konvensi di Java untuk getter boolean menyertakan awalan "adalah".
isEnabled
isStoreOpen
Tetapi bagaimana jika subjeknya jamak? Artinya, bagaimana jika alih-alih ingin tahu apakah sebuah toko buka, saya ingin tahu apakah semua toko buka?
isStoresOpen()
tidak masuk akal dalam bahasa Inggris.
Saya tergoda untuk menulis getter seperti:
areStoresOpen
areDogsCute
areCatsFuzzy
Dan saya pikir itu akan masuk akal, tapi saya telah diberitahu oleh orang lain bahwa saya hanya harus menyedot itu dan meninggalkan subjek kata kerja perjanjian dan penggunaan isStoresOpen
, isDogsCute
, isCatsFuzzy
.
Bagaimanapun, apa yang harus saya lakukan untuk pengambil boolean yang beroperasi pada subjek jamak?
java
naming-conventions
boolean
kodai
sumber
sumber
are*()
getter.are*()
getter jika secara tata bahasa benar.is
atauhas
...Jawaban:
Saya tidak dapat mengingat dari buku mana ini, tetapi intinya adalah bahwa kode akan dibaca lebih banyak daripada yang tertulis. Menulis agar mudah dibaca.
sumber
storesAreOpen()
mungkin akan menjadi yang paling gramatikal (karenaif(storesAreOpen())
), tetapi bagian boolean dari nama tersebut sekarang tersembunyi di tengah nama metode, yang melanggar konvensi Java dan kode yang dapat dibaca.Bagaimana kalau memiliki bahasa Inggris yang cukup baik dan mengikuti standar Java:
isEveryStoreOpen()
atauisEachCatCute()
Jika ragu dengan kata yang tepat, saya selalu ingin mempelajari tesaurus.
sumber
boolean
sis
konvensi awalan. Selain itu, ini memberikan sedikit info tambahan yang akan sangat berguna bagi penutur bahasa Inggris non-asli yang kebetulan merupakan pengelola basis kode.Ketentuannya adalah mengawali metode pengambil dengan "adalah" bukan variale itu sendiri.
misalnya
private boolean enabled; public boolean isEnabled() { return enabled; }
dan
private boolean storesOpen; public boolean isStoresOpen() { return storesOpen; }
Ini mungkin tidak masuk akal secara gramatikal, tetapi mengikuti konvensi dan terlihat cukup mudah dibaca.
sumber
Spesifikasi Java Bean mengatakan untuk digunakan
get
untuk getter kecuali jika ituboolean
digunakanis
.are
tidak standar dan tidak akan dikenali oleh apa pun yang mengharapkan penamaan Bean standar.sumber
Banyak alat yang diharapkan
is
atauget
dan tidak mungkin dikenaliare
.Cobalah menyusun ulang kata-kata tersebut, seperti
getDogsAreFuzzy()
ataugetStoresAreOpen()
atau hal-hal seperti itu untuk kompatibilitas dan konvensi yang lebih baik.sumber
-
isEnabled()
juga bisa ditulis sepertigetEnabled()
padaJava naming conventions
.- Ini hanya kebiasaan yang baik untuk mengikuti konvensi penamaan, membantu saat Anda bekerja
Java Beans
.sumber
Secara umum saya pikir kode harus dapat dibaca semudah mungkin sehingga sebuah metode hampir dapat dibaca sebagai sebuah paragraf (seperti yang didukung oleh
Clean Code
). Oleh karena itu, saya akan memberi nama metode untuk membunyikan / membaca semudah mungkin dan mengikuti aturan grammerare
. Dengan IDE modern, mudah untuk menemukan metode tanpa mencariget
/is
.Namun, Kumar membuat poin bagus tentang kacang. Banyak alat yang hanya akan mencari
get
/is
. Dalam hal ini saya mungkin mempertimbangkan untuk memiliki kedua metode tersebut. Satu untuk kemudahan membaca dan satu lagi untuk penggunaan alat.sumber
Anda menulis di bahasa apa : Inggris atau Jawa ?
Ketika saya membaca kode Java, saya berharap semuanya ada di sana, meminta saya untuk mencari kedua getter, dengan awalan is dan are , akan lebih rumit daripada mencari hanya satu awalan.
Namun di sisi lain, ketika saya membaca koran di pagi hari, saya tidak mencari apa-apa, jadi Anda bisa menulis dalam bahasa Inggris yang lebih tradisional.
kembali 0;
sumber
Dalam pertanyaan Anda, Anda secara eksplisit bertanya tentang getter. Seorang getter mengembalikan beberapa informasi tentang satu instance kelas Anda. Misalnya Anda punya kelas
Store
. Sekarang,isStoreOpen
adalah nama metode yang sangat bagus untuk seorang pengambil.Selanjutnya, Anda menyebutkan metode yang memeriksa apakah semua toko buka. Metode ini sama sekali bukan pengambil, karena tidak mengembalikan informasi tentang satu contoh tetapi untuk semua. Tentu saja kecuali ada kelas
Stores
. Jika demikian, Anda harus memikirkan kembali desain Anda, karena Java sudah memiliki cara untuk menyimpan sejumlah instance, misalnya array atau koleksi, jadi Anda tidak perlu menulis kelas tambahan.Jika tidak demikian, maka nama metode ini baik-baik saja. Sebuah alternatif mungkin hanya
allStoresOpen
tanpa 'ada'.TL; DR: Jika Anda berurusan dengan banyak contoh, itu bukan pengambil. Jika ya, desain Anda buruk.
sumber
Sejujurnya saya akan mengatakan pasti melupakan
are*
dan tetap denganis*
. Pikirkan"is"
sebagai makna variabel dan buat nama yang lebih baik jika memungkinkan.Saya akan mengatakan isStoresOpen tidak terdengar terlalu buruk, tetapi Anda dapat membuat isStoresAreOpen jika itu terdengar lebih baik untuk Anda.
Tapi ide umum saya adalah berpegang pada konvensi. Yang menggunakan "get" untuk getter dan "is" untuk tipe boolean. Secara pribadi saya pikir menggunakan "adalah" terkadang sudah bermasalah. Ya - memang terlihat bagus dalam kondisi "jika", tetapi terkadang saya hanya menulis "get" saat membuat kode dan memeriksa daftar tarik-turun untuk variabel yang saya butuhkan dan mulai bertanya-tanya apa yang salah dan mengapa saya tidak dapat menemukannya, lalu saya menyadarinya dimulai dengan "adalah" ...
sumber
Dalam pemrograman berorientasi objek, ini seharusnya jarang, jika pernah, terjadi sejak
Store
atauCat
atau apa yang Anda harus menjadi kelas terpisah, dengan metodeisOpen()
atau sendiriisFuzzy()
. Jika Anda memiliki tipe yang lebih tinggi, pertimbangkan untuk membagi ke tingkat yang lebih atomik yang sebenarnya Anda gunakan. Secara umum, objek tidak boleh jamak pada level terendah.sumber
isStoresOpen () di StoresOpen ini sepertinya jamak,
Ketika Anda mengikuti Konvensi Penamaan Java dan Standar Biji Java, mereka memiliki awalan yang telah ditentukan sebelumnya untuk boolean dan jenis lainnya, jadi Anda harus mengikuti Konvensi Penamaan Kacang Java.
Mari kita ke poin Anda Ketika Anda melihat toko Buka seperti dalam bahasa Inggris prospektif, ya sepertinya jamak. Sekali lagi perhatikan kata itu,
Sini
storeOpen berbentuk jamak menurut tata bahasa Inggris,
Hasil dari isStoresOpen bukanlah jamak, melainkan tunggal atau Anda dapat mengatakan itu skalar dalam hal konvensi pemrograman.
Hasilnya adalah boolean, benar atau salah
Tidak seperti pernyataan jamak bahasa Inggris Anda benar atau salah
Bukan larik benar atau salah , atau bukan kumpulan benar atau salah
Jadi, di sini kita dapat mengatakan bahwa, di sini kita prihatin dengan nilai yang dikembalikan dari metode kacang boolean itu, bukan nama yang diberikan ke properti kelas untuk menunjukkan entitas dunia nyata.
Satu hal yang lebih penting adalah, setiap kali properti boolean tersebut digunakan di kelas dan properti tersebut digunakan oleh library yang telah ditentukan sebelumnya dalam kerangka kerja apa pun, maka kerangka kerja dengan awalan use ' is ' untuk mengambil nilai boolean,
mengapa berarti itu tidak jauh lebih pintar dari Anda karena Anda tahu tata bahasa Inggris seperti jamak / tunggal, multiplekser dll ...
sumber