Avatar ·

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.