Sangat umum untuk menggunakan '-able' sebagai sufiks untuk antarmuka misalnya
Serializable Cetak Dapat Diminum Minum Dapat Diputar Diputar
Saya berpikir bahwa 'Can-' mungkin lebih baik karena mungkin lebih deskriptif. Ya, ini lebih bertele-tele dan itu menambahkan noise ke nama antarmuka. Secara khusus, kata kerja pasif dapat digunakan.
Misalnya 1 apakah Shootable berarti bahwa objek dapat menembak (pistol mungkin menerapkan ini), atau apakah itu berarti dapat ditembakkan (papan target mungkin mengimplementasikan ini). Dengan awalan 'Can-', yang pertama adalah "CanShoot" dan yang terakhir adalah "CanBeShotAt" atau "CanShootAt".
Misalnya 2 Dokumen 'CanBePrinted' dan printer 'CanPrint'
Atau, haruskah kita tetap dengan '-Mampu' dan membiarkan dokumentasi memberikan konteks?
Ada pendapat.
sumber
class Cannibal implements Can, Able {}
Jawaban:
Mungkin Anda ingin Mampu?
Beberapa contoh dari .Net:
Tampaknya tidak ada standar yang seragam. Ikuti apa yang berbunyi dengan baik.
EDIT: Seperti yang ditunjukkan, pertanyaannya adalah tentang Antarmuka, bukan Properti.
Dalam hal ini, saya tidak dapat menemukan antarmuka bernama Can-. Antarmuka cenderung selalu menggunakan -able. Saya setuju dengan terminologi ini. Suatu metode dapat meminta sebagai parameter a
ISerializable object
atauIPrintable document
. Meminta aICanBeSerialized object
atau aICanBePrinted document
sangat canggung untuk dibaca.Di sisi lain, Printer, saya sarankan hanya memanggil antarmuka
IPrinter
. Metode Anda akan meminta aIPrinter device
.Baca tanda tangan metode di bawah ini dengan keras. (Secara pribadi, saya menganggap awalan "Saya" sebagai diam.) Apakah itu terbaca dengan baik? Apakah itu terdengar benar?
sumber
ISerializable
,IDataErrorInfo
, danINotifyPropertyChanged
.Secara tata bahasa, "canFoobar" adalah predikat, sedangkan "Foobarable" adalah kata sifat atau kata benda (biasanya kata benda dalam konteks API).
Perhatikan juga perbedaannya yang halus: -able menyiratkan peran pasif pada kata benda yang diterapkan, yaitu, jika Something itu Foobarable, maka ia dapat dibuat foobarred oleh sesuatu yang lain; dapat- menyiratkan peran aktif, yaitu, jika Sesuatu dapatFoobar, maka itu dapat membentuk sesuatu yang lain. Atau, dari sudut yang berbeda: jika A bisa foobar B, maka
A.canFoobar()
danB is Foobarable
.Dalam hal ekspresif OOP, saya akan mengasosiasikan predikat dengan metode atau properti, sementara kata benda adalah kelas atau antarmuka. Begitu:
sumber
Secara pribadi saya akan tetap menggunakan versi -able. Inilah alasan saya: Kebanyakan (semua?) Editor grafis menyarankan pengidentifikasi berdasarkan apa yang Anda ketikkan. Meskipun beberapa dari mereka cukup 'pintar' untuk mencari di dalam pengidentifikasi, beberapa masih menawarkan awal pencarian pengidentifikasi.
Untuk mempercepat pengetikan, Anda ingin mempersingkat daftar pengidentifikasi yang disarankan dengan penekanan tombol sesedikit mungkin. Semakin banyak pengidentifikasi memiliki awal yang sama, misalnya 'IC -' semakin banyak karakter yang harus Anda ketik.
Jika Anda pikir ini bukan masalah dalam kasus Anda, maka itu hebat dan saya akan merekomendasikan menggunakan kriteria lain untuk memilih konvensi penamaan. Dalam beberapa kasus, misalnya dalam tim kami, kami lebih suka pengidentifikasi yang membedakan setelah penekanan tombol sesedikit mungkin.
Selain itu saya akan merekomendasikan untuk menggunakan konvensi penamaan yang membuat kode Anda paling mudah dipahami oleh mereka yang bekerja di proyek. Lakukan percakapan dalam tim Anda. Tidak ada yang benar atau salah. Hanya konvensi yang berhasil dan konvensi yang kurang berhasil.
Jangan lupa bahwa alat refactoring yang baik memungkinkan Anda untuk mengubah nama sesering yang Anda inginkan. Jadi mudah untuk bereksperimen dengan berbagai pendekatan.
sumber
Jelas awalan dan sufiks adalah pilihan yang hampir jelas untuk jenis tindakan yang berbeda atau lebih tepatnya, arah tindakan yang berbeda.
Penggunaan dan preferensi saat ini mungkin tidak konsisten karena berbagai alasan.
Tindakan dilakukan oleh objek:
CanShoot -> Ini menembak (pada) sesuatu
CanFly -> Itu terbang
CanChange -> Itu berubah
Tindakan dilakukan pada objek:
Dapat dibaca -> Anda dapat membacanya
Tertulis -> Anda dapat menulis (untuk) dicetak
-> Anda dapat mencetaknya
Meskipun mungkin bukan aturan atau bahkan logis, itu membantu untuk mengadopsi konvensi dan mempertahankan konsistensi penggunaan dalam penamaan variabel.
sumber
Saya pikir Anda mungkin ingin membedakan antara kemampuan dan izin. Sementara
Serializable
danCanSerialize
menyiratkan bahwa sesuatu mampu diserialisasi, ada juga masalah izin (atau mungkin kurangnya ruang disk) dan Anda mungkin perlu mempertimbangkanMaySerialize
. Membiarkan segala sesuatu~able
menghilangkan kebutuhan untuk membedakan antaracan
danmay
.sumber
Ketika subclassing / mengimplementasikan antarmuka saya pikir aturan praktis adalah bahwa Anda harus dapat mengatakan "B adalah A" (di mana B mengimplementasikan A). Kedengarannya tidak benar untuk mengatakan:
Tapi kedengarannya benar (atau setidaknya lebih baik) untuk mengatakan:
sumber
Saya pikir Xable baik tata bahasa maupun konvensi lebih baik untuk nama antarmuka, sedangkan IsX, CanX, DoesX lebih baik untuk nama properti.
Dari MSDN:
"Beri nama properti Boolean dengan frasa afirmatif (CanSeek dan bukan CantSeek). Secara opsional, Anda juga bisa mengawali properti Boolean dengan Is, Can, atau Has, tetapi hanya jika itu menambah nilai." http://msdn.microsoft.com/en-us/library/ms229012.aspx
sumber
Menurut pendapat saya, varian "-able" jauh lebih mudah dibaca daripada yang Anda usulkan "CanDoSomething" yang memaksakan lebih banyak punuk unta.
sumber
Dalam Scala,
*Able
digunakan untuk antarmuka, tetapiCan*
digunakan untuk pola kelas tipe. Pada dasarnya, untuk dapat memanggil metode tertentu, nilai implisit dari jenis tertentu harus ada dalam ruang lingkup. Nama tipe ini terkadang diawali denganCan
.sumber
CanBuildFrom
. Ini akan menjadi frase kata sifat. Kasus penggunaan kelas ini sangat berbeda dari kelas-kelas lain. Contoh kelas ini hampir tidak pernah dibangun atau diselesaikan oleh klien - melainkan, mereka tersedia dalam ruang lingkup untuk jenis tertentu. Jika mereka tersedia untuk jenis tertentu, maka metode yang melibatkan jenis yang ditandai untuk memerlukan kelas ini dapat dipanggil. Ini ada untuk menawarkan mekanisme ekstensibilitas yang lebih fleksibel daripada subtyping. Lihat scala-lang.org/node/114 .