- September 22, 2012
- Nikolay Kostov (Nikolay.IT)
В този блог пост за начинаещи програмисти съм се опитал да събера няколко много важни съвета за именуване на променливи, типове данни, методи и др. в езика 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а>