Соглашение об именах с # для констант?

private const int THE_ANSWER = 42;

или же

private const int theAnswer = 42;

Лично я думаю, что с современными IDE мы должны использовать camelCase, поскольку ALL_CAPS выглядит странно. Что вы думаете?

@mmiika: что означает "the" в этом примере? Это как в «Автостопом по галактике» или это перенесено из какого-то стандарта кодирования C++? (Например, старая структура C++ для Macintosh, THINK C [и более поздние версии, Symantec C++], использовала префикс «its» для элементов-указателей / ссылок и «the» для элементов скалярных значений.)

Peter Mortensen 03.02.2010 14:26

@Peter, поскольку значение константы 42, я твердо верю, что это ссылка на Автостопом по Галактике.

Albireo 19.05.2011 14:02

@PeterMortensen Это креативно! Но такие имена, как itsEmployee и itsCostumer, могут вводить в заблуждение.

Camilo Martin 29.03.2012 04:37

MSDN: условные обозначения заглавных букв msdn.microsoft.com/en-us/library/vstudio/ms229043(v=vs.90).a‌ spx

Captain Sensible 25.03.2013 13:15

Я предпочитаю theAnswer. Раньше был поклонником венгерской нотации, но с тех пор, как я научился не использовать ее, я люблю строго избегать каких-либо мета-указаний в именах. То же самое и с такими интерфейсами, как IInterface. Я предпочитаю Interfacable. Но при работе в команде надо было соблюдать правила :(

nawfal 22.10.2013 11:27

MSDN рекомендует использовать «TitleCase» для констант, так что это будет «TheAnswer» (хотя, как отмечали другие, вам обычно не следует ставить перед именами переменных префикс «The», поскольку он не добавляет никакого значения).

BrainSlugs83 01.03.2016 00:55

Почему Math.PI в верхнем регистре?

mr5 27.06.2018 08:54

Проблема с ответами здесь в том, что примеры - это переменные, состоящие из одного или двух слов. Но когда вы сталкиваетесь с очень конкретным определением значения, которое используется во всем приложении, например Temporary_Employee_Subscription_January_Grace_Period, или чего-либо, что указывает на очень конкретное свойство категории в конкретном случае бизнес-логики, то читаемость определения ухудшается, когда удаление подчеркивания: TemporaryEmployeeSubscriptionJanuaryGracePeriod. Для меня это особый тип констант, который не похож на ваш обычный тип констант Enum.

Léon Pelletier 28.08.2018 20:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
452
9
229 557
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Оставьте венгерский язык венграм.

В этом примере я бы даже оставил окончательную статью и просто выбрал

private const int Answer = 42;

Это ответ или это ответ?

* Сделано редактирование как Паскаль строго правильным, однако я подумал, что вопрос требует большего ответа на жизнь, вселенная и все остальное.

В данном конкретном случае это ответ в. Но только потому, что я очень люблю читать Д. Адамса.

Treb 28.10.2008 11:22

да, а в чем вопрос? и не кормите меня этим извинением за неудобства;)

dove 28.10.2008 11:26

Ах, но поскольку вы уже знаете ответ, вы не можете знать вопрос. Они исключают друг друга. (Спорим, вы это уже знали ;-)

Treb 28.10.2008 11:28

Это правильный ответ на вопрос ОП. - Я бы дважды проголосовал за удаление The, если бы мог. :-)

BrainSlugs83 01.03.2016 01:35

Кто является венгром, говорит ли этот ответ, что им разрешено использовать другое соглашение?

Captain Prinny 28.10.2019 23:39

Я считаю, что ALL_CAPS взят из способа работы C и C++. В этой статье здесь объясняется, как возникли различия в стилях.

В новой среде IDE, такой как Visual Studio, легко определить типы, область видимости и их постоянство, поэтому в этом нет строгой необходимости.

Программное обеспечение FxCop и Microsoft StyleCop поможет дать вам рекомендации и проверить ваш код, чтобы все работали одинаково.

Я по-прежнему использую верхний регистр для значений const, но это больше по привычке, чем по какой-либо конкретной причине.

Конечно, это позволяет сразу увидеть, что что-то является константой. Вопрос ко мне: действительно ли нам нужна эта информация? Помогает ли это нам как-нибудь избежать ошибок? Если я присвою значение константе, компилятор скажет мне, что я сделал что-то глупое.

Мой вывод: возьмите верблюжий кожух. Возможно, я тоже изменю свой стиль ;-)

Редактировать:

Это что-то венгерское пахнет не совсем верный аргумент, ИМО. Всегда должен быть вопрос: помогает или больно?

Бывают случаи, когда помогает венгр. Сейчас их не так много, но они все еще существуют.

Код читают гораздо чаще, чем пишут. Конечно, когда вы пишете код, компилятор не позволит вам присвоить константу. Но как насчет парня, который должен поддерживать ваш код через два года? Конечно, приятно иметь возможность сразу распознать константу.

