В своих докладах о чистом коде я часто разбираю рефакторинг длинных цепочек вызовов. Основная мысль проста: такая конструкция не только замедляет чтение и понимание кода, но и бьёт по производительности.
Однажды меня спросили: "А что, если эти методы изменяют внутреннее состояние объекта?" Действительно, если
audinfo() (ну или подобный метод в других примерах) возвращает объект, чьи методы мутируют состояние, то вынесение его в переменную превратит пять независимых вызовов в пять обращений к одному экземпляру. А значит, поведение программы может измениться.Но ответ, на мой взгляд, кроется в самой постановке вопроса. Хороший код не должен порождать сомнения в духе "а что, если...". Если безопасный синтаксический рефакторинг меняет логику работы — это не недостаток рефакторинга, а яркий сигнал о проблемном дизайне.
Если копнуть глубже, то использование методов с побочными эффектами в контексте извлечения параметров выглядит странным в принципе. Если в подобной ситуации на практике методы действительно меняют состояние, "лечить" нужно не цепочку вызовов, а архитектуру класса.
🎤 feelin #cleanCode
