Pull to refresh

Comments 6

Первых двух ошибок, скорее всего, удалось бы избежать, если бы использовалась общепринятая для C# конвенция по именам:
  • приватные поля в camelCase и начинаются со знака подчеркивания (например, private string _privateField),
  • публичные свойства — в PascalCase (например, public int PublicProperty { get; set; }),
  • локальные переменные и аргументы функций — в camelCase (например, int localVariable)

Кроме того, следование таким соглашениям улучшает читабельность кода, особенно для новых людей на проекте
Увы, даже правильное именование сущностей не всегда помогает.

Например, я сразу вспомнил ошибку в конструкторе одного из проектов. Хотели записать значение соответствующего параметра в свойство, но ошиблись, и присвоили значение свойства ему же.

Посмотрел срабатывания диагностики 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.