0Pricing
Scala for Backend Engineering & Functional Programming · Aula

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 = 10

Definindo 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 val

Definindo 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 mismatch

Prefira 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 val primeiro.
  • Use var somente 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 val adia 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.

Todas as aulas deste curso

  1. val versus var
  2. Tipos básicos e literais
  3. Inferência de tipos
  4. Expressões em vez de instruções
← Voltar para Scala for Backend Engineering & Functional Programming