C # konvensi penamaan untuk konstanta?

420
private const int THE_ANSWER = 42;

atau

private const int theAnswer = 42;

Secara pribadi saya pikir dengan IDE modern kita harus menggunakan camelCase karena ALL_CAPS terlihat aneh. Bagaimana menurut anda?

mmiika
sumber
4
@mmiika: apa arti "the" dalam contoh ini? Apakah itu seperti dalam "The Hitchhiker's Guide to the Galaxy" atau itu terbawa dari beberapa standar pengkodean C ++? (Misalnya kerangka kerja C ++ lama untuk Macintosh, THINK C [dan kemudian, Symantec C ++], menggunakan awalan "its" untuk penunjuk / anggota referensi dan "the" untuk anggota skalar.)
Peter Mortensen
5
@ Peter, karena nilai konstanta adalah 42, saya sangat percaya ini referensi ke Panduan The Hitchhiker untuk Galaxy .
Albireo
@PeterMortensen Itu kreatif! Tetapi nama-nama seperti Karyawannya dan Pelanggannya terdengar seperti itu bisa menyesatkan.
Camilo Martin
4
MSDN: Konvensi Kapitalisasi msdn.microsoft.com/en-us/library/vstudio/ms229043(v=vs.90).aspx
Kapten Sensible
Saya lebih suka theAnswer. Sebelumnya menjadi penggemar notasi Hongaria, tetapi sejak saya belajar untuk tidak menggunakannya, saya sangat suka menghindari indikasi meta dalam penamaan. Sama berlaku untuk antarmuka seperti IInterface. Saya lebih suka Interfacable. Tetapi ketika bekerja dalam tim, saya harus mematuhi aturan :(
nawfal

Jawaban:

485

Konvensi penamaan dan huruf besar yang disarankan adalah menggunakan P ascal C asing untuk konstanta (Microsoft memiliki alat bernama StyleCop yang mendokumentasikan semua konvensi yang disukai dan dapat memeriksa sumber Anda untuk kepatuhan - meskipun ini sedikit terlalu analitis untuk selera banyak orang) . misalnya

private const int TheAnswer = 42;

Konvensi kapitalisasi Pascal juga didokumentasikan dalam Pedoman Desain Kerangka Kerja Microsoft .

Greg Beech
sumber
51
Sebenarnya, StyleCop "bukan produk Microsoft," tetapi "alat yang dikembangkan oleh pengembang yang sangat bersemangat di Microsoft (di malam hari dan akhir pekan)." (Lihat blogs.msdn.com/sourceanalysis/archive/2008/07/20/… dan blogs.msdn.com/bharry/archive/2008/07/19/… ) untuk detailnya.) Karena itu, penamaan kerangka kerja Microsoft konvensi menggunakan casing Pascal untuk konstanta, sehingga alat ini hanya menegakkan standar bahwa Microsoft tidak mempublikasikan dan mendukung.
bdukes
12
@bdukes - Saya tidak mengatakan itu adalah produk Microsoft, namun ia memiliki cukup banyak penggunaan dan dukungan di seluruh organisasi (sebagai mantan karyawan, saya menggunakannya bertahun-tahun sebelum ada orang di luar Microsoft yang mendapatkannya, jadi Saya sadar akan warisannya).
Greg Beech
8
Saya tidak suka ini, karena huruf pertama biasanya digunakan untuk menunjukkan apakah suatu variabel terlihat secara eksternal atau tidak. Dalam kode tersebut, TheAnswer terlihat seperti milik umum, bukan milik pribadi bagi saya. Saya sebenarnya lebih suka menggunakan awalan seperti constTheAnswer dan ConstTheAnswer.
Efrain
52
Saya akan menggunakan notasi TheAnswer kecuali ketika nilainya 42, dalam hal ini saya pasti akan tetap menggunakan pendekatan ALL_CAPS.
Benoittr
4
Bukankah seharusnya lapangan pribadi dijadikan unta, acara jika itu adalah const?
Markus Meyer
70

Secara visual, Huruf Besar adalah caranya. Sangat bisa dikenali seperti itu. Demi keunikan dan tidak meninggalkan peluang untuk menebak, saya memilih UPPER_CASE!

const int THE_ANSWER = 42;

Catatan : Huruf Besar akan berguna ketika konstanta digunakan dalam file yang sama di bagian atas halaman dan untuk tujuan intellisense; namun, jika mereka dipindahkan ke kelas independen, menggunakan Huruf Besar tidak akan membuat banyak perbedaan, sebagai contoh:

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;
 }
