Quando usar funções inline em Kotlin e como elas afetam o desempenho?
Olá a todos! Recentemente comecei a estudar Kotlin e me deparei com algo chamado funções inline. Na documentação diz que elas ajudam a evitar a sobrecarga de criação de objetos lambda, mas não entendo muito bem quando realmente devo usá-las.
Por exemplo, tenho uma função de ordem superior simples:
```kotlin
fun measureTime(action: () -> Unit) {
val start = System.currentTimeMillis()
action()
val end = System.currentTimeMillis()
println("Time: ${end - start} ms")
}
```
Eu a chamo assim:
```kotlin
measureTime {
Thread.sleep(100)
println("Hello")
}
```
Tudo funciona, mas li que sem `inline` um novo objeto é criado para o lambda toda vez. Isso é realmente um problema? Quando se torna crítico?
Também vi exemplos com `reified` (tipos reificados) — supostamente só podem ser usados com inline. Isso é verdade? E como isso se relaciona com o desempenho?
Vocês podem explicar de forma simples: em quais casos devo escrever `inline` e quando não?