Пролетта дойде! По това време на годината всеки почиства основно къщата си. Като разработчик предлагам различен подход: Почистете кода си.
Какво е чист код?
Чистият код е лесен за четене, разбиране и поддръжка от автора на кода и други разработчици.
Защо трябва да пишете чист код?
Писането на чист код е необходимо мислене. Това е много важно за вас и вашите колеги. Ще бъде по-лесно и по-бързо да се подобри, поддържа и тества продукт, ако всички разбират кода. Това повишава качеството на продукта и намалява техническия дълг.
️Как да почистите кода си?
Рефакторингът е за борба с техническия дълг. Той трансформира мръсен код в чист код. Рефакторингът трябва да се извърши като серия от малки промени, всяка от които прави съществуващия код малко по-добър, като същевременно оставя програмата в работно състояние.
Стъпка 1: Метод за преименуване
проблем
Името на метода не обяснява какво прави методът.
Решение
Преименувайте метода.
Ползи
Кодът е четим и обяснява какво прави. Внимавайте с имената си и ги сменете, когато намерите по-добри. Всеки, който чете вашия код (включително и вие), ще бъде по-щастлив, ако го направите.
Работния процес
- Създайте нов метод с ново име. Копирайте кода на стария метод към него. Заменете целия код в стария метод с извикване на новия метод.
- Намерете всички препратки към стария метод и ги заменете с препратки към новия.
- Изтрийте стария метод.
Стъпка 2: Заменете вложените условни условия с предпазни клаузи
проблем
Група от вложени условни изрази затрудняват разбирането на логиката на кода.
Решение
Изолирайте всички условия в отделни клаузи, като използвате Gзащитни клаузи. Предпазната клауза е фрагмент от код в горната част на функция или метод, който се връща рано, когато е изпълнено някакво предварително условие.
Ползи
Функцията е по-малка и списъкът с условни изрази е плосък. Предпазните клаузи намаляват сложността и улесняват разбирането на логиката. Можем да пропуснем четенето на охраната и бързо да видим основната цел на метода.
Работния процес
- Изолирайте всички клаузи, които водят до извикване на изключение или незабавно връщане на стойност от метода.
- Поставете тези условия в началото на метода, преди основните проверки.
Стъпка 3: Заменете твърдо кодираната стойност
проблем
Кодът използва твърдо кодирана стойност, която има определено значение.
Решение
Заменете тази стойност с константа или конфигурационен параметър, който има разбираемо за човека име, обясняващо значението на стойността.
Ползи
Улеснете промяната на стойността на константа или стойността на конфигурация, отколкото да търсите тази стойност в цялата кодова база, без риск от случайна промяна на същата стойност, използвана другаде за различна цел.
Работния процес
- Декларирайте константа или създайте конфигурационен параметър и му присвоете стойността.
- Намерете всички споменавания на твърдо кодираната стойност.
- За всяка от стойностите, които намерите, заменете я с константата или стойността на config. Уверете се, че е правилната стойност за замяна.
Стъпка 4: Премахване на дублирани условни фрагменти
проблем
Идентичен код може да бъде намерен във всички клонове на условно условие.
Решение
Преместете кода извън условието.
Ползи
Дедупликация на код.
Работния процес
- Ако дублираният код е в началото на условните разклонения, преместете кода на място преди условното.
- Ако кодът се изпълнява в края на разклоненията, поставете го след условието.
- Ако дублиращият се код е произволно разположен в разклоненията, първо опитайте да преместите кода в началото или края на разклонението, в зависимост от това дали променя резултата от следващия код.
- Ако е подходящо и дублираният код е по-дълъг от един ред, опитайте да използвате извлечен метод.
Стъпка 5: Метод на извличане
проблем
Кодов фрагмент може да бъде групиран заедно.
Решение
Преместете този код в отделен нов метод и заменете стария код с извикване на метода.
Ползи
Методът е по-малък и лесен за тестване. Кодът е по-четлив, защото новият метод има име, което описва целта на метода. Може да се използва повторно другаде в програмата. Например, функцията може да се използва преди да актуализирате книгата.
Работния процес
- Създайте нов метод с четливо име, което обяснява какво прави методът.
- Копирайте съответния кодов фрагмент във вашия нов метод.
- Заменете фрагмента с извикване на новия метод.
Стъпка 6: Извличане на променлива
проблем
Един израз е труден за разбиране.
Решение
Извлечете всеки резултат от израз в отделни променливи.
Ползи
Направете сложен израз по-разбираем с променливи, които имат смислени имена.
Работния процес
- Декларирайте нова променлива със смислено име за всеки сложен израз. Присвоете израза на тази променлива.
- Заменете всеки израз с променливата.
Стъпка 7: Консолидиране на параметри с обект
проблем
Методът съдържа много параметри.
Решение
Създайте обект, който включва параметрите.
Ползи
По-четливо. Методът има обект с разбираемо име вместо много параметри. Лесно е да добавите нов критерий, без да променяте сигнатурата на метода. Възможно е да използвате валидатор, за да се уверите, че обектът е валиден.
Работния процес
- Създайте нов клас, който ще представлява вашата група от параметри.
- Заменете параметрите със създадения обект.
- Във всички извиквания на метод, предайте обекта, създаден от стари параметри на метода.
Стъпка 8: Заменете масива с обект
проблем
Масивът съдържа определени елементи, означаващи различни неща.
Решение
Заменете масива с обект, който има поле за всеки елемент.
Ползи
Полето на клас се документира много по-лесно от елементите на масив. Наистина е сложно да се знае кои са всички ключове на масива, използвани за съхраняване на данните вместо клас, който има автоматично довършване благодарение на документацията. Освен това е по-лесно да тествате клас вместо масив. Всеки метод за достъп на класа може да има своя собствена логика.
Работния процес
- Създайте нов клас, който ще съдържа данните от масива.
- Създайте частно поле за всеки елемент от масива.
- Създайте метод за достъп за всяко поле от новия клас.
- Създайте нов екземпляр на класа на мястото, където е иницииран масивът от данни.
- Заменете всеки елемент от масива с методите за достъп.
Стъпка 9: Консолидиране на условен израз
проблем
Няколко условия водят до един и същи резултат или действие.
Решение
Консолидирайте всички условни изрази в един израз.
Ползи
Дедупликация на код. Множеството условни изрази вече са изолирани в нов метод с име, което обяснява целта на условното условие. Новият метод е лесен за подигравка за тестване на кода.
Работния процес
- Консолидирайте условните изрази в един израз, като използвате
and
иor
. - Създайте нов метод с четливо име, което обяснява какво прави методът.
- Копирайте израза във вашия нов метод.
- Заменете израза с извикване на новия метод.
Стъпка 10: Извличане на клас
проблем
Един клас прави всичко на едно място.
Решение
Извлечете всяка подходяща функционалност в отделен клас.
Ползи
Класът има една единствена отговорност, това е дефиницията на Принципа на единната отговорност. Кодът е по-лесен за тестване и поддръжка. Това прави всеки клас многократно използваем.
Работния процес
- Създайте клас за всяка подходяща функционалност.
- Преместете методите, които зависят от тази функционалност в новия клас.
- Предава обект в конструктора на класа, който зависи от функционалността.
- Заменете методите с помощта на зависимостта.