спасибо за @mindthief, ваш ответ поможет решить мою проблему сегодня. Функция ниже может группироваться днем немного легче, надежда может помочь другим.
/**
* group by day
* @param query document {key1:123,key2:456}
*/
var count_by_day = function(query){
return db.action.group(
{
keyf: function(doc) {
var date = new Date(doc.time);
var dateKey = (date.getMonth()+1)+"/"+date.getDate()+"/"+date.getFullYear();
return {'date': dateKey};
},
cond:query,
initial: {count:0},
reduce: function(obj, prev) {
prev.count++;
}
});
}
count_by_day({this:'is',the:'query'})
Использование вообще Вы и Ваша команда находите самое читаемое.
Другие ответы предположили, что новая строка создается каждый раз, когда Вы используете ""
. Это не верно - должный представить интернирование в виде строки, оно будет создано или однажды на блок или однажды на AppDomain (или возможно однажды для целого процесса - не уверенный в той передней стороне). Это различие незначительно - в широком масштабе, в широком масштабе незначительный.
то, Которое Вы находите более читаемыми, является другим разговором, как бы то ни было. Это субъективно и будет варьироваться от человека человеку - таким образом, я предлагаю, чтобы Вы узнали то, что большинство людей в Вашей команде как, и все идут с этим для непротиворечивости. Лично я нахожу ""
легче читать.
аргумент, которые ""
и " "
легко приняты друг за друга, действительно не промывает со мной. Если Вы не используете пропорциональный шрифт (и я не работал с никакой разработчики, которые делают), довольно легко сказать различие.
Я думаю, что второе является "надлежащим", но быть честным я не думаю, что это будет иметь значение. Компилятор должен быть достаточно умным для компиляции любого из тех к тому же самому байт-коду. Я использую "" меня.
В то время как различие очень, Очень мало, различие все еще существуют.
1) "" создает объект в то время как Строка. Пустой не делает. Но этот объект будет создан однажды и будет сослан от строкового пула позже, если у Вас будет другой "" в коде.
2) Строка и строка являются тем же, но я рекомендовал бы использовать Строку. Пустой (а также Строка. Формат, Строка. Копия и т.д.), так как запись через точку указывает на класс, не оператор, и класс наличия, запускающийся с прописной буквы, соответствует стандартам кодирования C#.
Компилятор должен сделать их все равно в конечном счете. Выберите стандарт так, чтобы Ваш код было легко считать и придерживаться его.
Любой из первых двух был бы приемлем для меня. Я избежал бы последнего, потому что относительно легко представить ошибку путем помещения пространства между кавычками. Эту конкретную ошибку было бы трудно найти наблюдением. Не принимая опечаток, все семантически эквивалентны.
[РЕДАКТИРОВАНИЕ]
кроме того, Вы могли бы хотеть всегда использовать или string
или String
для непротиворечивости, но это - просто я.
Я не имею значения. Последний является самым быстрым для ввода хотя:)
Я использую третье, но других двух первое кажется менее нечетным. строка является псевдонимом для Строки, но наблюдение их через присвоение чувствует прочь.
Это не имеет значения - что они - точно то же самое. Однако главное состоит в том, что необходимо быть последовательны
p.s. Я борюсь с этим видом "точек правильная вещь" все время.
string
синоним для System.String
тип, Они идентичны.
Значения также идентичны: string.Empty == String.Empty == ""
я не использовал бы символьную константу "" в коде, скорее string.Empty
или String.Empty
- легче видеть то, что имел в виду программист.
Между string
и String
мне нравится нижний регистр string
более справедливый, потому что я раньше работал с Дельфи для партии лет, и стиль Дельфи строчный string
.
Так, если бы я был Вашим боссом, Вы записали бы string.Empty
лучший код не является никаким кодом во всем :
фундаментальный характер кодирования - то, что наша задача, как программисты, состоит в том, чтобы распознать, что каждое решение, которое мы принимаем, является компромиссом. [†¦] Запускаются с краткости. Увеличьте другие размеры как требуется путем тестирования.
, Следовательно, меньше кода является лучшим кодом: Предпочтите ""
string.Empty
или String.Empty
. Те два в шесть раз дольше без дополнительного преимущества — В, конечно, никакая добавленная ясность, поскольку они выражают ту же самую информацию.
Я предпочел бы string
String
. выбор string.Empty
[более чем 113] - вопрос выбора того и липкий с ним. Преимущество использования string.Empty
является им, очень очевидно, что Вы имеете в виду, и Вы случайно не копируете по непечатаемым символам как "\x003"
в Вашем ""
.
Я не собирался вмешиваться, но я вижу, что некоторая неправильная информация брошена сюда.
я, лично, предпочитаю string.Empty
. Это - персональное предпочтение, и я изгибаюсь к желанию любой команды, с которой я работаю в зависимости от конкретного случая.
, Поскольку некоторые другие упомянули, нет никакого различия вообще между string.Empty
и String.Empty
.
Кроме того, и это - немного известного факта, использование "" совершенно приемлемо. Каждый экземпляр "", в других средах, создаст объект. Однако.NET интернирует свои строки, таким образом, будущие экземпляры дернут за ту же неизменную ниточку от объединения интерна, и любой хит производительности будет незначителен. Источник: Brad Abrams .
Я лично предпочитаю, "" если нет серьезное основание к чему-то более сложному.
Любое вышеупомянутое.
существуют многие, много лучших вещей разглагольствовать. Такой как, какая цветная кора удовлетворяет дереву лучше всего, я думаю неопределенный коричневый с оттенками приятного мха.
String.Empty
и string.Empty
эквивалентны. String
имя класса BCL; string
его псевдоним C# (или ярлык, если Вы будете). То же как с Int32
и int
. См. документы для большего количества примеров.
До ""
затронут, я не действительно уверен.
Лично, я всегда использую string.Empty
.
Я сильно предпочитаю Строку. Пустой, кроме других причин гарантировать Вы знаете то, что это и что Вы случайно не удалили содержание, но прежде всего для интернационализации. Если я вижу строку в кавычках тогда, я всегда должен задаваться вопросом, является ли это новым кодом, и он должен быть помещен в таблицу строк. Таким образом, каждый временной код изменен/рассмотрен, необходимо искать "что-то в кавычках", и да можно отфильтровать пустые строки, но я говорю людям, что это - хорошая практика, чтобы никогда поместить строки в кавычки, если Вы не будете знать, что это не будет локализовано.
Практически каждый разработчик знает, что означает "". Я лично столкнулся с String.Empty в первый раз, и мне пришлось потратить некоторое время на поиск в Google, чтобы выяснить, действительно ли они то же самое.
На самом деле нет никакой разницы с точки зрения производительности и сгенерированного кода. При тестировании производительности они переходили туда и обратно, один из которых был быстрее другого, и только на миллисекунды.
Глядя на закулисный код, вы действительно не видите никакой разницы. Единственное отличие заключается в IL, который string.Empty
использует код операции ldsfld
и ""
использует код операции ldstr
, но это только потому, что string.Empty
статичен, и обе инструкции делают то же самое.
Если вы посмотрите на созданную сборку, она будет точно такой же.
private void Test1()
{
string test1 = string.Empty;
string test11 = test1;
}
private void Test2()
{
string test2 = "";
string test22 = test2;
}
.method private hidebysig instance void
Test1() cil managed
{
// Code size 10 (0xa)
.maxstack 1
.locals init ([0] string test1,
[1] string test11)
IL_0000: nop
IL_0001: ldsfld string [mscorlib]System.String::Empty
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: stloc.1
IL_0009: ret
} // end of method Form1::Test1
.method private hidebysig instance void
Test2() cil managed
{
// Code size 10 (0xa)
.maxstack 1
.locals init ([0] string test2,
[1] string test22)
IL_0000: nop
IL_0001: ldstr ""
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: stloc.1
IL_0009: ret
} // end of method Form1::Test2
string test1 = string.Empty;
0000003a mov eax,dword ptr ds:[022A102Ch]
0000003f mov dword ptr [ebp-40h],eax
string test11 = test1;
00000042 mov eax,dword ptr [ebp-40h]
00000045 mov dword ptr [ebp-44h],eax
string test2 = "";
0000003a mov eax,dword ptr ds:[022A202Ch]
00000040 mov dword ptr [ebp-40h],eax
string test22 = test2;
00000043 mov eax,dword ptr [ebp-40h]
00000046 mov dword ptr [ebp-44h],eax