Avatar ·

Qual é a diferença entre var e val em Kotlin? Quando usar cada um?

Olá a todos! Comecei a estudar Kotlin depois de Java e fiquei confuso sobre a declaração de variáveis. Em Kotlin, existem duas palavras-chave: var e val. Entendo que ambas são usadas para criar variáveis, mas não consigo entender quando usar uma ou outra.

Em Java, estou acostumado que as variáveis são sempre mutáveis, a menos que seja especificado final. Aqui é o oposto — parece que val é usado com mais frequência, mas não entendo por quê.

Aqui está um exemplo do meu código que me confunde:

fun main() {
    var name = "Anna"
    name = "Maria"  // funciona
    
    val city = "Moscou"
    // city = "São Petersburgo"  // erro de compilação!
    
    var count = 0
    count = count + 1  // funciona
    
    val maxCount = 100
    // maxCount = 200  // erro!
}

Li que val é uma referência imutável (como final em Java), e var é mutável. Mas não está totalmente claro para mim