Avatar ·

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.