Quando usar run, let, apply, also e with em Kotlin? Exemplos e explicação
Olá a todos! Comecei a estudar Kotlin depois de Java e fiquei muito confuso com as funções de escopo (scope functions): run, let, apply, also e with. Li a documentação, mas ainda não entendo quando usar cada uma.
Por exemplo, vejo frequentemente código assim:
```kotlin
val numbers = mutableListOf("one", "two", "three")
numbers.let { println(it) }
numbers.apply { add("four") }
numbers.run { println("Size: $size") }
```
Mas por que não posso simplesmente escrever `println(numbers)` ou `numbers.add("four")`? Qual é a diferença entre `let` e `apply`? E para que serve `also`?
Também tentei inicializar um objeto com configuração:
```kotlin
val person = Person().apply {
name = "John"
age = 30
}
```
Isso funciona, mas o mesmo pode ser feito com `with`:
```kotlin
val person = with(Person()) {
name = "John"
age = 30
this
}
```
Qual é a diferença? E quando usar `run` em vez de `apply`?
Agradeço por regras claras e exemplos para cada função.