5 шагов к более чистому коду
Проблема
- Дублирование кода
- Ремонтопригодность
- Не повторяйся
Решение
- Найдите повторяющиеся шаблоны (не повторяющийся код).
- Создайте абстракцию.
- Параметризация вызовов абстракции.
- Используйте композицию и избегайте наследования.
- Модульное тестирование новой абстракции.
Образец кода
Неправильный
class WordProcessor(var text: String = "") { fun replaceText(patternToFind: String, textToReplace: String) { text = "<<< ${text.replace(patternToFind, textToReplace} >>>" } } class Obfuscator(var text: String = "") { fun obfuscate(patternToFind: String, textToReplace: String) { text = text.lowercase().replace(patternToFind, textToReplace) } }
Верно
class TextReplacer { fun replace( patternToFind: String, textToReplace: String, subject: String, replaceFunction: (String, String, String) -> String, postProcessClosure: (String) -> String ): String = replaceFunction(patternToFind, textToReplace, subject) .let(postProcessClosure) } class WordProcessor(private var text: String = "") { fun replaceText(patternToFind: String, textToReplace: String) { text = TextReplacer() .replace( patternToFind, textToReplace, text, replaceFunction = { pattern, replace, subject -> subject.replace(pattern, replace) }, postProcessClosure = { "<<< $it >>>" } ) } } class Obfuscator(private var text: String = "") { fun obfuscate(patternToFind: String, textToReplace: String) { text = TextReplacer() .replace( patternToFind, textToReplace, text, replaceFunction = { pattern, replace, subject -> subject.replace(pattern, replace, ignoreCase = true) }, postProcessClosure = { it.lowercase() } ) } }
Заключение
Повторный код — это всегда запах. Копировать и вставлять код — это всегда стыдно. Используя наши инструменты рефакторинга, мы должны принять задачу устранения дублирования и доверять нашим тестам как системе безопасности.
Надеюсь, вам понравилось это путешествие и вы узнали что-то новое. Если вы хотите быть в курсе моих последних мыслей и идей, подпишитесь на мою информационную рассылку. Вы также можете найти меня в LinkedIn или Twitter. Давайте оставаться на связи и продолжать разговор!
Спасибо, что дочитали до конца. Пожалуйста, подумайте о том, чтобы подписаться на автора и эту публикацию. Посетите Stackademic, чтобы узнать больше о том, как мы демократизируем бесплатное образование в области программирования во всем мире.
Кредиты
Оригинально опубликовано на https://yonatankarp.com.