C # İşlev Parametreleri için Hangi Adlandırma Kuralı Kullanılacak


14

Parametrede iletilen bir adın yeni bir türe dönüştürüleceği durumlar vardır, ancak Passed nesnesinin adı benzer kalmalıdır. Sınıf Öznitelikleri durumunda, bu işleci kullanabiliriz, ancak işlevlerdeki yerel değişkene ne dersiniz. Hangi kodlama kuralı yaygın olarak kullanılmaktadır.

misal,

void MyFunc(BaseClass myPara)
{
  DerivedClass _mypara = (BaseClass)myPara;
}

veya tam tersine

void MyFunc(BaseClass _myPara)
{
  DerivedClass mypara = (BaseClass)_myPara;
}

veya başka herhangi bir sözleşme


1
Aşağıda aldığınız diğer yanıtlar ne olursa olsun, üslup kurallarını analiz etmek ve uygulamak için küçük bir araç vardır: archive.msdn.microsoft.com/sourceanalysis
Patrick Hughes

Yanıtlar:


11

Parametreleri veya yerel değişkenleri bir alt çizgi ile öneklemek C # 'da çok deyimsel değildir, okunması çok kolay değildir ve sıklıkla kullanılmaz (yasal olmasına rağmen, dilerseniz ücretsiz yapabilirsiniz).

Parametre ve değişken için en iyi isim açıklayıcı bir isimdir. Türü neden değiştirdiğinizi, dökümün sebebinin ne olduğunu düşünmeniz gerekir. O zaman 2 farklı isim bulmalısın. Örneğin, bir "kişiyi" geçip "müşteri" ye dönüştürdüğünüzde, belki değişken adlarında kişi ve / veya müşteri kullanabilirsiniz.

Eğer gerçekten 2 farklı isim düşünemiyorsanız, o zaman isimde "olarak" kullanırdım ( bu sitede birkaç gün önce bu konuda bir soru vardı ). Örneğin, yerel değişken için "myParaAsDerived" kullanırsınız.

Mümkünse bunu kullanmazsam, çözdüğünüz sorun ve hangi anlamlı isimlerin kullanılabileceği konusunda çok düşünürdüm, ama eğer başka bir şey başarısız olursa, bu oldukça okunabilir.


