> Что такое contracts в Kotlin и когда их используют? (Kotlin, Android)

Уровень: junior · Роль: mobile · Категория: Технические вопросы

Компании: Альфа-банк

Стек: Kotlin, Android

> Пример ответа

Contracts в Kotlin - это механизм, позволяющий разработчику явно описывать поведение функций для компилятора, улучшая вывод типов и статический анализ кода. Они объявляются с помощью аннотации @ContractsDsl и функций contract { ... } внутри тела функции. Основное назначение - сообщить компилятору о гарантиях, которые неочевидны из сигнатуры: например, что функция вернет null только при определенном условии, или что после её вызова переменная будет инициализирована.

Пример использования - умные приведения (smart casts) в when или if:

fun String?.isNotNull(): Boolean {
    contract {
        returns(true) implies (this@isNotNull != null)
    }
    return this != null
}

fun example(s: String?) {
    if (s.isNotNull()) {
        // Компилятор знает, что s не null, благодаря контракту
        println(s.length)
    }
}

На Android contracts применяются для улучшения работы с nullable типами, например, в кастомных проверках или в функциях-расширениях для View (проверка видимости). Они также полезны в DSL-построителях, где нужно гарантировать инициализацию свойств. Однако стоит помнить, что contracts - это экспериментальная фича (начиная с Kotlin 1.3), и их злоупотребление может усложнить код. Используйте их только когда стандартные средства (например, requireNotNull) недостаточны.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью