На этом шаге мы рассмотрим различные способы доступа по индексу к элементу списка.
Доступ к элементу по индексу требует осторожности, потому что попытка получить элемент с несуществующим индексом - в нашем случае 4, так как список содержит только три элемента, - возбудит исключение ArrayIndexOutOfBounds Exception.
Попробуйте сделать это в Kotlin REPL. (Можно скопировать первую строку кода из Tavern.kt.)
В результате вы увидите сообщение: java.lang.ArraylndexOutOfBoundsException: 4.
Рис.1. Доступ к несуществующему индексу (REPL)
Так как доступ к элементу по индексу может привести к появлению исключения, Kotlin обеспечивает функции безопасного доступа по индексу, которые позволят подойти к этой проблеме с другой стороны. Если индекс не существует, вместо исключения они могут вернуть какой-нибудь другой результат.
Например, одна из функций безопасного доступа по индексу, getOrElse(), принимает два аргумента: первый - это запрашиваемый индекс (не в квадратных скобках), второй - это лямбда, которая генерирует значение по умолчанию вместо исключения, если запрашиваемого индекса не существует.
В этот раз результат - Unknown Patron (неизвестный посетитель).
Попробуйте это в REPL.
Рис.2. Тестирование getOrElse() (REPL)
Так как запрашиваемый индекс не был найден, для получения значения по умолчанию была вызвана анонимная функция.
Другая функция безопасного доступа, getOrNull(), возвращает null вместо исключения. Если вы используете getOrNull(), то должны решить, что делать со значением null. Один из вариантов - связать значение null и значение по умолчанию. Попробуйте использовать getOrNull() с оператором ?: в REPL.
Рис.3. Тестирование getOrNull() (REPL)
Снова результат будет Unknown Patron.
На следующем шаге мы рассмотрим проверку содержимого списка.