Sadece bir çift kontrol (ben C # aşina değilim). Başlıca alt çizgi gerçekten "düzgün" C # yasal? C ve C ++ 'da, önde gelen (veya iki katına çıkmış) alt çizgileri olan tanımlayıcılar saklıdır, bu nedenle bir anlamda yasal olmalarına rağmen, kendi tanımlayıcılarınızı böyle tanımlamamalısınız. csharp.comsci.us/etymology/identifiers.html , C #'ın benzer olabileceğini (aşağıya bakın, "sınırlamaların sonuncusu"), ancak aslında "ayrılmış" demediğini gösterir.
Steve314

önde gelen alçak tabanlar C # 'da tamamen yasaldır ve bildiğim herhangi bir sözleşme kapsamında saklı değildir.
Steve

9

Öncelikle

void MyFunc(BaseClass _myPara)
{
} 

Açıkça yanlış! Birçok c # kodlama standardı olarak tüm alan adlarında “_” öneki kullanın ! Kod, diğer programcılar tarafından anlaşılması kolay olmalıdır, bu nedenle kod, C # programcılarının birçoğunu yanıltacak şekilde yazılmamalıdır.

Küçük yöntemlerin tüm faydaları göz önüne alındığında, şahsen yerel değişkenleri parametrelerden ayırmak için bir adlandırma kuralına ihtiyaç duymuyorum. Yöntemlerinizde çok sayıda parametre ve yerel değişken varsa, bir adlandırma kuralı olmadan neler olduğunu anlatamazsınız, daha büyük sorunlarınız vardır. (Bu temiz bir Java kitap, bir Java kitap kaplıdır ama yine de bir C # programcı olarak büyük yarar buldum)


4

Onları bir şeyle önek istiyorsanız, p_parametre için kullanmalısınız : Genel olarak, bunu yaparsanız muhtemelen bir çok insanı rahatsız edersiniz. AMA tutarlı olun, sadece aynı yerde vermek istediğiniz değişkenler için iki farklı isme ihtiyacınız olduğu için bunu tek bir yerde yapmayın.

Değişken adlandırma ile iyi bir genel kural şöyledir;

  • Yalnızca bir tür nesne adınız varsa işlevi tarafından adlandırın:

    var builder = new PizzaBuilder();
  • İşlevleri ve uzmanlıkları ile birden fazla adınız varsa:

    var pizzaBuilder = new PizzaBuilder();
    var milkShakeBuilder = new MilkShakeBuilder();
    

Parametre için p_ (ya da sadece p), C ++ ve C'de çok kullanılan eski bir kuraldır. Bunu Pascal, Modula 2 ve Ada'da da gördüm, bu yüzden sadece C-ailesi bir şey değil. Yine de biraz sev ya da nefret et. Neredeyse takıntılı kullandım, mazeretim Steve Haighs'ın "As" için mantık yürütmesi. Örneğin, setter yöntemleri genellikle bunu yapar m_Whatever = p_Whatever;- iki tanımlayıcıya anlamlı bir şekilde farklı adlar vermek garip olur. Fakat bu davaların tutarlı sözleşmeyi haklı çıkaracak kadar yaygın olup olmadığını sorgulamaya başladım.
Steve314

4

C # adlandırma kurallarına sahip olacaksınız:

  • PascalCasing'i yöntemler, genel özellikler ve sınıf adları için kullanma
  • Arabirim adları için IPascalCasing kullanma (başlangıçtaki I öğesine dikkat edin)
  • Yöntem parametreleri ve yerel değişkenler için camelCasing kullanma
  • Sınıf çapında özel alanlar için _underscoredCamelCasing kullanma

Ve lütfen Macarca gösteriminden uzak durun. Anlamsız ve C # kurallarına uymaz.


özel alanlar statik ise pascal kasalıdır.
sara

2

Değişken adlandırmada altını çizmek gereksiz olabilir, çünkü özellikle sınıf düzeyindeki değişkenlere atıfta bulunmak için "this" anahtar kelimesine sahibiz. Uzmanlardan gelen değişken adlandırma kuralları hakkında daha fazla bilgi edinmek isterseniz, temiz kodlama akıl hocası Robert C. Martin tarafından desteklenen bir makale olan Tim Ottinger tarafından yazılan "Ottinger'in Değişken ve Sınıf Adlandırma Kuralları" adlı rezil makaleye bakmanızı öneririm. .

Ottinger, kodunuzun iyi yazılmış nesir gibi mümkün olduğunca insanca okunabilir kalması gerektiğini belirtir.

public void Function(string p_Parameter1, string p_Parameter2)

... daha okunaklı olurdu ...

public void Function(string parameter1, string parameter2)

... burada parametre1 ve 2 karşılık gelen değişkenler için açıklayıcı adlardır.

İşte link, kesinlikle bir göz atmaya değer: Link


-3

Parametre ekine inanıyorum: string s_, int i_, etc

Ayrıca parm adlarının mümkün olduğunca kısa ve genel olması gerektiğine inanıyorum.

Şimdi nedenlerden dolayı:

  • İşlevde, parametreyi herhangi bir şekilde değiştirmek istemezsiniz, değiştirilmiş bir sürüme ihtiyacınız varsa, onu yapıştırmak için yeni bir değişken oluşturun. Dikkat.
  • Bu kuralın istisnaları, parm ref veya out olduğunda ortaya çıkar. Yine de bu son eki kullanıyorum.
  • Neden kısa jenerik isimler? Fonksiyonunuzu belgelemelisiniz, böylece s_'nin gerçekten ne olduğunu açıklayıcı anlamda biliyorsunuz. Bu nedenle, benzer işlevlere sahip gruplar oluştururken veya modifikasyon için bir başlangıç ​​noktası olarak başka bir işleve taşımak için bir işlev gövdesini kırpırken kısa jenerikler kullanmak kullanışlı olur.
  • Genel adların asıl yararı, çoğu durumda bu parametre adını verdiğiniz şeyi hatırlamak zorunda kalmamanızdır. Bir dize elde etmeyi biliyorsunuz, bu yüzden onun s_, vb ve 'dosyaadı' ya da 'dosyayolu' ya da 'fullpath' olup olmadığını merak etmek zorunda değilsiniz, tek dize yani 's_'.

Her şeyin ödünleşimi vardır ve bir şey kullanıp kullanmamanız, mevcut tarzınıza nasıl uyduğuna bağlıdır.


6
-1: a) Ek ekliyorsunuz, son ekli değil; b) Macarca gösterimdir ve yapılacak işin yolunu çizmelidir .
Peter

1
C # tipi güvenli değil mi?
pyvi

1
@Peter K. - Bana benziyor sve ikısa isimler çünkü bu sadece bir örnek. IOW bunun hiç Macarca olduğunu düşünmüyorum - sanırım sadece klasik string sveya int idaha iyi bir isim düşünemiyorum kısa bir isim yanlış yorumluyorsunuz , ancak alt çizgi ekleri yapıştırılmış .
Steve314

@ Steve314: Ah, haklı olabilirsin! Bakalım Mark cevap veriyor mu?
Peter

S_ Ben anonim bir HG sanırım, ve bu örnek nedeniyle değil.
Mark
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.