Версия SQLite решения RedFilters top
select d.Date
from (
select
date(julianday('2010-01-20') + (a.a + (10 * b.a) + (100 * c.a))) as Date
from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
) d
where
d.Date between '2010-01-20' and '2010-01-24'
order by d.Date
Рекомендуемое соглашение об именовании и использовании заглавных букв заключается в использовании для констант регистров Pascal (у Microsoft есть инструмент под названием StyleCop , который документирует все предпочтительные соглашения и может проверять ваш источник на соответствие - хотя это немного тоже анально сохраняющий вкус многих людей). например,
private const int TheAnswer = 42;
Соглашение об использовании заглавных букв в Паскале также задокументировано в Microsoft Framework Framework Guidelines .
На самом деле, это
private const int TheAnswer = 42;
По крайней мере, если вы посмотрите на библиотеку .NET, IMO - лучший способ решить соглашения об именах - поэтому ваш код не выглядит неуместным.
Во-первых, венгерская нотация - это практика использования префикса для отображения типа данных параметра или предполагаемого использования. Соглашения Microsoft о присвоении имен для отказа в венгерской нотации http://en.wikipedia.org/wiki/Hungarian_notation http://msdn.microsoft.com/en-us/library/ms229045.aspx
Использование UPPERCASE не рекомендуется, как указано здесь: Pascal Case - это приемлемое соглашение и SCREAMING CAPS. http://en.wikibooks.org/wiki/C_Sharp_Programming/Naming
Microsoft также заявляет, что здесь можно использовать UPPERCASE, если это сделано для соответствия существующей схеме. http://msdn.microsoft.com/en-us/library/x2dbyw72.aspx
Это в значительной степени подводит итог.
Визуально верхний регистр - это путь. Это так узнаваемо. Ради уникальности и не оставляя шансов угадать, я голосую за UPPER_CASE!
const int THE_ANSWER = 42;
Примечание : верхний регистр будет полезен, когда константы должны использоваться в одном файле вверху страницы и в целях интеллектуальной собственности; однако, если бы они должны были быть перемещены в независимый класс, использование верхнего регистра не имело бы большого значения, например:
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 might lose its charm
private void DoSomething(){
var getCons1 = Constant.Cons1;
var getCons2 = Constant.coNs2;
var getCons3 = Constant.cOns3;
var getCons4 = Constant.CONS4;
}
Я все еще использую заглавные буквы для константных значений, но это скорее привычка, чем по какой-то конкретной причине.
Конечно, легко сразу увидеть, что что-то является const. Вопрос для меня: действительно ли нам нужна эта информация? Помогает ли это нам как-то избежать ошибок? Если я назначу значение const, компилятор скажет мне, что я сделал что-то глупое.
Мой вывод: иди с верблюжьей шкурой. Возможно, я тоже поменяю свой стиль; -)
Редактировать:
То, что пахнет венгерским, на самом деле не является действительным аргументом, ИМО. Вопрос всегда должен быть: это помогает, или это больно?
Есть случаи, когда венгерский помогает. Не так много в наше время, но они все еще существуют.
В своей статье Константы (Руководство по программированию в 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 как поля . Вот несколько примеров:
static readonly
) Первые два примеры PascalCasing
. Третий, кажется, следует за Соглашениями о капитализации Microsoft для двухбуквенной аббревиатуры (хотя pi не является акрионимом). И четвертый, кажется, предполагает, что правило для двухбуквенного акрионима распространяется на однобуквенное сокращение или идентификатор, такой как E
(который представляет математическую константу e ).
Кроме того, в своем документе «Соглашения о капитализации» 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 не поддерживает конкретные соглашения об именах или использовании заглавных букв для частных идентификаторов , как показано в примерах, представленных в вопросе.
Я полагаю, что ALL_CAPS взят из методов работы C и C ++. Эта статья здесь объясняет, как возникли различия в стиле.
В новых IDE, таких как Visual Studio, легко определить типы, область действия и, если они постоянны, это не является строго обязательным.
Программное обеспечение FxCop и Microsoft StyleCop поможет вам получить рекомендации и проверить код, чтобы все работали одинаково.
Я действительно предпочитаю PascalCase здесь - но по привычке я виновен в UPPER_CASE ...
Оставьте венгерцев венграм.
В этом примере я бы даже пропустил окончательную статью и просто использовал
private const int Answer = 42;
Это ответ или это ответ?
* Сделал редактирование как Паскаль строго правильным Однако, я думал, что вопрос был в поиске большего ответа на жизнь, вселенную и все остальное .