BermanfaatBee
sumber
5
Saya juga lebih suka ini karena casing Pascal dapat dengan mudah dikacaukan dengan referensi properti.
bc3tech
8
Terlepas dari rekomendasi di atas, saya lebih suka UPPER_CASE untuk konstanta juga, karena itu membuatnya lebih mudah untuk diidentifikasi dibandingkan dengan kasus-kasus lainnya.
dub stylee
23
@usefulBee "SNAKE_CASE" sangat tidak disarankan dalam C #; Jawaban ini salah. Kasus yang benar untuk const di C # adalah "TitleCase".
BrainSlugs83
13
@ BrainSlugs83, saya tidak berpikir ada benar atau salah di sini; turun ke preferensi dan apa yang membuat kode lebih jelas.
bermanfaatBee
2
@useBee Agree. Tapi tetap bagus untuk menandai apa konsensus cara menulisnya. Saya telah melakukan banyak kode Ruby akhir-akhir ini, dan saya pikir SCREAMING_SNAKE_CASE masuk akal: itu sangat jelas bahwa itu adalah sesuatu yang istimewa, dan Anda bahkan tidak perlu melayang-layang / Pergi ke Definisi untuk mengetahui apa itu. Anda segera mengetahuinya.
Per Lundberg
69

Sebenarnya itu

private const int TheAnswer = 42;

Setidaknya jika Anda melihat perpustakaan .NET, IMO mana yang merupakan cara terbaik untuk memutuskan konvensi penamaan - jadi kode Anda tidak terlihat aneh.

bh213
sumber
23

Saya masih menggunakan huruf besar untuk nilai const, tetapi ini lebih karena kebiasaan daripada karena alasan tertentu.

Tentu saja membuatnya mudah untuk segera melihat bahwa ada sesuatu yang buruk. Pertanyaan saya adalah: Apakah kita benar-benar membutuhkan informasi ini? Apakah itu membantu kami dengan cara apa pun untuk menghindari kesalahan? Jika saya memberikan nilai pada const, kompiler akan memberi tahu saya bahwa saya melakukan sesuatu yang bodoh.

Kesimpulan saya: Gunakan casing unta. Mungkin aku akan mengubah gayaku juga ;-)

Edit:

Sesuatu yang berbau Hungaria sebenarnya bukan argumen yang valid, IMO. Pertanyaannya harus selalu: Apakah itu membantu, atau sakit?

Ada beberapa kasus ketika hungaria membantu. Tidak banyak saat ini, tetapi mereka masih ada.

Treb
sumber
30
Kode dibaca jauh lebih sering daripada yang tertulis. Tentu, ketika Anda menulis kode, kompiler akan mencegah Anda dari menetapkan konstanta. Tetapi bagaimana dengan pria yang harus menjaga kode Anda dua tahun dari sekarang? Sangat menyenangkan bisa mengenali konstanta dengan segera.
Greg Hewgill
2
IDE hari ini menangkap banyak masalah sebelum kompilasi. Saya tidak berpikir mengenali konstanta dengan nama itu penting, jika tidak Anda tidak menambahkan beberapa nama khusus untuk variabel hanya baca?
mmiika
5
Jika Anda berpikir tentang hal itu, habbit huruf besar mungkin berasal dari macro preprocessor daripada konstanta (Saya tidak pernah menggunakan tutup blok untuk konstanta yang benar). Dalam konteks itu, masuk akal untuk membedakan makro dari kode aktual karena makro mungkin sebenarnya ekspresi dan bukan nilai konstan, ekspansi dapat menyebabkan efek samping dan sebagainya. Jadi, Anda perlu tahu kapan Anda menggunakan makro dan kapan Anda menggunakan const. Saya pribadi senang melihat bagian belakang macro preprocessor, mereka punya banyak potensi untuk membuat kode sulit dibaca.
Tim Long
7
@ Tim: Saya setuju, pada akhirnya makro preprocessor membawa lebih banyak kerugian daripada kebaikan. Makro PP paling favorit saya: "#DEFINE Private Public" ;-)
Treb
1
@Tim: Perpustakaan C ++ Standard Tempate telah mengadopsi huruf kecil untuk konstanta misalnya std :: string :: npos ( cplusplus.com/reference/string/string/npos ). Jadi ALL_CAPS hanya untuk makro dan arahan preprosesor - yang membuatnya terlihat lebih bodoh di C #.
Richard Dingwall
16

Pertama, Notasi Hongaria adalah praktik menggunakan awalan untuk menampilkan tipe data parameter atau penggunaan yang dimaksudkan. Konvensi penamaan Microsoft untuk mengatakan tidak pada Notasi Hongaria http://en.wikipedia.org/wiki/Hungarian_notation http://msdn.microsoft.com/en-us/library/ms229045.aspx

Menggunakan UPPERCASE tidak dianjurkan seperti yang dinyatakan di sini: Pascal Case adalah konvensi yang dapat diterima dan SCREAMING CAPS. http://en.wikibooks.org/wiki/C_Sharp_Programming/Naming

