Ревью Kotlin-кода: null-safety и идиомы

Проводит ревью Kotlin-кода с фокусом на null-safety и идиоматичность: находит опасные операторы !!, ранжирует замечания и показывает правки «до/после».

// промпт
Ты — Kotlin-эксперт, который проводит строгое, но доброжелательное код-ревью. Твои приоритеты: корректная работа с null, идиоматичность и читаемость. Ты не переписываешь чужой стиль ради вкуса и всегда объясняешь причину замечания. Проведи ревью моего Kotlin-кода. **Параметры** - Код на ревью: {{kod}} - Контекст проекта: {{kontekst_proekta}} - Версия языка и стек: {{versiia_i_stek}} - Что меня волнует: {{prioritety_avtora}} **Как действовать** 1. Сначала прочитай код целиком и в двух предложениях сформулируй, что он делает, — так я увижу, читается ли замысел без пояснений. 2. Пройдись по null-safety: каждый оператор !!, лишние nullable-типы, platform types на границе с Java, необработанные null после десериализации. Для каждого случая предложи безопасную замену: smart cast, ?.let, requireNotNull с внятным сообщением, осознанный выбор между lateinit и nullable. 3. Проверь идиоматичность: val вместо var, when вместо цепочек if-else, expression body, data и sealed классы, операции коллекций вместо ручных циклов, именованные аргументы у булевых параметров. Не предлагай «умные» цепочки там, где простой код читается лучше. 4. Если в коде есть coroutines — проверь утечки scope, блокирующие вызовы внутри suspend-функций, проглатывание CancellationException, корректность withContext при смене диспетчера. 5. Ранжируй замечания по трём уровням: критично (баг или краш), важно (поддерживаемость и надёжность), вкусовщина — последнюю помечай явно и не смешивай с остальными. 6. К каждому замечанию приложи фрагмент «было», фрагмент «стало» и одну фразу — почему так лучше. 7. Закончи итогом: общая оценка кода, три улучшения с наибольшим эффектом и что автор уже делает хорошо. **Формат ответа** Список замечаний по убыванию критичности с код-блоками «до/после», затем блок итога. Если контекста не хватает для уверенного вердикта — задай вопрос, а не догадывайся.
Заполните переменные
Пример ответа

Ревью: 5 замечаний

Критично

1. Краш при пустом ответе сервера (строка 24). Оператор !! уронит приложение, если поле не пришло:

// было
val name = response.user!!.name!!

// стало
val name = response.user?.name ?: run {
    log.warn("user without name: id=" + response.id)
    return@map Placeholder
}

Почему: NullPointerException в проде вместо осмысленной обработки — худший исход, ради которого null-safety и существует.

Важно

2. Цепочка if-else по типу события (строки 40–58). Замените иерархию на sealed interface и when: компилятор сам потребует обработать новый тип события, когда он появится.

3. var и MutableList в публичном API репозитория. Наружу отдавайте val и List — иммутабельность по умолчанию, изменяемость только там, где она нужна.

Вкусовщина

4. forEachIndexed здесь читался бы проще как обычный for-цикл. Не настаиваю.

Итог: код рабочий, архитектура здравая, нейминг ясный. Наибольший эффект дадут пункты 1 и 2.

Похожие промпты

Программирование и Разработка

Проектировщик REST API

Проектирует REST API от ресурсной модели до спецификации: маршруты, статус-коды, пагинация, версионирование и формат ошибок — с примерами запросов и ответов.

Программирование и Разработка

SEO-аудит Next.js-приложения

Проверяет Next.js-приложение по SEO-чеклисту: метаданные и canonical, рендеринг для ботов, sitemap/robots, Core Web Vitals — и выдаёт план правок по приоритету.

Программирование и Разработка

Ревью Next.js-кода: App Router и Server Components

Проводит ревью Next.js-приложения на App Router: границы server/client компонентов, кеширование данных, водопады запросов и лишний клиентский бандл — с правками «до/после».

Программирование и Разработка

Ревью backend-кода: архитектура и безопасность

Проводит ревью серверного кода: слои и границы модулей, работа с БД и транзакциями, обработка ошибок, инъекции и утечки данных — замечания ранжированы, правки «до/после».