M
Mobile VK Hub
@mobilehubvk749 подп.
498просмотров
66.5%от подписчиков
26 февраля 2026 г.
📷 ФотоScore: 548
Контракты функций — как помочь компилятору Kotlin умеет делать smart cast после проверки if (x != null). Но если вы вынесли проверку в отдельную функцию — все ломается: fun String?.isValid(): Boolean = this != null && this.isNotBlank() fun process(s: String?) { if (s.isValid()) { s.length // ошибка: s всё ещё String? } } Компилятор не знает, что isValid() == true гарантирует non-null. Контракты это исправляют: @OptIn(ExperimentalContracts::class) fun String?.isValid(): Boolean { contract { returns(true) implies (this@isValid != null) } return this != null && this.isNotBlank() } Теперь smart cast работает. Контракты полезны и для лямбд — можно указать, что лямбда вызывается ровно один раз (как в run, let), и тогда внутри неё можно инициализировать val. Стандартная библиотека использует контракты повсеместно. #mobilevk #kotlin
498
просмотров
882
символов
Нет
эмодзи
Да
медиа

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

Все посты канала →
Контракты функций — как помочь компилятору Kotlin умеет дела — @mobilehubvk | PostSniper