Penamaan metode bool: Is vs. Can vs.?

51

Yang mana nama yang lebih baik untuk metode yang mengembalikan boolean?

IsSupportContentType

atau

CanSupportContentType
Penengah
sumber
9
Karena maksudnya adalah agar nama menyampaikan kondisi atau perilaku dengan jelas, dan Anda tidak akan pernah mengatakan "kelas ini mendukung konten tipe X," nama yang lebih baik adalah CanSupportContentType. Anda akan mengatakan sesuatu seperti "kelas ini dapat mendukung tipe konten X."
Craig
8
Tidak seorang penutur asli tapi tidak akan Apakah SupportContentType menjadi yang paling "tata bahasa" pilihan?
Roman Reiner
8
Yang pertama IsSupportedContentTypeharus benar secara tata bahasa. (kecuali jika "mendukung tipe konten" bertindak sebagai kata benda, yang sepertinya tidak mungkin)
CodesInChaos
30
Bagaimana dengan sederhana supportsContentType? Berikut ini adalah sepenuhnya dibaca: if (abc.supportsContentType("text/html")). "dapat mendukung" menyiratkan bahwa ada kondisi lebih lanjut untuk mendukung jenis konten.
Olivier Grégoire
10
@WeylandYutani IsCanHasSupportCheezburger?
RM

Jawaban:

106

Is vs Can

Menurut rekomendasi konvensi penamaan Microsoft , "Apakah" dan "Bisa" tidak apa-apa (dan demikian pula "Memiliki") sebagai awalan untuk Boolean.

Dalam bahasa Inggris biasa, "Is" akan digunakan untuk mengidentifikasi sesuatu tentang tipe itu sendiri, bukan apa yang dapat dilakukannya. Sebagai contoh, IsFixed, IsDerivedFrom, IsNullablesemua dapat ditemukan dalam jenis CLR dan metode. Dalam semua kasus ini, "Is" diikuti oleh kata sifat .

Sementara itu, "dapat" lebih jelas menunjukkan kemampuan, misalnya CanEdit, CanRead, CanSeek. Dalam setiap kasus ini, dapat diikuti oleh kata kerja .

Karena "Dukungan" adalah kata kerja, saya pikir dalam kasus Anda CanSupportContentTypelebih baik.

Alternatif yang lebih pendek

Di sisi lain, konvensi mengatakan awalan adalah opsional. Terlebih lagi, itu agak curang untuk memasukkan jenis argumen dalam nama metode, karena pengembang dapat melihat jenis argumen di intellisense. Jadi Anda bisa memberi nama metode Anda Supportsdan mendefinisikannya seperti ini:

public bool Supports(System.Net.Mime.ContentType contentType)

... yang lebih pendek dan masih dengan jelas mengomunikasikan tujuannya. Anda akan menyebutnya seperti ini:

ContentType contentType = new ContentType("text/plain");
var someClass = new MediatorsClass();
bool ok = someClass.Supports(contentType);

Atau sebagai kompromi, mungkin ini yang terbaik:

public bool CanSupport(System.Net.Mime.ContentType contentType)
John Wu
sumber
53
Sangat menyenangkan bila terbaca dengan baik:if ( someClass.Supports(contentType) )
candied_orange
5
… AtauhasSupportedContentType
Bergi
8
Sebuah metode yang disebut "CanSupports" awalnya membuat saya bertanya-tanya siapa yang menghabiskan waktu untuk membuat perangkat lunak ini dapat mendukung kaleng (seperti kaleng kaleng). Hanya "Mendukung" adalah pilihan yang lebih baik, tidak diragukan lagi!
T. Sar - Kembalikan Monica
6
Terkadang pengembang tidak dapat mengetahui kapan sesuatu "terdengar aneh," misalnya jika bahasa Inggris bukan bahasa pertama mereka.
John Wu
5
Terkadang versi yang lebih pendek lebih buruk. Misalnya di perpustakaan C ++ Standard yang kita miliki std::vector::empty(). Dari namanya saja, apakah itu mengosongkan vektor? Atau apakah itu mengembalikan apakah vektor kosong? Sebenarnya yang terakhir, karena tugas sebelumnya dilakukan oleh std::vector::clear(). Tetapi Anda harus secara umum membaca dokumen untuk memastikan. Sebagai contoh sebaliknya, Qt QVectorlebih mudah dipahami dalam hal ini, karena metode pemeriksaan kekosongan adalah QVector::isEmpty().
Ruslan
9

Perlu disebutkan bahwa awalan " harus " juga dapat digunakan. Menurut pedoman Apple , bukan hanya " bisa " dan " harus ", kata kerja modal secara umum dapat digunakan untuk menyebutkan fungsi yang mengembalikan boolean. Saya tidak bisa melihat banyak penggunaan " akan " tetapi " harus " bagus untuk kait saran-bertanya, seperti yang terlihat di reactjs:

shouldComponentUpdate: (newProps: any) => boolean
Harry
sumber
19
seharusnya penamaan imho cukup buruk, "well, itu harus menutup dokumen, tapi aku sebenarnya tidak yakin"
Lovis
1
@lovis: Saya pikir komentar Harry sangat valid. Sebagai contoh, saya dapat mendelegasikan beberapa tindakan yang berhubungan dengan database melalui lapisan plugin, setiap plugin memiliki metode "ShouldCloseConnection" yang menginformasikan kerangka kerja bahwa beberapa pembersihan harus dilakukan. Contoh saja, tetapi "harus" jelas merupakan awalan yang valid.
greg
1
@reg Bagaimana itu kurang ambigu daripada WillCloseConnection?
Dasar
@Lovis Kami biasanya menggunakan is...tetapi menggunakan should...beberapa nama argumen fungsi, tempat-tempat di mana boolean menunjukkan fungsi yang seharusnya mengubah sesuatu . Jika fungsi dapat opsional dekat dokumen, menyebut parameter pengendalian yang isClosedakan akurat (itu tidak ditutup belum ) dan jadi kita akan menggunakan shouldCloseuntuk menunjukkan bahwa ini adalah fungsi apa yang seharusnya dilakukan. (Contoh sewenang-wenang; kita mungkin tidak akan memiliki fungsi seperti ini, terutama karena menutup dokumen harus cukup berbobot untuk mendapatkan panggilan khusus).
KRyan
@Basic Setidaknya dalam kasus kami, will...dicadangkan untuk fungsi asinkron yang mengembalikan janji; jika fungsi yang dijelaskan dalam komentar saya sebelumnya sinkron, menggunakan will...akan tidak konsisten dengan penamaan kami.
KRyan