Greg Hewgill 28.10.2008 11:26

Современные IDE выявляют множество проблем перед компиляцией. Я не думаю, что распознавание константы по имени важно, иначе не следует ли вам добавить какое-то специальное имя для переменных только для чтения?

mmiika 28.10.2008 11:34

Если задуматься, заглавные буквы, вероятно, пришли из макросов препроцессора, а не из констант (я никогда не использовал заглавные буквы для настоящих констант). В этом контексте имеет смысл отличать макросы от реального кода, потому что макрос вполне может быть выражением, а не постоянным значением, его расширение может вызвать побочные эффекты и так далее. Итак, вам нужно знать, когда вы используете макрос, а когда - константу. Лично я рад видеть обратную сторону макросов препроцессора, у них был большой потенциал, чтобы сделать код трудным для чтения.

Tim Long 09.05.2009 09:38

@Tim: Согласен, в итоге макросы препроцессора принесли больше вреда, чем пользы. Мой самый любимый макрос PP: "#DEFINE Private Public" ;-)

Treb 09.05.2009 15:44

@Tim: стандартная библиотека Tempate C++ приняла строчные буквы для констант, например. std :: string :: npos (cplusplus.com/reference/string/string/npos). Таким образом, ALL_CAPS предназначен только для макросов и директив препроцессора, что делает его еще более глупым в C#.

Richard Dingwall 03.11.2010 16:08

На самом деле это

private const int TheAnswer = 42;

По крайней мере, если вы посмотрите на библиотеку .NET, какая IMO - лучший способ решить соглашения об именах, чтобы ваш код не выглядел неуместным.

Ответ принят как подходящий

Рекомендуемое соглашение об именах и использовании заглавных букв заключается в использовании пascalCasing для констант (у Microsoft есть инструмент с именем StyleCop, который документирует все предпочтительные соглашения и может проверять ваш источник на соответствие - хотя это немного тоже анально сохраняет вкусы многих людей). например

private const int TheAnswer = 42;

Соглашение об использовании заглавных букв в языке Pascal также задокументировано в Microsoft Рекомендации по проектированию каркаса.

На самом деле StyleCop - это «не продукт Microsoft», а «инструмент, разработанный очень увлеченным разработчиком в Microsoft (по вечерам и в выходные)». (См. Подробности в blogs.msdn.com/sourceanalysis/archive/2008/07/20/… и blogs.msdn.com/bharry/archive/2008/07/19/…). При этом в соглашениях об именах фреймворка Microsoft используется регистр Pascal для констант, поэтому инструмент просто обеспечивает соблюдение стандарта, который Microsoft делает публикует и одобряет.

bdukes 24.11.2009 00:36

@bdukes - я не говорил, что это продукт Microsoft, однако он довольно часто используется и поддерживается во всей организации (как бывший сотрудник, я использовал его за годы до того, как кто-либо за пределами Microsoft получил его в свои руки, поэтому Я хорошо знаю его наследие).

Greg Beech 24.11.2009 02:36

Стоит отметить, что вы можете легко отключить правила StyleCop и сделать это гибко для файлов, проектов и решений. Теоретически вы также можете добавить свои собственные правила. В теории (-:

Murph 03.02.2010 14:24

Мне это не нравится, потому что первая буква обычно используется, чтобы указать, является ли переменная видимой извне или нет. В коде TheAnswer для меня выглядит как публичное свойство, а не как частная константа. Я бы предпочел использовать такие префиксы, как constTheAnswer и ConstTheAnswer.

Efrain 11.05.2011 13:06

Я бы выбрал нотацию TheAnswer, кроме случаев, когда значение равно 42, и в этом случае я бы определенно придерживался подхода ALL_CAPS.

Benoittr 03.06.2011 01:29

Паскаль лучше, потому что он не требует _, который требует слишком больших усилий для постоянного ввода.

Rob 13.10.2012 06:31

Разве частное поле не должно быть верблюжьим, если оно константное?

Markus Meyer 27.01.2013 19:15

@MarkusMeyer Нет, точно так же, как имена и свойства методов, он должен быть «TitleCase», независимо от видимости.

BrainSlugs83 01.03.2016 00:58

В правилах Microsoft сказано: «Не используйте прописные буквы в именах полей»: msdn.microsoft.com/en-us/library/ta31s3bc.aspx

Markus Meyer 02.03.2016 23:59

Это верно, например, для полей. Константы считаются статическими для целей именования. msdn.microsoft.com/en-us/library/x2dbyw72.aspx

Greg Beech 03.03.2016 09:17

На самом деле я предпочитаю здесь PascalCase, но по привычке я виноват в UPPER_CASE ...

Во-первых, венгерская нотация - это практика использования префикса для отображения типа данных параметра или предполагаемого использования. Соглашения Microsoft об именах для говорит нет венгерской нотации http://en.wikipedia.org/wiki/Hungarian_notationhttp://msdn.microsoft.com/en-us/library/ms229045.aspx

Использование ЗАПИСИ не рекомендуется, как указано здесь: Паскаль Кейс является приемлемым условием и КРИЧАТЬ ЗАГЛАВНЫМИ буквами. http://en.wikibooks.org/wiki/C_Sharp_Programming/Naming

Microsoft также заявляет здесь, что ВЕРХНИЙ регистр можно использовать, если это сделано для соответствия существующей схеме. http://msdn.microsoft.com/en-us/library/x2dbyw72.aspx

Это в значительной степени подводит итог.

Да, в венгерских обозначениях не все заглавные буквы.

snibbets 25.06.2013 09:25

В своей статье Константы (Руководство по программированию на C#) Microsoft приводит следующий пример:

class Calendar3
{
    const int months = 12;
    const int weeks = 52;
    const int days = 365;

    const double daysPerWeek = (double) days / (double) weeks;
    const double daysPerMonth = (double) days / (double) months;
}

Итак, для констант это появляется, что Microsoft рекомендует использовать camelCasing. Но обратите внимание, что эти константы определены локально.

Возможно, больший интерес представляет наименование видимых извне констант. На практике Microsoft документирует свой общедоступные константы в библиотеке классов .NET как поля. Вот некоторые примеры:

Первые два являются примерами PascalCasing. Третий, похоже, следует за Microsoft Условные обозначения заглавных букв для двухбуквенного акронима (хотя число Пи не является акрионимом). И четвертый, кажется, предполагает, что правило для двухбуквенного акрионима распространяется на однобуквенный акроним или идентификатор, такой как E (который представляет собой математическую константу ееm>).

Кроме того, в своем документе о правилах использования заглавных букв Microsoft прямо заявляет, что идентификаторы полей должны именоваться через PascalCasing, и приводит следующие примеры для MessageQueue.InfiniteTimeout и UInt32.Min:

public class MessageQueue
{
    public static readonly TimeSpan InfiniteTimeout;
}

public struct UInt32
{
    public const Min = 0;
}

Вывод: используйте PascalCasing для общедоступных констант (которые описаны как поля const или static readonly).

Наконец, насколько мне известно, Microsoft не поддерживает определенные соглашения об именах или использовании заглавных букв для идентификаторов частный, как показано в примерах, представленных в вопросе.

Разработчик, написавший эту статью, явно не соблюдал рекомендуемые Microsoft соглашения о стилях для C#.

BrainSlugs83 01.03.2016 01:37

Статья, на которую указывает этот ответ, была изменена. Константы теперь общедоступны и были переведены на PascalCased. Учитывая оба этих изменения, это не помогает ответить, должны ли частные константы быть PascalCased или camelCased.

Metalogic 03.12.2019 22:07

Визуально верхний регистр - лучший вариант. Это так узнаваемо. Ради уникальности и не оставляя шансов гадать, голосую за UPPER_CASE!

const int THE_ANSWER = 42;

Примечание: верхний регистр будет полезен, когда константы должны использоваться в одном файле в верхней части страницы и для целей intellisense; однако, если бы они были перемещены в независимый класс, использование верхнего регистра не имело бы большого значения, например:

public static class Constant
{
    public static readonly int Cons1 = 1;
    public static readonly int coNs2 = 2;
    public static readonly int cOns3 = 3;
    public static readonly int CONS4 = 4;
}

// Call constants from anywhere
// Since the class has a unique and recognizable name, Upper Case might lose its charm
private void DoSomething(){
var getCons1 = Constant.Cons1;
var getCons2 = Constant.coNs2;
var getCons3 = Constant.cOns3;
var getCons4 = Constant.CONS4;
 }

Я тоже предпочитаю это, поскольку регистр Паскаля легко спутать со ссылкой на свойство.

bc3tech 10.04.2015 20:04

@ bc3tech, рад, что мы согласны. Я обновил ответ примечанием.

usefulBee 16.09.2015 23:43

Независимо от приведенных выше рекомендаций, я предпочитаю UPPER_CASE и для констант, так как это значительно упрощает их идентификацию по сравнению с любыми другими случаями.

dub stylee 24.11.2015 02:59

@usefulBee "SNAKE_CASE" категорически не рекомендуется в C#; Это неверный ответ. Правильный регистр для констант в C# - "TitleCase".

BrainSlugs83 01.03.2016 01:01

@ BrainSlugs83, я не думаю, что здесь правильно или неправильно; все сводится к предпочтениям и тому, что делает код более понятным.

usefulBee 22.06.2016 17:18

@usefulBee Согласен. Но все же хорошо отметить, как это написано консенсус. В последнее время я делал много кода Ruby, и я думаю, что SCREAMING_SNAKE_CASE имеет смысл: совершенно очевидно, что это что-то особенное, и вам даже не нужно навести курсор мыши / перейти к определению, чтобы узнать, о чем он. Вы сразу это узнаете.

Per Lundberg 25.02.2017 01:10

Другие вопросы по теме