Выбор ответа Junior Коллекции и последовательности обновлено

fold и reduce

Вопрос

Что произойдёт при emptyList<Int>().reduce { a, b -> a + b }?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Бросится UnsupportedOperationException. reduce берёт первый элемент как начальное значение, а у пустой коллекции его нет, поэтому бросается UnsupportedOperationException("Empty collection can't be reduced."). fold(0) { ... } вернул бы 0, потому что начальное значение задано явно.

Варианты ответа

  1. Вернётся 0, нейтральный элемент сложения
  2. Вернётся null, как у firstOrNull
  3. Бросится UnsupportedOperationExceptionправильный ответ
  4. Ошибка компиляции: у reduce нет начального значения

Разбор

reduce берёт первый элемент как начальное значение, а у пустой коллекции его нет, поэтому бросается UnsupportedOperationException("Empty collection can't be reduced."). fold(0) { ... } вернул бы 0, потому что начальное значение задано явно. Вернуть null умеет reduceOrNull. С типами всё в порядке, код компилируется.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.