39 lines
4.4 KiB
Markdown
39 lines
4.4 KiB
Markdown
#рефакторинг #запахи_кода
|
||
|
||
|
||
![[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]] |