Comments 6
Первых двух ошибок, скорее всего, удалось бы избежать, если бы использовалась общепринятая для C# конвенция по именам:
Кроме того, следование таким соглашениям улучшает читабельность кода, особенно для новых людей на проекте
- приватные поля в camelCase и начинаются со знака подчеркивания (например,
private string _privateField
), - публичные свойства — в PascalCase (например,
public int PublicProperty { get; set; }
), - локальные переменные и аргументы функций — в camelCase (например,
int localVariable
)
Кроме того, следование таким соглашениям улучшает читабельность кода, особенно для новых людей на проекте
Увы, даже правильное именование сущностей не всегда помогает.
Например, я сразу вспомнил ошибку в конструкторе одного из проектов. Хотели записать значение соответствующего параметра в свойство, но ошиблись, и присвоили значение свойства ему же.
Посмотрел срабатывания диагностики V3005 — оказалось, подобный пример не один, что, впрочем, ожидаемо.
Вот несколько примеров:
Sony ATF
Roslyn
MonoDevelop
MonoDevelop
Если ещё порыскать по примерам ошибок / диагностикам, можно также найти много других примеров ошибок, связанных с очень похожими именами.
Например, я сразу вспомнил ошибку в конструкторе одного из проектов. Хотели записать значение соответствующего параметра в свойство, но ошиблись, и присвоили значение свойства ему же.
Посмотрел срабатывания диагностики V3005 — оказалось, подобный пример не один, что, впрочем, ожидаемо.
Вот несколько примеров:
Sony ATF
public ProgressCompleteEventArgs(Exception progressError,
object progressResult,
bool cancelled)
{
ProgressError = ProgressError;
ProgressResult = progressResult;
Cancelled = cancelled;
}
Roslyn
public DiagnosticAsyncToken(
AsynchronousOperationListener listener,
string name,
object tag,
string filePath,
int lineNumber)
: base(listener)
{
Name = Name;
Tag = tag;
FilePath = filePath;
LineNumber = lineNumber;
StackTrace = PortableShim.StackTrace.GetString();
}
MonoDevelop
public ViMacro (char macroCharacter) {
MacroCharacter = MacroCharacter;
}
public char MacroCharacter { get; set; }
MonoDevelop
public WhitespaceNode(string whiteSpaceText, TextLocation startLocation)
{
this.WhiteSpaceText = WhiteSpaceText;
this.startLocation = startLocation;
}
public string WhiteSpaceText { get; set; }
Если ещё порыскать по примерам ошибок / диагностикам, можно также найти много других примеров ошибок, связанных с очень похожими именами.
Узнал о Fast Report узнал на #dotnext. Обязательно постараюсь попробовать использовать в каком нибудь следующем проекте. А так желаю продукту развития и большого количества пользователей.
Хм… Надо попробовать на своих проектах.)
Sign up to leave a comment.
Самые быстрые отчёты на диком западе. И горстка багов в придачу…