Выбор ответа Junior Коллекции и последовательности обновлено
fold и reduce
Вопрос
Что произойдёт при emptyList<Int>().reduce { a, b -> a + b }?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Бросится UnsupportedOperationException. reduce берёт первый элемент как начальное значение, а у пустой коллекции его нет, поэтому бросается UnsupportedOperationException("Empty collection can't be reduced."). fold(0) { ... } вернул бы 0, потому что начальное значение задано явно.
Варианты ответа
- Вернётся 0, нейтральный элемент сложения
- Вернётся
null, как уfirstOrNull - Бросится
UnsupportedOperationExceptionправильный ответ - Ошибка компиляции: у reduce нет начального значения
Разбор
reduce берёт первый элемент как начальное значение, а у пустой коллекции его нет, поэтому бросается UnsupportedOperationException("Empty collection can't be reduced."). fold(0) { ... } вернул бы 0, потому что начальное значение задано явно. Вернуть null умеет reduceOrNull. С типами всё в порядке, код компилируется.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.