Bool yöntemlerinin isimlendirilmesi: vs. vs.


51

Boole döndüren bir yöntem için daha iyi ad hangisidir?

IsSupportContentType

veya

CanSupportContentType

9
Amaç, adı açıkça ifade eden bir durum veya davranışı ifade ettiği ve asla "bu sınıf X içerik türünü desteklemektedir" demediğinizden daha iyi ad, CanSupportContentType. "Bu sınıf X içerik türünü destekleyebilir" gibi bir şey söylersiniz.
Craig

8
Değil anadili ama olmaz SupportContentType en "gramer" seçeneğini olabilir mi?
Roman Reiner

8
İlki IsSupportedContentTypegramer olarak doğru olmak zorundaydı. ("destek içeriği türü" bir isim olmadıkça, bu olası
görünmez

30
Ya basitçe supportsContentType? Aşağıdaki tamamen okunabilir: if (abc.supportsContentType("text/html")). "destekleyebilir", içerik türünü destekleyecek başka koşullar bulunduğunu belirtir.
Olivier Grégoire

10
@WeylandYutani IsCanHasSupportCheezburger?
RM

Yanıtlar:


106

Can vs

Göre Microsoft, adlandırma kuralı önerileri , hem "mi" ve "Can" Tamam (ve böyledir "Has") bir Boole için önek olarak.

Basit İngilizce'de, "İş", yapabileceklerini değil türüyle ilgili bir şeyi tanımlamak için kullanılır. Örneğin, IsFixed, IsDerivedFrom, IsNullabletüm CLR türleri ve yöntemlerde bulunabilir. Tüm bu durumlarda, "Is" sıfatını izler .

Bu arada, "can" daha net örneğin bir yeteneği gösterir CanEdit, CanRead, CanSeek. Bu vakaların her birinde, bir fiil izlenebilir .

"Destek" bir fiil olduğundan CanSupportContentType, sizin durumunuzda daha iyi olduğunu düşünüyorum .

Daha kısa alternatif

Öte yandan, sözleşmeler ön ekin isteğe bağlı olduğunu söylüyor. Dahası, bir geliştirici argüman türünü intellisense'de görebildiğinden, argüman türünü yöntem adına dahil etmek biraz nezaketsizdir. Yani olabilir sadece yöntemini isim Supportsve şöyle tanımlıyoruz:

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

... daha kısa ve yine de amacı açıkça ifade ediyor. Buna şöyle diyorsun:

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

Ya da bir uzlaşma olarak, belki de en iyisi budur:

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

53
İyi okuduğu zaman güzel:if ( someClass.Supports(contentType) )
candied_orange

5
… VeyahasSupportedContentType
Bergi

8
"CanSupports" adında bir yöntem başlangıçta çılgınca bana, yazılımı teneke kutulara (teneke kutularda olduğu gibi) destekleyebilmek için kimin zaman harcadığını merak ediyorum. Şüphesiz ki sadece "Destekler" daha iyi bir seçenektir!
T. Sar - Monica,

6
Bazen geliştiriciler bir şeyin ne zaman "garip sesler" olduğunu söyleyemezler, örneğin İngilizce ilk dili değilse.
John Wu,

4
Bazen daha kısa versiyon daha kötüdür. Örneğin C ++ Standard kütüphanesinde bizde var std::vector::empty(). Sadece isminden, vektörü boşaltır mı? Yoksa vektörün boş olup olmadığını döndürür mü? Aslında ikincisi, eski görev tarafından yapıldığından beri std::vector::clear(). Ancak, genel olarak emin olmak için belgeleri okumalısınız. Tersine bir örnek olarak, Qt'nin QVectorbu bağlamda anlaşılması daha kolaydır, çünkü boşluk kontrolü yöntemi budur QVector::isEmpty().
Ruslan,

9

O "olduğunu belirtmekte yarar var olmalıdır önek de kullanılabilir". Göre Apple'ın kılavuz , sadece " olabilir ve" " gerektiğini , genel olarak modal fiiller boolean dönmek isim fonksiyonları için kullanılabilir". " Vasiyetname " nin pek çok kullanımını göremiyorum ama " olmalı ", reaksiyonlarda göründüğü gibi, tavsiye amaçlı kancalar için güzel:

shouldComponentUpdate: (newProps: any) => boolean

19
should "de, bu oldukça kötü adlandırma IMHO olduğunu etmelidir belgeyi kapatın ama aslında oldukça emin değilim"
Lovis

1
@lovis: Bence Harry'nin yorumu çok geçerli. Örneğin, veritabanıyla ilgili bazı eylemleri bir eklenti katmanı aracılığıyla devredebilirim, her eklentide bir temizleme işleminin yapılması gerektiğini bildiren bir "ShouldCloseConnection" yöntemi vardır. Sadece bir örnek, ancak "gerekir" kesinlikle geçerli bir önektir.
greg

1
@greg Bu nasıl daha az belirsiz WillCloseConnection?
Temel

@Lovis Genelde bazı işlev argüman adlarında is...kullanırız should..., ancak booleanın işlevin neleri değiştirmesi gerektiğini gösterdiği yerleri kullanırız . Bir işlev isteğe bağlı olarak bir belgeyi kapatabiliyorsa, parametre kontrolünü çağırmak isCloseddoğru olacaktır ( henüz kapanmadı ) ve bu nedenle shouldClose, işlevin yapması gereken şeyin bu olduğunu belirtmek için kullanırız . (Rasgele örnek; muhtemelen böyle bir işlevi olmaz, özellikle de bir belgeyi kapatmak özel bir çağrı yapmak için yeterince ağır olmalıdır.)
KRyan

@Basic En azından bizim durumumuzda, will...söz veren zaman uyumsuz işlevler için ayrılmıştır; önceki yorumumda açıklanan fonksiyon senkronize ise, kullanımı will...bizim ismimizle tutarsız olacaktır.
KRyan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.