val versus var
Vinculações imutáveis e mutáveis.
val versus var é uma aula grátis de Scala for Backend Engineering & Functional Programming no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Scala for Backend Engineering & Functional Programming, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Scala for Backend Engineering & Functional Programming inclui 4 aulas no total.
Duas maneiras de nomear valores
Em Scala, você associa um nome a um valor usando val ou var.
val cria uma associação imutável: depois de atribuída, ela nunca pode apontar para outro valor. var cria uma associação mutável que você pode reatribuir posteriormente.
Escolher entre as duas é um dos primeiros hábitos que um profissional de backend Scala desenvolve.
val name = "Ada"
var score = 10Definindo um val
Um val é somente para leitura. Você o atribui uma vez, e o compilador garante que ele permaneça igual.
Isso facilita a compreensão do seu código: um val nunca o surpreende com um valor alterado em outro lugar.
object Main extends App {
val pi = 3.14
println(pi)
}A reatribuição de um val falha
Tentar reatribuir um val é um erro de compilação, não uma falha em tempo de execução. O compilador impede isso antes mesmo de o programa ser executado.
O trecho abaixo falharia com reassignment to val.
val country = "Turkey"
country = "Spain" // error: reassignment to valDefinindo um var
Um var pode ser reatribuído quantas vezes você quiser, desde que o novo valor tenha um tipo compatível.
Use var quando um valor realmente precisar mudar ao longo do tempo, como um contador em um laço.
object Main extends App {
var count = 0
count = count + 1
count = count + 1
println(count)
}var mantém seu tipo
Embora um var possa ser reatribuído, seu tipo é fixado no momento da definição.
Se level começar como um Int, você não poderá armazenar posteriormente uma String nele. O compilador rejeitará a incompatibilidade.
var level = 1
level = 5 // ok, still an Int
level = "high" // error: type mismatchPrefira val por padrão
O Scala idiomático favorece val em quase todos os lugares. A imutabilidade evita categorias inteiras de erros e torna o código concorrente mais seguro.
- Prefira
valprimeiro. - Use
varsomente quando você realmente precisar de mutabilidade.
Reescrevendo var como val
Muitos laços que parecem precisar de um var podem ser expressos com um val e uma expressão.
Aqui, uma soma é calculada com um intervalo e sum, sem necessidade de mutação.
object Main extends App {
val total = (1 to 5).sum
println(total)
}Escopo de uma associação
Tanto val quanto var existem dentro do bloco { ... } onde são definidos.
Uma associação declarada dentro de um bloco não fica visível fora dele. Isso mantém os nomes organizados e evita reutilizações acidentais.
object Main extends App {
val outer = 1
{
val inner = 2
println(outer + inner)
}
// inner is not visible here
}val preguiçoso
Um lazy val é calculado somente na primeira vez que é usado e depois fica armazenado em cache.
Isso é útil para valores cujo cálculo é caro e de que talvez você nem sempre precise. O corpo é executado no máximo uma vez.
object Main extends App {
lazy val greeting = { println("computing"); "Hi" }
println("before")
println(greeting)
println(greeting)
}val com tipo explícito
Você pode anotar o tipo de uma associação depois de dois-pontos. Isso documenta a intenção e pode ampliar o tipo deliberadamente.
Aqui, amount é declarado como Double, embora 10 pareça um Int.
val amount: Double = 10
val label: String = "price"val e var lado a lado
Os dois se comportam da mesma forma até que você tente reatribuir um valor.
val x: atribua uma vez, e fica fixo para sempre.var y: atribua e reatribua livremente.
O programa abaixo incrementa apenas o var.
object Main extends App {
val base = 100
var bonus = 0
bonus = bonus + 25
println(base + bonus)
}Verificação rápida
Teste sua compreensão de val e var.
Recapitulação
Você aprendeu as duas maneiras de associar nomes em Scala.
valé imutável e é a escolha padrão.varé mutável e deve ser reservado para valores que precisam mudar.- Reatribuir um
valé um erro de compilação. - Os tipos são fixos para ambos;
lazy valadia o cálculo.
Perguntas Frequentes
A aula “val versus var” é grátis?
Sim — o texto completo de “val versus var” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Scala for Backend Engineering & Functional Programming, atualize para CoddyKit PRO. O curso de Scala for Backend Engineering & Functional Programming inclui 4 aulas no total.
O que vou aprender em “val versus var”?
Vinculações imutáveis e mutáveis. Você pratica Scala for Backend Engineering & Functional Programming com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Scala for Backend Engineering & Functional Programming?
Nenhuma experiência prévia é necessária. Scala for Backend Engineering & Functional Programming no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “val versus var”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Scala for Backend Engineering & Functional Programming?
Sim. Cada aula de Scala for Backend Engineering & Functional Programming inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.