Пролетта дойде! По това време на годината всеки почиства основно къщата си. Като разработчик предлагам различен подход: Почистете кода си.

Какво е чист код?

Чистият код е лесен за четене, разбиране и поддръжка от автора на кода и други разработчици.

Защо трябва да пишете чист код?

Писането на чист код е необходимо мислене. Това е много важно за вас и вашите колеги. Ще бъде по-лесно и по-бързо да се подобри, поддържа и тества продукт, ако всички разбират кода. Това повишава качеството на продукта и намалява техническия дълг.

️Как да почистите кода си?

Рефакторингът е за борба с техническия дълг. Той трансформира мръсен код в чист код. Рефакторингът трябва да се извърши като серия от малки промени, всяка от които прави съществуващия код малко по-добър, като същевременно оставя програмата в работно състояние.

Стъпка 1: Метод за преименуване

проблем

Името на метода не обяснява какво прави методът.

Решение

Преименувайте метода.

Ползи

Кодът е четим и обяснява какво прави. Внимавайте с имената си и ги сменете, когато намерите по-добри. Всеки, който чете вашия код (включително и вие), ще бъде по-щастлив, ако го направите.

Работния процес

  1. Създайте нов метод с ново име. Копирайте кода на стария метод към него. Заменете целия код в стария метод с извикване на новия метод.
  2. Намерете всички препратки към стария метод и ги заменете с препратки към новия.
  3. Изтрийте стария метод.

Стъпка 2: Заменете вложените условни условия с предпазни клаузи

проблем

Група от вложени условни изрази затрудняват разбирането на логиката на кода.

Решение

Изолирайте всички условия в отделни клаузи, като използвате Gзащитни клаузи. Предпазната клауза е фрагмент от код в горната част на функция или метод, който се връща рано, когато е изпълнено някакво предварително условие.

Ползи

Функцията е по-малка и списъкът с условни изрази е плосък. Предпазните клаузи намаляват сложността и улесняват разбирането на логиката. Можем да пропуснем четенето на охраната и бързо да видим основната цел на метода.

Работния процес

  1. Изолирайте всички клаузи, които водят до извикване на изключение или незабавно връщане на стойност от метода.
  2. Поставете тези условия в началото на метода, преди основните проверки.

Стъпка 3: Заменете твърдо кодираната стойност

проблем

Кодът използва твърдо кодирана стойност, която има определено значение.

Решение

Заменете тази стойност с константа или конфигурационен параметър, който има разбираемо за човека име, обясняващо значението на стойността.

Ползи

Улеснете промяната на стойността на константа или стойността на конфигурация, отколкото да търсите тази стойност в цялата кодова база, без риск от случайна промяна на същата стойност, използвана другаде за различна цел.

Работния процес

  1. Декларирайте константа или създайте конфигурационен параметър и му присвоете стойността.
  2. Намерете всички споменавания на твърдо кодираната стойност.
  3. За всяка от стойностите, които намерите, заменете я с константата или стойността на config. Уверете се, че е правилната стойност за замяна.

Стъпка 4: Премахване на дублирани условни фрагменти

проблем

Идентичен код може да бъде намерен във всички клонове на условно условие.

Решение

Преместете кода извън условието.

Ползи

Дедупликация на код.

Работния процес

  1. Ако дублираният код е в началото на условните разклонения, преместете кода на място преди условното.
  2. Ако кодът се изпълнява в края на разклоненията, поставете го след условието.
  3. Ако дублиращият се код е произволно разположен в разклоненията, първо опитайте да преместите кода в началото или края на разклонението, в зависимост от това дали променя резултата от следващия код.
  4. Ако е подходящо и дублираният код е по-дълъг от един ред, опитайте да използвате извлечен метод.

Стъпка 5: Метод на извличане

проблем

Кодов фрагмент може да бъде групиран заедно.

Решение

Преместете този код в отделен нов метод и заменете стария код с извикване на метода.

Ползи

Методът е по-малък и лесен за тестване. Кодът е по-четлив, защото новият метод има име, което описва целта на метода. Може да се използва повторно другаде в програмата. Например, функцията може да се използва преди да актуализирате книгата.

Работния процес

  1. Създайте нов метод с четливо име, което обяснява какво прави методът.
  2. Копирайте съответния кодов фрагмент във вашия нов метод.
  3. Заменете фрагмента с извикване на новия метод.

Стъпка 6: Извличане на променлива

проблем

Един израз е труден за разбиране.

Решение

Извлечете всеки резултат от израз в отделни променливи.

Ползи

Направете сложен израз по-разбираем с променливи, които имат смислени имена.

Работния процес

  1. Декларирайте нова променлива със смислено име за всеки сложен израз. Присвоете израза на тази променлива.
  2. Заменете всеки израз с променливата.

Стъпка 7: Консолидиране на параметри с обект

проблем

Методът съдържа много параметри.

Решение

Създайте обект, който включва параметрите.

Ползи

По-четливо. Методът има обект с разбираемо име вместо много параметри. Лесно е да добавите нов критерий, без да променяте сигнатурата на метода. Възможно е да използвате валидатор, за да се уверите, че обектът е валиден.

Работния процес

  1. Създайте нов клас, който ще представлява вашата група от параметри.
  2. Заменете параметрите със създадения обект.
  3. Във всички извиквания на метод, предайте обекта, създаден от стари параметри на метода.

Стъпка 8: Заменете масива с обект

проблем

Масивът съдържа определени елементи, означаващи различни неща.

Решение

Заменете масива с обект, който има поле за всеки елемент.

Ползи

Полето на клас се документира много по-лесно от елементите на масив. Наистина е сложно да се знае кои са всички ключове на масива, използвани за съхраняване на данните вместо клас, който има автоматично довършване благодарение на документацията. Освен това е по-лесно да тествате клас вместо масив. Всеки метод за достъп на класа може да има своя собствена логика.

Работния процес

  1. Създайте нов клас, който ще съдържа данните от масива.
  2. Създайте частно поле за всеки елемент от масива.
  3. Създайте метод за достъп за всяко поле от новия клас.
  4. Създайте нов екземпляр на класа на мястото, където е иницииран масивът от данни.
  5. Заменете всеки елемент от масива с методите за достъп.

Стъпка 9: Консолидиране на условен израз

проблем

Няколко условия водят до един и същи резултат или действие.

Решение

Консолидирайте всички условни изрази в един израз.

Ползи

Дедупликация на код. Множеството условни изрази вече са изолирани в нов метод с име, което обяснява целта на условното условие. Новият метод е лесен за подигравка за тестване на кода.

Работния процес

  1. Консолидирайте условните изрази в един израз, като използвате and и or.
  2. Създайте нов метод с четливо име, което обяснява какво прави методът.
  3. Копирайте израза във вашия нов метод.
  4. Заменете израза с извикване на новия метод.

Стъпка 10: Извличане на клас

проблем

Един клас прави всичко на едно място.

Решение

Извлечете всяка подходяща функционалност в отделен клас.

Ползи

Класът има една единствена отговорност, това е дефиницията на Принципа на единната отговорност. Кодът е по-лесен за тестване и поддръжка. Това прави всеки клас многократно използваем.

Работния процес

  1. Създайте клас за всяка подходяща функционалност.
  2. Преместете методите, които зависят от тази функционалност в новия клас.
  3. Предава обект в конструктора на класа, който зависи от функционалността.
  4. Заменете методите с помощта на зависимостта.