Переход от явной к декларативной итерации
TL;DR:Избегайте итераций на основе индекса. Используйте функции сбора данных более высокого порядка.
Проблема
- Нарушение инкапсуляции
- Отсутствие декларативности
Решение
- Выбирайте
forEach()
или итераторы высокого порядка. - Сокрытие деталей реализации открывает такие возможности, как кеширование, прокси, отложенная загрузка и многое другое.
Образец кода
Неправильный
for(i in 0 until colors.count()) { print(colors[i]) } // For Kotlin 1.9 and above, the 'until' can (and should) be // substituted with '..<' to denote a range from 0 to // colors.count(), excluding the end.
Верно
for(color in colors) { println(color) } // Utilizing closures and arrow functions colors.forEach { println(it) }
Исключения
Если предметная область требует сопоставления элементов с натуральными числами, такими как индексы, тогда может быть достаточно начального метода.
Всегда стремитесь проводить параллели с реальными сценариями.
Заключение
Многие разработчики игнорируют этот запах кода, считая его незначительной деталью.
Тем не менее, именно накопление таких декларативных нюансов действительно повышает качество кода.
Будьте в курсе моих последних мыслей и идей, подписавшись на мою информационную рассылку. Свяжитесь со мной в LinkedIn или Twitter. Давайте оставаться на связи и продолжать разговор!
Спасибо, что дочитали до конца. Пожалуйста, подумайте о том, чтобы подписаться на автора и эту публикацию. Посетите Stackademic, чтобы узнать больше о том, как мы демократизируем бесплатное образование в области программирования во всем мире
Кредиты
- Код Smell 53 — Явная итерация Максимилиано Контьери
Оригинально опубликовано на https://yonatankarp.com.