K
Kotlin
@kotlin_lib2.1K подп.
792просмотров
37.4%от подписчиков
30 января 2026 г.
Score: 871
💣 Почему я запрещаю Destructuring Declarations на код-ревью Котлиновский синтаксис val (name, age) = user выглядит сексуально. Python-style, кратко, молодежно. Но для бизнес-логики это мина замедленного действия. Представим классический DTO для транзакции: data class Transaction( val amount: Double, val fee: Double ) Где-то в недрах UseCase вы пишете: val (total, commission) = getTransaction() // Логика: total - commission Всё работает. Пока через полгода другой разработчик (или вы же) не решит, что поля в дата-классе должны идти в алфавитном порядке, или просто добавит новое поле в начало конструктора. Изменение: data class Transaction( val fee: Double, // 👈 Поменяли местами val amount: Double ) Результат: Код компилируется. Тесты (если они мокали объект, а не порядок полей) могут пройти. Но в продакшене total теперь равен fee, а commission равна amount. Поздравляю, вы только что начислили пользователю комиссию вместо зарплаты. Почему это происходит? Деструктуризация в Kotlin не смотрит на имена переменных. Она тупо вызывает component1(), component2(). Если типы полей совпадают (как Double и Double выше) - компилятор молчит. ✅ Правило Сеньора: Используйте деструктуризацию только для: 1. Pair и Triple (где порядок очевиден из названий first/second). 2. Map.Entry в циклах. 3. Локальных переменных, которые живут 2 строчки кода. Для всего остального (особенно Domain Models и DTO) - только явный доступ к свойствам: val total = tx.amount У кого в проекте уже настроен Detekt на запрет деструктуризации? 👇 ✍️ @kotlin_lib
792
просмотров
1582
символов
Нет
эмодзи
Нет
медиа

Другие посты @kotlin_lib

Все посты канала →
💣 Почему я запрещаю Destructuring Declarations на код-ревью — @kotlin_lib | PostSniper