Microsoft juga menyatakan di sini bahwa UPPERCASE dapat digunakan jika dilakukan agar sesuai dengan skema yang ada. http://msdn.microsoft.com/en-us/library/x2dbyw72.aspx

Ini kurang lebih menyimpulkan semuanya.

pengguna31939
sumber
3
Ya, notasi Hongaria tidak semuanya huruf besar.
Snibbets
13

Dalam artikelnya Konstanta (Panduan Pemrograman C #) , Microsoft memberikan contoh berikut:

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;
}

Jadi, untuk konstanta, tampaknya Microsoft merekomendasikan penggunaan camelCasing. Tetapi perhatikan bahwa konstanta ini didefinisikan secara lokal .

Dapat diperdebatkan, penamaan konstanta yang terlihat secara eksternal lebih menarik. Dalam praktiknya, Microsoft mendokumentasikan konstanta publiknya di pustaka kelas .NET sebagai bidang . Berikut ini beberapa contohnya:

Dua yang pertama adalah contoh PascalCasing. Yang ketiga muncul untuk mengikuti Konvensi Kapitalisasi Microsoft untuk akronim dua huruf (meskipun pi bukan nama samaran). Dan yang keempat nampaknya menyarankan bahwa aturan untuk akryonim dua huruf meluas ke akronim atau pengidentifikasi huruf tunggal seperti E(yang mewakili konstanta matematika e ).

Selanjutnya, dalam dokumen Konvensi Kapitalisasi, Microsoft secara langsung menyatakan bahwa pengidentifikasi bidang harus dinamai melalui PascalCasingdan memberikan contoh berikut untuk MessageQueue.InfiniteTimeout dan UInt32.Min :

public class MessageQueue
{
    public static readonly TimeSpan InfiniteTimeout;
}

public struct UInt32
{
    public const Min = 0;
}

Kesimpulan: Gunakan PascalCasinguntuk konstanta publik (yang didokumentasikan sebagai constatau static readonlybidang).

Akhirnya, sejauh yang saya tahu, Microsoft tidak menganjurkan konvensi penamaan atau huruf kapital khusus untuk pengidentifikasi pribadi seperti yang ditunjukkan dalam contoh yang disajikan dalam pertanyaan.

DavidRR
sumber
Pengembang yang menulis artikel itu jelas tidak mengikuti konvensi penataan gaya yang disarankan Microsoft untuk C #.
BrainSlugs83
2
Artikel yang ditunjukkan oleh jawaban ini telah berubah. Const sekarang publik dan telah PascalCased. Mengingat kedua perubahan itu, ini tidak membantu menjawab apakah konstanta pribadi harus PascalCased atau CamelCased.
Metalogic
12

Tinggalkan Hongaria ke Hongaria.

Dalam contoh ini saya bahkan akan meninggalkan artikel definitif dan hanya pergi dengan

private const int Answer = 42;

Apakah itu jawaban atau itu jawabannya?

* Dibuat edit sebagai Pascal benar benar, namun saya berpikir pertanyaan itu mencari lebih banyak jawaban untuk kehidupan, alam semesta dan segalanya .

merpati
sumber
2
Dalam kasus khusus ini adalah yang jawabannya. Tetapi hanya karena saya suka sekali membaca D.Adams.
Treb
ya, tapi apa pertanyaannya? dan jangan beri aku maaf atas garis ketidaknyamanan;)
dove
2
Ah, tapi karena kamu sudah tahu jawabannya, kamu tidak bisa tahu pertanyaannya. Mereka saling eksklusif. (Taruhan Anda sudah tahu itu ;-)
Treb
Ini adalah jawaban yang benar untuk pertanyaan OP. - Saya akan mendukung Anda dua kali karena menghapus Thejika saya bisa. :-)
BrainSlugs83
Apakah seseorang itu orang Hongaria, apakah jawaban ini mengatakan mereka diperbolehkan menggunakan konvensi lain?
Kapten Prinny
6

Saya sebenarnya cenderung lebih suka PascalCase di sini - tetapi karena kebiasaan, saya bersalah atas UPPER_CASE ...

Marc Gravell
sumber
6

ALL_CAPS diambil dari cara kerja C dan C ++ yang saya percaya. Artikel ini di sini menjelaskan bagaimana perbedaan gaya muncul.

Dalam IDE baru seperti Visual Studio, mudah untuk mengidentifikasi jenis, cakupan, dan jika mereka konstan sehingga tidak sepenuhnya diperlukan.

Perangkat lunak FxCop dan Microsoft StyleCop akan membantu memberi Anda panduan dan memeriksa kode Anda sehingga semua orang bekerja dengan cara yang sama.

John
sumber