Ответ
Пометка inline может быть разумной или неразумной в зависимости от контекста.
Разумно:
- Для лямбда-функций, передаваемых в высокоуровневые функции (например,
map,filter), чтобы избежать накладных расходов на создание анонимных классов. - Для небольших функций, часто вызываемых в цикле, чтобы избежать накладных расходов на вызов.
inline fun <T> List<T>.customFilter(predicate: (T) -> Boolean): List<T> {
return filter(predicate) // Лямбда будет встроена
}
Неразумно:
- Для больших функций, так как увеличивается размер бинарного кода.
- Для рекурсивных функций (Kotlin не поддерживает рекурсивный
inline). - Для функций с
crossinlineилиnoinlineпараметрами, если нет явной необходимости.
Выбор зависит от производительности и читаемости кода.