Sabitler için C # adlandırma kuralı?


419
private const int THE_ANSWER = 42;

veya

private const int theAnswer = 42;

Şahsen, modern IDE'lerle ALL_CAPS garip göründüğü için camelCase ile gitmemiz gerektiğini düşünüyorum. Ne düşünüyorsun?


4
@mmiika: Bu örnekte "the" ne anlama geliyor? "Otostopçunun Galaksi Rehberi" nde olduğu gibi mi yoksa bazı C ++ kodlama standartlarından mı geçiyor? (Örneğin Macintosh için eski bir C ++ çerçevesi, THINK C [ve daha sonra, Symantec C ++], işaretçi / referans üyeleri için "its" ve skaler üyeler için "the" önekini kullandı.)
Peter Mortensen

5
@Peter, sabitin değeri 42 olduğundan, otostopçunun Galaksi Kılavuzu'na bir referans olduğuna inanıyorum .
Albireo

@PeterMortensen Bu yaratıcı! Ancak, Çalışan ve Müşteri gibi isimler yanıltıcı olabilir.
Camilo Martin


Ben tercih ederim theAnswer. Daha önce bir Macar gösterim hayranıydım, ama kullanmayı öğrenmediğimden beri, adlandırmada herhangi bir meta endikasyondan kesinlikle kaçınmayı seviyorum. Aynı arayüzler için de geçerlidir IInterface. Ben tercih ederim Interfacable. Ama bir takımda çalışırken, kurallara
uymalıyım

Yanıtlar:


484

Önerilen adlandırma ve büyük harf kuralı kullanmaktır P ascal C asing (Microsoft adında bir araç vardır sabitleri için StyleCop - bu biraz olsa ve belgeler tüm Tercih konvansiyonlar uygunluk açısından kaynağını kontrol edebilirsiniz çok anal birçok insanın zevke kuvvetli) . Örneğin

private const int TheAnswer = 42;

Pascal büyük harf kullanımı sözleşmesi Microsoft'un Çerçeve Tasarım Yönergeleri'nde de belgelenmiştir .


51
Aslında, StyleCop "bir Microsoft ürünü değil", "Microsoft'ta (akşamları ve hafta sonları) çok tutkulu bir geliştirici tarafından geliştirilen bir araçtır." (Ayrıntılar için bkz. Blogs.msdn.com/sourceanalysis/archive/2008/07/20/… ve blogs.msdn.com/bharry/archive/2008/07/19/… ).) Microsoft çerçeve adlandırma TAraca Microsoft bu standardı uygulayan bu yüzden kongreler, sabitler için Pascal kılıfı kullanın gelmez yayınlamak ve onaylamaz.
bdukes

12
@bdukes - Bunun bir Microsoft ürünü olduğunu söylemedim, ancak kuruluş genelinde oldukça fazla kullanım ve desteğe sahip (eski bir çalışan olarak, Microsoft dışındaki herkesin ellerini ele geçirmesinden yıllar önce kullanıyordum, bu yüzden Mirasının çok iyi farkındayım).
Greg Beech

8
Bunu beğenmedim, çünkü ilk harf genellikle bir değişkenin harici olarak görünür olup olmadığını belirtmek için kullanılır. Kodda, TheAnswer bana özel bir const değil, bir kamu malı gibi görünüyor. Aslında constTheAnswer ve ConstTheAnswer gibi bir önek ile gitmek tercih ederdim.
Efrain

52
Değeri 42 dışında hariç TheAnswer gösterimi ile gitmek istiyorum, bu durumda kesinlikle ALL_CAPS yaklaşım ile sopa.
Benoittr

4
Özel bir alan deve kasalı olmamalı mı, eğer const ise olay?
Markus Meyer

70

Görsel olarak, Büyük Harf gidilecek yoldur. Bu şekilde tanınabilir. Benzersizlik uğruna ve tahmin etme şansı bırakmadığım için UPPER_CASE'e oy veriyorum!

const int THE_ANSWER = 42;

Not : Büyük Harf, sabitler sayfanın üst kısmındaki aynı dosyada ve akıllı amaçlar için kullanıldığında yararlı olacaktır; ancak bağımsız bir sınıfa taşınacaklarsa, Büyük Harf kullanımı örnek olarak fazla bir fark yaratmayacaktır:

public static class Constant
{
    public static readonly int Cons1 = 1;
    public static readonly int coNs2 = 2;
    public static readonly int cOns3 = 3;
    public static readonly int CONS4 = 4;
}

// Call constants from anywhere
// Since the class has a unique and recognizable name, Upper Case might lose its charm
private void DoSomething(){
var getCons1 = Constant.Cons1;
var getCons2 = Constant.coNs2;
var getCons3 = Constant.cOns3;
var getCons4 = Constant.CONS4;
 }

