Qual é a diferença entre const e val em Kotlin? Explicação detalhada para iniciantes
Olá a todos! Comecei a estudar Kotlin recentemente e me deparei com uma confusão. No código de outros desenvolvedores, vejo duas palavras-chave semelhantes: `const` e `val`. À primeira vista, elas fazem a mesma coisa — declaram uma variável imutável. Mas sinto que há alguma diferença entre elas, caso contrário, por que ambas existiriam?
Aqui está um exemplo que me confunde:
```kotlin
val pi = 3.14159
const val PI = 3.14159
```
Eu entendo que ambas as opções não me permitem alterar o valor após a inicialização. Mas por que então em um caso eu escrevo `const val` e no outro apenas `val`? O compilador reclama se eu tento usar `const` dentro de uma função. Por que isso?
Além disso, notei que `const` só pode ser usado com tipos primitivos e strings. Já `val` funciona com qualquer objeto. Mas para que serve `const` então, se `val` faz tudo igual?
Expliquem, por favor, de forma simples, como elas diferem e em quais situações usar cada uma. Estou especialmente interessado em como isso afeta a performance.