vansickle's shared items

Monday, December 31, 2007

Casing

Проверять код на соответствие соглашениям в .net общепринято, кажется, с помощью

image FxCop, что вряд ли удобно человеку привыкшему к Java - и Eclipse и Idea покажут несоответсвия и без компиляции и в редакторе. Увы, ReSharper обладает не очень богатым набором проверок (инспекций), хотя функционально достаточен для необходимого stylecheck.

В поисках решения проблемы поставил AgentSmith - plugin к resharper'у. Общие впечатления рано формулировать, но один любопытный момент из него уже вынес. В плагине есть следующие проверки на правила именования по Casing : Camel, Pascal, Uppercase. И если первый и последний стиль понятны и пояснений не требуют, то Pascal-стиль ... вызвал недоумение (с языком я кстати неплохо знаком). Гугленье завело на блог Brad'а Abrams'а (со-автор Framework Design Guidelines) -  перевод:

История Pascal и Camel Casing

В изначальном проекте Framework'а мы потратили сотни часов на обсуждения стиля именования. Чтобы облегчить эти дебаты мы ввели несколько терминов. С Андерсом Хейлсбергом (Anders Heilsberg) (первый разработчик Turbo Pascal) главный член команды разработчиков, ничего удивительного, что мы выбрали термин Pascal Casing для стиля популяризованного этим языком программирования. Мы были до некоторой степени  сообразительными, чтобы использовать термин camelCasing для стиля, который выглядит как горб у верблюда (не стоит думать, что они это придумали - мое). Мы использовали термин SCREAMING CAPS (кричащие заглавные) чтобы показать все буквы заглавными. К счастью этот стиль (и название) не выжил в финальном соглашении по разработке (неправда - это вот тот как раз UPPERCASE - и для констант он используется - мое).

Pascal Casing  соглашение требует писать прописной каждую первую букву каждого слова capitalizes (включая акронимы больше двух букв длиной) как в следующих примерах:

PropertyDescriptor

HtmlTag

Camel Casing соглашение требует прописью первую буквы всех слов, за исключением первого:

propertyDescriptor

ioStream

htmlTag

Т.о. PascalCase = UpperCamelCase, CamelCase = loweCamelCase.

Хотя надо заметить что по PascalCase есть примечание относительно акронимов (во всяком случае Брэд его вводит), а если за UpperCamelCase (и его популяризатора, но об этом ниже) считать стиль Java - то это действительно можно считать за разницу между ними - поскольку такое правило по акронимам в Java очень редко соблюдается, а в C# почти всегда. И у меня все классы в соответствии с java-стилем, а вот свойства по-разному - что несколько раздражало (по причине что UserDAO субъективно приятнее UserDao, но вот property DAO{} вместо Dao{} - уже сомнительно, да и для анализаторов это проблема) - так что это требование для .net проектов наверное приму (или для классов UpperCamelCase, а для методов и свойств PascalCase?...).

Как уже заметил - опыт работы с паскалем богатый (благо или увы, в нашей стране и turbo pascal и delphi по разным причинам весьма распространены) - и вот не отложилось, что UpperCamelCase был популяризован Паскалем - по моим впечатлениям он употреблялся там в таком же количестве как и стиль с подчеркиваниями (Underscore_style или  как поехидничали в комментариях к  посту Брэда Finger_Breaking_Underscore style - отбивающий палцы стиль с подчеркиваниями). Слегка порыв код пришел к выводу, что CamelCase действительно преобладает, хотя и подчеркиваний хватает.

No comments:

Post a Comment