- Основой нейминга является кодстайл майкрософта: https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/naming-guidelines;
- Имена должны быть читабельными и понятными, без сокращений и грамматических ошибок. Исключение – общепринятые сокращения, напр. i, j, k в циклах;
// ПЛОХО
var a = new List<Student>();
var stds = new List<Student>();
var list = new List<Student>();
// ХОРОШО
var students = new List<Student>();
- Не используйте сокращения;
- Не используйте отрицание в названиях:
bool isRed = color == Colors.Red; // Good
bool isNotBlue = color != Colors.Blue; // Bad
if (!isRed // Ok
&& !isNotBlue) // It is not ok
return ...
- Используйте studentsCount и studenstList вместо numberOfStudents, listOfStudents;
- Придерживайтесь нейминга в соответствии с A/HC/LC Pattern'ом. Имя состоит с
prefix? + action (A) + high context (HC) + low context? (LC)
.- Action - это действие, которое выполняется (get, set, remove, etc.)
- HC и LC - это выделение более значимых элементов. Название метода GetUserAssignments подразумевает, что есть основная сущность (User) и ассоциированные зависимые (Assignments).
- Методы, предназначенные для доступа к данным, в результате которых может вернуться null, должны иметь префикс Find.
// ХОРОШО
public Student? FindStudent(int id)
{
/* ищем студента */
// возвращаем студента вне зависимости от того, null это или нет
return student;
}
-
Методы, предназначенные для доступа к данным всегда возвращающие ненулевое значение, должны иметь префикс Get (и бросать ошибку, если не могут вернуть не null).
Неправильно: https://github.com/kysect/CodeStyle/blob/dc89af472d14e0279e58b4a5a8bf829190049899/Samples/Invalid/Person.cs#L22-L28
-
Методы, пытающиеся выполнить действие, но не обязательно выполняющие его, должны иметь префикс Try.
// ПЛОХО
public void TryWithdrawMoney(CreditCard creditCard, int password, double moneyToWithdraw)
{
// если пароль совпадает, снимаем деньги
if (creditCard.IsPasswordCorrect(password))
creditCard.Withdraw(moneyToWithdraw);
}
// ХОРОШО
public bool TryWithdrawMoney(CreditCard creditCard, int password, double moneyToWithdraw)
{
// если пароль не верный, возвращаем false
if (!creditCard.IsPasswordCorrect(password))
return false;
// если пароль верный, то снимаем деньги
creditCard.Withdraw(moneyToWithdraw);
return true;
}