Код стиль вопрос здесь.Должен ли я всегда/никогда/никогда не инициализировать поля объектов значениями по умолчанию?
Я просмотрел вопрос this, который спрашивает, действительно ли .NET CLR всегда будет инициализировать значения полей. (Ответ да.) Но мне кажется, что я не уверен, что это всегда хорошая идея, чтобы он это делал. Мое мышление является то, что если я вижу, как это заявление:
int myBlorgleCount = 0;
У меня есть довольно хорошее представление о том, что программист ожидает счетчик, чтобы начать с нуля, и все в порядке с этим, по крайней мере, в ближайшем будущем. С другой стороны, если я просто вижу:
int myBlorgleCount;
У меня нет реальной непосредственной идеи, если 0 является законным или разумным значением. И если программист только начинает читать и модифицирует его, я не знаю, должен ли программист начать его использовать до того, как он установит для него значение, или если они ожидали, что он будет равен нулю и т. Д.
другой стороны, некоторые довольно умные люди и утилита очистки кода Visual Studio, скажите мне удалить эти избыточные объявления. Каков общий консенсус по этому поводу? (Есть ли консенсус?)
Я обозначил это как агностик языка, но если есть странный случай, когда это особенно хорошая идея пойти против зерна для определенного языка, это, вероятно, стоит указать.
EDIT: Хотя я и сказал, что этот вопрос является агностиком языка, он явно не применим к таким языкам, как C, где инициализация значения не выполняется.
EDIT: Я ценю ответ Джона, но это именно то, что я не ищет. Я понимаю, что .NET (или Java или что-то еще) выполнит задание и инициализирует значения последовательно и правильно. Я хочу сказать, что если я вижу код, который модифицирует значение, которое ранее не было явно задано в коде, я, как разработчик кода, не знаю, означал ли исходный кодер его значение по умолчанию, или просто забыл установить значение, или ожидал, что он будет установлен где-то в другом месте и т. д.
Для будущих сопровождающих: в первый день они спрашивают, скажите им, в каком мире они находятся. Конец проблемы. И мы говорим не о языковой функции. Это функция _platform_. Это верно для evey .NET language и всегда будет правдой.* Подумайте, что произойдет, если это изменится! –
На самом деле это не так. Не все программное обеспечение является .NET? Или я живу в параллельной вселенной? –
Джон: Сопровождающий может прекрасно понять проблему, но как они знают, что кодер хотел получить значение по умолчанию, когда они не инициализировали значение? Возможно, он должен был быть дефолтом, но, возможно, нет. В конце концов, если бы все было идеально с кодом, они не поддержали бы его. – Beska