> Что делают функции all и any в Kotlin и как их использовать для проверки условий (Kotlin, Android)
Уровень: senior · Роль: mobile · Категория: Технические вопросы
Компании: Ozon
Стек: Kotlin, Android
> Пример ответа
Короткий ответ
all и any - это функции стандартной библиотеки Kotlin для проверки коллекций на соответствие предикату. all возвращает true, если все элементы удовлетворяют условию, any - если хотя бы один. Обе функции работают лениво: прекращают обход коллекции сразу после получения результата. Используются для лаконичной валидации данных, например, проверки ввода или состояния UI.
Подробное объяснение
Сигнатуры:
fun <T> Iterable<T>.all(predicate: (T) -> Boolean): Boolean fun <T> Iterable<T>.any(predicate: (T) -> Boolean): Boolean
Ключевые особенности:
allвозвращаетtrueдля пустой коллекции (vacuous truth),any-false.- Обе функции - inline, поэтому не создают лямбда-объектов в рантайме.
- Прекращают выполнение досрочно:
all- при первомfalse,any- при первомtrue.
Важно не путать с none (возвращает true, если ни один элемент не подходит) и count с предикатом.
На практике
В Android-разработке all и any часто применяются для:
- валидации форм (проверка, что все поля заполнены);
- проверки прав доступа перед выполнением операции;
- фильтрации состояний UI (например, все ли загрузки завершены);
- проверки условий перед навигацией или отправкой запроса.
Для пустых коллекций поведение может быть неочевидным - это стоит учитывать при написании бизнес-логики.
Пример кода
data class User(val name: String, val age: Int, val isActive: Boolean) fun validateUsers(users: List<User>): Boolean { val allAdults = users.all { it.age >= 18 } val anyActive = users.any { it.isActive } return allAdults && anyActive } // Проверка формы fun isFormValid(fields: List<String?>): Boolean = fields.all { !it.isNullOrBlank() } // Проверка прав fun canProceed(permissions: Set<String>): Boolean = permissions.any { it in setOf("WRITE", "ADMIN") } // Ленивость: обход прекратится на втором элементе val numbers = listOf(1, 2, 3, 4, 5) val hasEven = numbers.any { it % 2 == 0 } // true, проверены 1 и 2
Как отвечать на собеседовании
Начни с определения и сигнатур. Затем объясни поведение для пустых коллекций и ленивость. Приведи реальный пример из Android-разработки. Если спросят про производительность - упомяни inline и ранний выход. Для senior-уровня добавь сравнение с none и count, а также edge cases: nullable-элементы, большие коллекции, цепочки вызовов.
Что проверяет интервьюер
- Понимание стандартной библиотеки Kotlin, а не заучивание.
- Умение объяснить поведение на граничных случаях (пустая коллекция).
- Осознание ленивости и её влияния на производительность.
- Способность применить функции к реальным задачам Android.
- Внимание к деталям: различие
allиany, их связь сnone.
Типичные ошибки
- Утверждение, что
allдля пустой коллекции возвращаетfalse. - Путаница
anyсcontains(хотяany { it == x }эквивалентноcontains(x)). - Игнорирование ленивости - ожидание полного обхода.
- Использование
allтам, где нуженany, и наоборот. - Забывание про nullable-элементы:
all { it != null }работает, ноany { it == null }- тоже валидно, просто менее идиоматично.
> Похожие задачи по mobile
Как проверить тип параметра в обобщённом методе Kotlin
Что такое Coroutine Builders в Kotlin
Есть ли аннотации для улучшения интеропа Kotlin и Java, например JVMStatic
Почему нельзя создать экземпляр класса Nothing в Kotlin
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью