#c#
#c#
Вопрос:
Resharper просто подсказал мне эту строку кода:
private static bool shouldWriteToDatabase = false;
это указывает на то, что я не должен говорить «= false», потому что bools, по-видимому, по умолчанию имеет значение false в C #. Я программирую на C # более полутора лет и никогда не знал этого. Я думаю, это просто проскользнуло сквозь трещины, но это заставляет меня задуматься, что такое хорошая практика.
Должен ли я исходить из предположения, что значения по умолчанию понятны всем? Это приведет к более чистому коду, но вызывает двусмысленность, если другой программист не знает значения по умолчанию.
Комментарии:
1. Я не согласен с этим правилом ReSharper, и я бы немедленно отключил его, если бы мне пришлось использовать ReSharper. Кто когда-нибудь помнит, какие значения по умолчанию?
2. @DavidePiras Хотя я согласен с тем, что отключаю это правило, я категорически не согласен с вашим вторым утверждением. Каждый разработчик C # должен иметь базовое представление о значениях по умолчанию — и это легко сделать в .NET, поскольку правила CLI для значений по умолчанию в основном являются «нулевыми» значениями. Вам нужно только запомнить null для ссылочных типов, false для bool и ноль для всех примитивных числовых типов. Это становится странным, только когда вы смотрите на такие типы, как DateTime и т. Д., Но Для этих типов значение по умолчанию обычно никогда не является хорошим значением инициализации…
3. @DavidePiras Какие значения по умолчанию вы не знаете?
4. @Reed Copsey — Вы также вряд ли будете использовать такие типы, как DateTime, без предварительного использования DateTime . Теперь, например, сначала (поскольку вы знаете, что это требуется) новое DateTime(…) с определенным значением, которое вы имеете в виду.
5. Я просто не помню, теперь благодаря Reed я узнал что-то новое, что имеет смысл, дата и время неприятны, и когда вы включаете обработку всех предупреждений как ошибок, иногда вы получаете ошибку, когда не присваиваете значение. Мне нравится, когда все должно быть явным, поэтому, если другой разработчик или я забыли, эти правила в любом случае могут быстро проясниться.
Ответ №1:
Лично я думаю:
- Хорошо быть явным, если ваш код полагается на начальное значение.
- Если ваш код не зависит от начального значения, его исключение имело бы больше смысла и меньше загромождало код.
Однако я не думаю, что Resharper может легко обнаружить разницу между этими двумя ситуациями.
Комментарии:
1. Хорошо. Тогда я поставлю resharper на его место! 🙂
2. Почему хорошо быть явным? Мне кажется, это отвлекает меня. Я имею в виду, если вы не знаете, что
bool
значение по умолчанию равно false , тогда у вас есть другие проблемы… Похоже на высказываниеif (b == true) ...
. Опять же, отвлекающий фактор, поскольку он избыточен.3. @Kirk Woll:
bool x = false;
означает «Я хочу, чтобы этот элемент изначально был false». Это сильно отличается отbool x;
того, в котором говорится: «Может быть, я хочу, чтобы этот элемент изначально был false , или, может быть, я не использую начальное значение, или, возможно, я просто забыл его инициализировать. Я оставлю вас догадываться, что именно. »4. @Mark,
bool x;
поскольку объявление поля просто всегда означает (для меня), что я имею в виду, что оно должно быть false .5. Мне нравится быть явным, особенно для типов с нулевым
bool? x
значением;, что по умолчанию? 🙂 Помогает другим программистам, особенно когда они могут либо искать начальные значения в определении, во всех конструкторах, заводских методах или странных методах инициализации.
Ответ №2:
Я единственный, кто думает, что это = false;
просто не загромождает код? Как разработчик, который поддерживает приложения, в основном написанные другими, четкое изложение того, что вы имеете в виду, может быть очень полезным. Да, по умолчанию в C # используется значение false, но когда вы просматриваете чужой код, может возникнуть путаница, было ли это предполагаемое поведение или они просто были небрежными.
Ответ №3:
Лично значения по умолчанию документируются так же хорошо, как и все остальное на языке (C # или любом другом языке). Это достаточно просто, чтобы это следовало предположить, т. Е. int начинается с 0 . Для меня выделяется сценарий, если вы хотите, чтобы огромный массив int
s содержал 0. Вы собираетесь это определить или просто позволить C # инициализировать его с помощью 0s?
Кажется немного нелогичным предполагать, что большие массивы int
s равны 0s, но указывать, что bool
это значение равно false . Указание базовой переменной, но не более сложной структуры. Поэтому я ничего не инициализирую значением по умолчанию для обеспечения согласованности.
Комментарии:
1. Хотя вы очень хорошо отметили согласованность, вы упустили из виду, что а) в отличие от bool , инициализацию содержимого массива нелегко выполнить в одной строке и б) в отличие от bool, явная (повторная) инициализация значений в массиве приведет к значительным дополнительным затратам производительности.приведите массив к их значениям по умолчанию. Эти два момента для меня означают, что допустимо рассматривать две ситуации по-разному. Но 1 в любом случае.