В този блог пост за начинаещи програмисти съм се опитал да събера няколко много важни съвета за именуване на променливи, типове данни, методи и др. в езика C#. Към всеки съвет има и по няколко примера за правилно и грешно именуване.


Тъй като езикът C# различава главни и малки букви в именуването на променливите (което не е така при всички езици), имаме възможност да използваме главните букви за разделители на имената, които съдържат повече от една дума. За разлика от други езици, където най-честият начин за разделяне на думите е чрез използване на символа „_“, в езика C# общоприета практика е, да се разделят думите в имената чрез използване на главни букви. Различават се няколко типа именуване, според начина на използване на главните букви. По-важните от тях са:
  • PascalCasing – първата буква в идентификатора е главна и всяка следваща дума в името също започва с главна буква. Примери: BookCoverColor, NextElement, etc.
  • camelCasing – именуването е същото като PascalCasing, с тази разлика, че първата дума (или абревиатура) съдържа само малки букви. Примери: firstParameter, htmlText, ioStream, etc.
  • UPPERCASE – всички букви в идентификатора (името) са главни букви. В някои езици, този начин на именуване се използва в комбинация с „_“ за имена на константи. В езика C# по-често се препоръчва използването на PascalCasing за имена на константи, заради което UPPERCASE почти не се използва в езика C#.
  • lowercase – всички букви в името са малки букви. Не се използва в езика C#.

Съвети за именуване

  • Разбира се, най-важния съвет е да именувате всичко по възможно най-смисления начин, независимо колко малко редове код го използват
  • Правилно: bytesCount, GetStudentsWithExcellentGrade
    Грешно: count, varr, n1, p, get, …
    Изключение от това правило правят променливите в циклите (i, j, k, …) и то само ако наистина няма по-смислено име за тях (например: arrayIndex)
  • Не използвайте език, различен от английския за именуване. Всеки знае английски език, но не всеки разбира български.
  • Правилно: SongName, CarModel
    Грешно: ИмеНаПесен, МоделКола
  • Използвайте PascalCasing за имена на namespace-и, класове, интерфейси, методи, свойства, събития, изброими типове, стойности на изброими типове, публични полета, константи, делегати и т.н.
  • Правилно: FontSize
    Грешно: fontSize, fontsize, font_size, FONTSIZE
  • Използвайте camelCasing за имена на променливи и параметри.
  • Правилно: string name; DoSomething(string firstParameter) { }
    Грешно: string Name; DoSomething(string FirstParameter, string _secondParameter)
  • Съкращения от две букви могат да се именуват с 2 главни букви. Ако съкращението е начало на идентификатор с camelCasing, тогава и двете букви задължително са малки.
  • Правилно: using System.IO; public void UseIO (Stream ioStream)
    Грешно: public void UseIo (Stream iOStream)
    Това правило не е общоприето и понякога абревиатури от 2 символа се записват с първа буква – главна и втора буква – малка. Пример: DbContext.
  • При съкращения от три и повече букви, само първата буква е главна. При имена, които изискват camelCasing, ако началото на идентификатора е абревиатура, задължително първата дума се именува само с малки букви.
  • Правилно: public string ParseHtml(string html)
    Грешно: public string ParseHTML(string hTML)
  • В съюзни думи не се използват главни букви за разделители
  • Правилно: Callback, Endpoint, Hashtable, Metadata, Placeholder, Namespace, FileName
    Грешно: CallBack, EndPoint, HashTable, MetaData, PlaceHolder, NameSpace, Filename
  • Използвайте лесни за разбиране имена и правилен словоред.
  • Правилно: HorizontalAlignment, SongName
    Грешно: AlignmentHorizontal, NameSong
  • По-добре по-дълго и разбираемо име, вместо кратко и неясно.
  • Правилно: CanScrollHorizontally
    Грешно: ScrollableX
  • Използвайте само латинските букви a-z, A-Z и цифрите от 0 до 9. Въпреки, че компилаторът на езика C# позволява почти всички символи от Unicode таблицата да бъдат използвани за именуване, не се препоръчва да се използват символи, различни от латинските букви и цифрите.
  • Правилно: ConstantName, FirstName
    Грешно: CONSTANT_NAME, s_FirstName
  • Избягвайте да използвате запазени думи в езика C# за идентификатори.
  • Правилно: ClassName, variableName, IsPublic
    Грешно: class, var, public
    Понякога, обаче, не може да се избегне използването на запазени думи за имена. Пример за това е предаването на HTML атрибута class в ASP.NET MVC като параметър на хелпър, например. Тогава се използва символа @ пред името на идентификатора и така компилатора вече не го счита за ключова дума. Пример string @class = "class-name";
  • Не съкращавайте думите. Не използвайте абревиатури, освен ако не са общоприети и могат да бъдат разбрани от повечето програмисти.
  • Правилно: GetWindow, FacultyNumber, HtmlContent
    Грешно: GetWin, FN, HyperTextMarkupLanguageContent
    Трудно е да се определи кой акроним е общоприет и кой не. Ако вие самите не знаете акронима най-вероятно не е добра идея да го съкращавате.
  • Именувайте класовете и структурите със съществителни имена в единствено число.
  • Правилно: struct Student, class FileReader, class Console
    Грешно: struct Students, class FileRead, class ConsoleReadWrite
  • Именувайте интерфейсите с прилагателни или съществителни с префикс „I” и суфикс „-able”.
  • Правилно: interface IReadable, interface IEnumerable, interface IObjectContextAdapter
    Грешно: interface Readable, interface Enumerable
  • Не слагайте префикси Get и Set на методи и свойства в класовете. Използвайте свойства вместо getters и setters (както правят Java програмистите).
  • Правилно: public string Name { get; set; }
    Грешно: public string getName() { … }; public void setString() { … };
    Има още много съвети за това как да изберете най-правилните имена в езика C#. Препоръчвам ви да прегледате внимателно ресурсите по-долу, защото една истинска .NET нинджа пише качествен код, а качествен код без добро именуване няма.

Ресурси

Повечето съвети за именуване тук са от книгата Framework Design Guidelines, която препоръчвам на всеки, който е решил сериозно да се занимава с програмиране за .NET Framework.
Друг полезен ресурс по темата е MSDN и по-конкретно:
http://msdn.microsoft.com/en-us/library/vstudio/ms229043%28v=vs.100%29.aspx,
http://msdn.microsoft.com/en-us/library/vstudio/ms229002%28v=vs.100%29.aspx и
http://msdn.microsoft.com/en-us/library/vstudio/ms229045%28v=vs.100%29.aspx