Нет избыточности контекста.
Нет работы против собственного инструментария.
Короткие имена лучше длинных, если только их смысл понятен читателю кода.
Имена экземпляров более точные.
Развивать описательные навыки и единый культурный фон.
Не должно быть опасения возражений при переименовании.
Функции:
Первый уровень структуризации.
Длина не избыточна.
Не содержит повторяющихся фрагментов кода.
Один уровень абстракции.
Функции компактны.
Функции еще компактнее.
Функции желательно не более 20 строк.
Все функции предельно очевидны.
Блоки в командах if, else, while и так далее должны состоять из 1 строки, в которой обычно – вызов функции.
Функции не содержат вложенных структур.
Не более 1—2 отступов.
Функция должна выполнять только одну операцию. Она должна выполнять ее хорошо. И ничего другого она делать не должна.
Если функция выполняет только те действия, которые находятся на одом уровне под объявленным именем функции, то эта функция выполняет одну операцию.
Функции пишутся прежде всего для разложения более крупной концепции (иначе говоря, имени функции) на последовательность действий в следующем уровне абстракции.
Чтобы определить, что функция выполняет более 1 операции, надо попробовать извлечь из нее другую функцию, которая бы не являлась простой переформулировкой реализации.
Функцию, выполняющую только одну операцию, невозможно осмысленно разделить на секции.
Все команды функции находятся на одном уровне абстракции.
За каждой функцией должны следовать функции следующего уровня абстракции.
Switch, длинные цепочки if-else скрывать в низкоуровневом классе и не дублировать в коде (использовать полиморфизм).
Принцип единой ответственности (single responsibility principle).
Принцип открытости-закрытости (open-closed principle).
Программа не содержит неограниченного количества других функций с аналогичной структурой (можно использовать абстрактную фабрику).
Имя точно описывает, что делает функция.
Длинное имя функции лучше короткого невразумительного.
Не бойтесь расходовать время на выбор имени функции.
В именах функций использовать те же словосочетания, глаголы и существительные, что и в модулях.
В идеальном случае количество аргументов функции равно нулю.
Использовать функции 1 аргумента:
– для проверки некоторого условия, связанного с аргументом;
– для обработки аргумента, его преобразования и возвращения;
– для события (вход есть, выхода нет);
– должно быть предельно ясно, что перед читателем событие;
– остальных форм функций с 1 аргументом лучше избегать;
– не использовать аргументы-флаги.
Бинарные функции оправданны, если оба аргумента – упорядоченные компоненты одного значения.
Использовать все доступные способы для сведения функций к унарной форме.
Аргументы должны иметь естественную связь и естественный порядок.
Хорошо подумать перед созданием тернарной функции.
Упаковывать аргументы в объекты.
Если переменное количество равноправных аргументов – упаковать в List.
Хорошее имя функции способно объяснить смысл функции, порядок и смысл ее аргументов.
В унарных функциях функция и аргумент должны образовывать естественную пару «глагол – существительное».
Функция не делает чего-то скрытно от пользователя.