Functions
F.56
Избегайте излишней вложенности условий
Причина
Мелкая вложенность условий делает код более простым для восприятия. Она также делает намерение яснее. Стремитесь размещать существенный код на самом внешнем уровне области видимости, если только это не скрывает намерение.
Пример
Используйте сторожевое выражение для обработки исключительных случаев и раннего возврата.
// Плохо: глубокая вложенность
void foo() {
...
if (x) {
computeImportantThings(x);
}
}
// Плохо: всё ещё избыточный else.
void foo() {
...
if (!x) {
return;
}
else {
computeImportantThings(x);
}
}
// Хорошо: ранний возврат, без избыточного else
void foo() {
...
if (!x)
return;
computeImportantThings(x);
}
Пример
// Плохо: ненужная вложенность условий
void foo() {
...
if (x) {
if (y) {
computeImportantThings(x);
}
}
}
// Хорошо: объединение условий + ранний возврат
void foo() {
...
if (!(x && y))
return;
computeImportantThings(x);
}
Контроль
Помечать избыточный else. Помечать функцию, тело которой представляет собой просто условный оператор, охватывающий блок.
C: Классы и иерархии классов
Класс — это пользовательский тип, для которого программист может определить представление, операции и интерфейсы. Иерархии классов используются для организации связанных классов в иерархические структуры.
Сводка правил для классов:
- C.1: Организуйте связанные данные в структуры (
structилиclass) - C.2: Используйте
class, если класс имеет инвариант; используйтеstruct, если члены данных могут изменяться независимо - C.3: Представляйте различие между интерфейсом и реализацией с помощью класса
- C.4: Делайте функцию членом только если ей нужен прямой доступ к представлению класса
- C.5: Размещайте вспомогательные функции в том же пространстве имён, что и поддерживаемый ими класс
- C.7: Не определяйте класс или перечисление и не объявляйте переменную этого типа в одном операторе
- C.8: Используйте
classвместоstruct, если какой-либо член не является публичным - C.9: Минимизируйте доступность членов
Подразделы: