C# lexikálne konvencie
Aké lexikálne konvencie sa používajú v jazyku C# všimol som si že na rozdiel od Delphi sa názvy typov nezačínajú písmenom T a názvy lokálnych premenných písmenom F. Viem že v jazyku C# sa pri názvoch typov a verejných členov používa PascalCase, pri názvoch privátnych členov a parametrov metód camelCase A práve v tom je problém.
Príklad:
TContentType = (ctHTML, ctXHTML);
type
TExample = class
private
FContentType: TContentType;
public
property ContentType: TContentType read FContentType write FContentType;
end;
ako mám tento kód zapísať podľa konvencií jazyka C#?
Tento príklad samozrejme nefunguje keďže názov vlastnosti nesmie byť zhodný s názvom typu:
public enum ContentType { HTML, XHTML }
class Example
{
private ContentType contentType = ContentType.HTML;
public ContentType ContentType
{
get { return contentType; }
set { contentType = value; }
}
}
Kde je problem? Si nazvy pis ako to vyhovuje tebe trebars_aj_s_podtrzitkami alebo tak isto ako si to mal v tom pascale.
P.S. ja osobne sa vzdy snazim pouzivat jasne a zretelne odlisene nazvy premennych, ak sa premenne lisia v jednom pismene tak to je v programe katastrofa odlisit a najst pripadne chyby.
ContentType nejakaVlastnost = tralala;
je prehladnejsie ako
ContentType contentType = ContentType , nie?
...alebo si urob ContentTypes ako tu enumeraciu.
P.S.2. C# nerozlisuje velke/male pismena??
Keď si vymyslím vlastné konvencie a zvyknem si na ne, postupne budem mať problém s čítaním cudzieho kódu a ostatní budú mať problém pochopiť ten môj. Najlepšie je dodržiavať oficiálne konvencie na formátovanie kódu. A preto ma zaujíma ako podobné problémy riešia autory .NET Frameworku. Inak podtržítkam sa vyhýbam ako čert krížu.
Práveže názov typu aj názov premennej najlepšie vystihuje pomenovanie contenttype. C# je case sensitive, ale problém nie je v tomto riadku ale v riadku:
Dík za radu to ma nenapadlo.
Ja robim s C++ a napr. MFC kniznica ma konvencie trochu zlozitejsie (napr. zaciatok premennych zacina pismenom ktory vyjadruje co to je, napr.
int iPocetPrvkov; // viem ze je typu int lebo zacina na i
class CMojaTrieda blablabla... // viem ze je to trieda lebo C
apod.
Ja osobne mam svoje uchylky na ktore som zvyknuty napr. KONSTANTY_VELKYM apod A ci niekto bude vediet citat moj kod je mi uplne ukradnute
Ja citat cudzi kod viem, hlavne nech tam je co najmenej premennych s nazvami a1, a2, a3, aa, ab, b1, b, bx, by apod.
V tom tvojom ma prave plietlo to ContentType, som si to poriadne pozrel ze co tam robis az ked som pisal P.S.2
Omnoho pochopitelnejsie by IMHO bolo nazvat to napr. ContentTypeValues alebo ContentTypesEnum alebo ContentTypes ako som pisal, ak mi niekedy vychadza ze chcem dat 2 veciam rovnaky nazov, tak tie nazvy su IMHO zle vymyslene a treba ich zmenit
Ten príklad je podľa konvencií pre názvy v C# a funguje - názov vlastnosti môže byť rovnaký ako názov typu.
Konvencie pre názvy nájdeš priamo na stránkach Microsoftu: http://msdn2.microsoft.com/en-us/library/ms229002.a spx
V skratke: žiadne podčiarniky, žiadna maďarská notácia (t.j. bez prefixu podľa typu premennej), žiadne skratky (okrem všeobecne používaných, ako napr. Html, Xml, ...) a hlavne výstižné pomenovania.