#рефакторинг #запахи_кода ![[Pasted image 20241112222453.png]] > Программы, использующие короткие функции, живут долго и счастливо. Работая с такой программой на протяжении нескольких лет, вы понимаете, какую ценность представляют собой маленькие функции. Все выгоды, которые дает косвенность — понятность, совместное использование и выбор, — поддер­живаются именно маленькими функциями. > Еще на заре программирования было ясно, что чем длиннее функция, тем труднее понять, как она работает > Эвристическое правило, которому мы следуем, гласит, что если возни­кает необходимость что-то прокомментировать, то пора писать функцию. В этой функции содержится код, который требовал комментариев, но ее название от­ражает его назначение, а не способ решения им задачи ### **Признаки** - Метод содержит слишком большое число строк кода. Длина метода более десяти строк должна начинать вас беспокоить ### **Причины появления** - В метод всё время что-то добавляется, но ничего не выносится. Так как писать код намного проще, чем читать - Человеку зачастую ментально сложнее создать новый метод, чем дописать что-то в уже существующий: «Как же, мне нужно добавить всего две строки, не буду же я создавать для этого целый метод» ![[Pasted image 20241112222556.png]] Если ощущается необходимость что-то прокомментировать внутри метода, этот код лучше выделить в новый метод. Даже одну строку имеет смысл выделить в метод, если она нуждается в разъяснениях. К тому же, если у метода хорошее название, то не нужно будет смотреть в его код, чтобы понять, что он делает. ### **Рефакторинги** - [[Извлечение функции (Extract Function)]] - [[Замена временной переменной запросом (Replace Temp with Query)]] - [[Замена функции командой (Replace Function with Command)]] ### **Результат** - Из всех видов объектного кода дольше всего выживают классы с короткими методами. Чем длиннее ваш метод или функция, тем труднее будет её понять и поддерживать. - В длинных методах зачастую можно обнаружить «залежи» дублирования кода. ![[Pasted image 20241112222648.png]] ### **Производительность** Многие волнуются, что увеличение числа методов может плохо сказаться на производительности. В абсолютном большинстве случаев, это не является реальной проблемой, так что **просто перестаньте об этом думать.** Имея чистый и понятный код, вы с большей вероятностью натолкнётесь на отличный способ реструктуризировать код программы и увеличить реальную производительность, если такая надобность вообще будет. ### **Ссылки** - [https://refactoring.guru/ru/smells/long-method](https://refactoring.guru/ru/smells/long-method) - [[Мартин Фаулер - Рефакторинг кода на JavaScript]]