"Вас прёт упрощение, а я усложняю всё" - © Мирон Янович
Каким должен быть метод (Функция)?
Метод должен быть понятным и простым, чтобы каждый смог понять его, когда придет на проект ♨️
Есть много различных способов оценить сложность метода: можно посмотреть на длину метода, количеству параметров, в него поступающих, можно взять более сложные вещи, вроде цикломатической и когнитивной сложности. Мы с вами сейчас поговорим о двух первых способах.
В величайшей, по моему мнению, книге Роберта Мартина "Чистый код" приводится такое мнение:
"Первое правило: функции должны быть компактными, второе: еще компактнее... Желательно, чтобы длина функции не превышала 20 строк"
И все? Просто пишем методы, которые короче 20 строк?
С одной стороны - да, стараемся сделать метод максимально минимальным, но не переусердствуем, все таки метод из одной строки - тоже сомнительная вещь. Более того, по правилам оформления java-кода (например) длина строки не должна превышать 80 символов.
Есть еще ряд метрик, которые говорят о том, что ваш метод "сложен". Роберт Мартин дает еще один важный совет по поводу устройства методов: "Функция должна выполнять только одну операцию, она должна делать это хорошо и ничего другого она делать не должна".
Понятно, что в методе происходит много действий, но операция тут воспринимается как нечто более высокоуровневое. Например, открыть файл - вполне себе одна операция, хоть и содержит внутри много действий. А вот открыть и записать туда какие-то начальные значения - это уже две операции (как минимум).
Есть еще одна важная метрика - количество аргументов (параметров) вашего метода-функции 🧠
В книге, из которой я подчерпнул знания и вдохновение, пишется: "В идеальном случае количество аргументов функции равно 0... Функции с 3 аргументами стоит избегать". Тут все довольно просто - чем меньше параметров в методе, тем он более легок в освоении, понимании и тестировании. См. раздел "Аргументы функции" в "Чистом Коде".
Итак:
1) Методы короче 20 строчек
2) Один метод - одна операция
3) Минимум аргументов
Пишите методы понятными, репостите публикацию, а также подписывайтесь на мой телеграмм-канал "Программист живет нормально" и проверяйте, как усвоили эту тему: https://t.me/+NiOcvLf9aQVhMjIy