Продолжаю свой героический путь по "Чистому коду" Роберта Мартина. Собрал для себя и вас небольшой конспект. С содержательными именами разобрались в прошлой части. Теперь настал черед функций и комментариев.
Функции
- Функция должна выполнять только одну операцию и делать это хорошо. Например, функция должна отвечать на вопрос или что-то делать, но не обе этих вещи сразу
- Все команды внутри функции должны относиться к одному уровню абстракции
- В идеале, за каждой функцией должен следовать следующий уровень абстракции. От самого высокого уровня ко все более примитивному.
- В идеальном случае, количество входящих аргументов функции равно нулю. В приемлемом, одному или двум. Если у функции три или больше аргументов, весьма вероятно, что некоторые из них можно упаковать в отдельном классе и вызывать уже внутри функции
- Аргументы флаги - это зло. Они заставляют функцию делать две операции вместо одной (при положительном значении и отрицательном)
- Нормальный процесс - написать длинные и сложные функции, а затем сократить их и привести в оптимальный вид. Главное, сразу подготовить тесты
Комментарии
- Комментарии - инструмент, к которому программист прибегает, если его код недостаточно понятен
- Случаи, в которых комментарии уместны: юридическая информация, комментарии к общедоступным API, TODO (главное, как только появится возможность, вернуться к нему и сделать все запланированное, а сам комментарий удалить), пояснение намерений
- Хорошие комментарии редки, находятся в непосредственной близости от участка кода, к которому относятся, невелики по объему и максимально точны
В качестве небольшой практики продолжаю доставать пыльные кусочки кода из первых заданий и стараюсь переписать их с учетом новой информации.
Не самый очевидный код, несмотря на достаточно простые операции. Этот скрипт должен создавать 10 файлов и записывать в них несколько случайных чисел, а затем открывать два случайных файла и суммировать числа, написанные в них (в рамках задания не было точных комментариев, есть ли необходимость возвращать число и я об этом не задумывался. Главное - видеть на экране, разве нет?)
Скорее всего, есть способы более элегантного решения этой задачи, но, на мой взгляд, код в нижнем блоке выглядит гораздо более читаемым + избавился от некоторых абсолютно лишних вещей.