5
Ben de bunu tercih ediyorum çünkü Pascal kasa bir özellik referansı ile kolayca karıştırılabilir.
bc3tech

8
Yukarıdaki önerilere bakılmaksızın, UPPER_CASE'i sabitler için de tercih ediyorum, çünkü diğer durumlardan herhangi birine kıyasla tanımlanmasını çok daha kolay hale getiriyor.
dub stylee

23
@KullanıcıBee "SNAKE_CASE" C # 'da kesinlikle önerilmez; Bu cevap yanlış. C # 'da consts için doğru durum "TitleCase" dir.
FebSlugs83

13
@ BrainSlugs83, burada doğru ya da yanlış olduğunu düşünmüyorum; tercih ve kodu daha net yapan şeydir.
usefulBee

2
@usefulBee Kabul Ediyorum. Ancak yine de, fikir birliği yazmanın ne olduğunu işaretlemek hala iyidir . Son zamanlarda bir sürü Ruby kodu yapıyorum ve sanırım SCREAMING_SNAKE_CASE mantıklı: özel bir şey olduğu çok açık ve hatta bunun ne olduğunu öğrenmek için fareyle üzerine gelmeniz gerekmiyor. Hemen biliyorsun.
Per Lundberg

69

Aslında,

private const int TheAnswer = 42;

En azından, IMO'yu adlandırma kurallarına karar vermenin en iyi yolu olan .NET kitaplığına bakarsanız, kodunuz yerinde görünmüyor.


23

Hala const değerleri için büyük harf ile gidiyorum, ama bu herhangi bir nedenden daha alışkanlık dışında.

Tabii ki bir şeyin sabit olduğunu hemen görmeyi kolaylaştırır. Bana soru şu: Bu bilgiye gerçekten ihtiyacımız var mı? Hataları önlemek için bize herhangi bir şekilde yardımcı oluyor mu? Eğer sabit bir değer atarsam, derleyici bana aptalca bir şey yaptığımı söyler.

Sonucum: Deve kasasıyla git. Belki de tarzımı değiştireceğim ;-)

Düzenle:

Macarca kokan bir şey aslında geçerli bir argüman değil, IMO. Soru her zaman şöyle olmalıdır: Yardımcı olur mu yoksa incinir mi?

Macarların yardım ettiği durumlar vardır. Bugünlerde pek değil, ama hala varlar.


30
Kod yazıldığından çok daha sık okunur. Elbette, kodu yazarken derleyici bir sabite atamanızı engelleyecektir. Peki ya şimdi iki yıl kodunuzu korumak zorunda olan adam? Bir sabiti hemen tanıyabileceğinden eminim.
Greg Hewgill

2
Bugünün IDE'leri derlenmeden önce birçok sorunla karşı karşıyadır. Sabitin isimle tanınmasının önemli olduğunu düşünmüyorum, yoksa salt okunur değişkenler için de özel bir isim eklememelisiniz?
mmiika

5
Bunu düşünürseniz, büyük harfli alışkanlık muhtemelen sabitlerden ziyade önişlemci makrolarından geliyordu (Gerçek sabitler için blok kapakları kullanmadım). Bu bağlamda, makroları gerçek koddan ayırmak mantıklıdır çünkü bir makro aslında sabit bir değer değil de bir ifade olabilir, genişlemesi yan etkilere neden olabilir. Bu nedenle, bir makro kullandığınızda ve bir sabit kullandığınızda bilmeniz gerekir. Kişisel olarak önişlemci makrolarının arkasını gördüğüme sevindim, kodun okunmasını zorlaştıracak çok fazla potansiyeli vardı.
Tim Long

7
@Tim: Katılıyorum, sonunda önişlemci makroları yarardan çok zarar getirdi. En sevdiğim PP makrosu: "#DEFINE Private Public" ;-)
Treb

1
@Tim: C ++ Standart Tempate Library sabitler için küçük harf kullanmıştır, örneğin std :: string :: npos ( cplusplus.com/reference/string/string/npos ). ALL_CAPS yalnızca makrolar ve önişlemci direktifleri içindir - bu da C # 'da daha aptal görünmesini sağlar.
Richard Dingwall

16

Birincisi, Macarca Gösterim, bir parametrenin veri türünü veya kullanım amacını görüntülemek için bir önek kullanma pratiğidir. Microsoft'un adlandırma kuralları Macarca Gösterim'e hayır diyor http://en.wikipedia.org/wiki/Hungarian_notation http://msdn.microsoft.com/en-us/library/ms229045.aspx

UPPERCASE kullanımı burada belirtildiği gibi teşvik edilmez: Pascal Case kabul edilebilir bir kongre ve SCREAMING CAPS. http://en.wikibooks.org/wiki/C_Sharp_Programming/Naming

Microsoft ayrıca, UPPERCASE'in varolan şema ile eşleşmesi için kullanılabileceğini belirtir. http://msdn.microsoft.com/en-us/library/x2dbyw72.aspx

Bu hemen hemen özetliyor.


3
Evet, Macarca gösterim tamamen büyük harf değildir.
snibbets

13

Sabitleri (C # Programlama Kılavuzu) makalesinde , Microsoft aşağıdaki örneği vermektedir:

class Calendar3
{
    const int months = 12;
    const int weeks = 52;
    const int days = 365;

    const double daysPerWeek = (double) days / (double) weeks;
    const double daysPerMonth = (double) days / (double) months;
}

Bu nedenle, sabitler için Microsoft'un kullanılmasını öneriyor gibi görünüyorcamelCasing . Ancak bu sabitlerin yerel olarak tanımlandığını unutmayın .

Muhtemelen, harici olarak görülebilir sabitlerin isimlendirilmesi daha fazla ilgi çekmektedir. Uygulamada, Microsoft, belgeler kamu sabitleri olarak .NET sınıf kütüphanesinde alanlar . İşte bazı örnekler:

İlk ikisi buna örnektir PascalCasing. Üçüncüsü , iki harfli bir kısaltma için Microsoft'un Büyük Harf Kurallarına uyuyor gibi görünüyor ( pi bir akrionym olmamasına rağmen ). Ve dördüncüsü, iki harfli acryonym için kural, tek harfli bir kısaltma uzanır ya da tanımlayıcının öyle ki önermek görünüyor E(matematik sabiti temsil eder e ).

Ayrıca, Büyük Harf Düzenlemeleri belgesinde, Microsoft doğrudan alan tanımlayıcılarının adlandırılması gerektiğini belirtir PascalCasingve MessageQueue.InfiniteTimeout ve UInt32.Min için aşağıdaki örnekleri verir :

public class MessageQueue
{
    public static readonly TimeSpan InfiniteTimeout;
}

public struct UInt32
{
    public const Min = 0;
}

Sonuç: PascalCasingGenel sabitler ( constveya olarak belgelenen static readonly) için kullanın.

Son olarak, bildiğim kadarıyla, Microsoft , soruda sunulan örneklerde gösterildiği gibi , özel tanımlayıcılar için belirli adlandırma veya büyük harf kullanımı kurallarını savunmaz .


Bu makaleyi yazan geliştirici, Microsoft'un C # için önerilen stil kurallarını açıkça izlemiyordu.
BrainSlugs83

2
Bu cevabın işaret ettiği makale değişti. Anlaşmalar artık herkese açık ve PascalCased oldu. Bu değişikliklerin her ikisi de göz önüne alındığında, bu özel sabitlerin PascalCased mi yoksa camelCased mi olduğu sorusunu yanıtlamaya yardımcı olmaz.
Katalog

12

Macarları Macarlara bırakın.

Örnekte, kesin makaleyi bile bırakıp sadece

private const int Answer = 42;

Bu cevap mı yoksa cevap mı?

* Pascal'ı düzenlemeyi kesinlikle doğru yaptım, ancak sorunun hayata, evrene ve her şeye daha fazla cevap aradığını düşünüyordum .


2
Bu özel durumda öyle bir cevap. Ama sadece D.Adams'ı çok okumayı sevdiğim için.
Treb

evet, ama soru ne? ve rahatsızlık çizgisi için özür dilerim beni beslemeyin;)
güvercin

2
Ah, ama cevabı zaten bildiğiniz için soruyu bilemezsiniz. Bunlar birbirini dışlar. (Bahse girdiğinizi zaten biliyordunuz ;-)
Treb

Bu OP'nin sorusuna doğru cevaptır. - Eđer yapabilseydim, seni iki kez vurabilirim The. :-)
BrainSlugs83

Birisi Macar nedir, bu cevap diğer sözleşmeyi kullanmalarına izin verildiğini mi söylüyor?
Kaptan Prinny

6

Aslında burada PascalCase'i tercih etme eğilimindeyim - ama alışkanlıktan dolayı UPPER_CASE'ten suçluyum ...


6

ALL_CAPS inanıyorum C ve C ++ çalışma yolundan alınır. Bu makale burada tarzı farklılıkları nasıl ortaya çıktığını açıklıyor.

Visual Studio gibi yeni IDE'lerde türleri, kapsamı ve sabit olup olmadıklarını tanımlamak kolaydır, bu yüzden kesinlikle gerekli değildir.

FxCop ve Microsoft StyleCop yazılım size yönergeler vermek ve herkesin aynı şekilde çalışır, böylece kodunuzu kontrol yardımcı olacaktır.

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.