Inferência de tipos
Deixe o compilador descobrir os tipos.
Inferência de tipos é uma aula grátis de Scala for Backend Engineering & Functional Programming no CoddyKit. Esta é a aula 3 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.
O que é inferência de tipos?
Scala tem tipagem estática, mas você raramente precisa escrever os tipos. O compilador os infere a partir do valor do lado direito.
Isso oferece a segurança dos tipos com a concisão de uma linguagem dinâmica.
val n = 42 // inferred Int
val label = "hi" // inferred StringInferência a partir de literais
Quando você escreve val x = 5, o compilador identifica o literal Int e atribui a x o tipo Int.
Um literal decimal se torna um Double, e um texto entre aspas se torna uma String.
object Main extends App {
val count = 5
val ratio = 1.5
println(count + ratio)
}Inferência para retornos de funções
O compilador também pode inferir o tipo de retorno de um método a partir do corpo dele.
Aqui, square retorna um Int porque o corpo multiplica dois valores Int. Você não precisou declará-lo.
object Main extends App {
def square(x: Int) = x * x
println(square(6))
}Os parâmetros ainda precisam de tipos
A inferência tem limites. Os parâmetros dos métodos precisam ser anotados, porque o compilador não tem informações a partir das quais possa inferi-los.
O trecho abaixo não seria compilado sem o : Int em x.
def increment(x: Int) = x + 1 // type on x is requiredTipo comum inferido
Quando os valores podem ter vários tipos, o Scala infere o tipo comum mais específico.
Misturar um Int e um Double em uma operação aritmética amplia o resultado para Double.
object Main extends App {
val mixed = 3 + 2.0 // Double
println(mixed)
}Inferência em coleções
As coleções inferem o tipo de seus elementos a partir dos valores que você insere nelas.
Uma lista de inteiros se torna automaticamente uma List[Int], para que você mantenha toda a segurança de tipos sem anotações.
object Main extends App {
val nums = List(1, 2, 3) // List[Int]
println(nums.sum)
}Quando a inferência surpreende você
Às vezes, a inferência escolhe um tipo mais amplo do que você deseja. Uma lista de números mistos pode inferir List[Double] ou até List[AnyVal].
Se o tipo inferido não for adequado às suas necessidades, adicione uma anotação explícita.
val a = List(1, 2.0) // List[Double]
val b = List(1, "two") // List[Any]Substitua com anotações
Você sempre pode ser explícito. Anotar um tipo documenta sua intenção e substitui uma inferência estreita demais.
Aqui, o literal 7 é ampliado deliberadamente para um Long.
val seconds: Long = 7
val data: List[Int] = List(1, 2, 3)APIs públicas: seja explícito
Uma regra de estilo comum: deixe a inferência cuidar dos vals locais, mas escreva tipos de retorno explícitos em métodos públicos.
Isso mantém estável o contrato da sua biblioteca, mesmo que a implementação mude.
def total(items: List[Int]): Int = items.sumA inferência mantém a segurança de tipos
A inferência não enfraquece o sistema de tipos. O compilador ainda rejeita operações inválidas.
Abaixo, name é inferido como String, portanto multiplicá-lo por um número falha na compilação, exatamente como deveria.
val name = "Lia"
val bad = name * 3 // error: value * is not a member of String in this senseUm val inferido continua imutável
A inferência apenas preenche o tipo. Ela não altera se uma associação é mutável.
Um val n = 10 continua imutável e fixado como um Int; o compilador apenas poupou você de escrever : Int.
object Main extends App {
val n = 10 // inferred Int, still a val
println(n * n)
}Verificação rápida
Em que situação o Scala ainda exige que você escreva um tipo?
Recapitulação
A inferência de tipos permite que o Scala permaneça conciso sem perder a segurança estática.
vals locais e tipos de retorno geralmente são inferidos.- Os parâmetros dos métodos precisam ser anotados.
- A inferência escolhe o tipo comum mais específico.
- Faça anotações explícitas em APIs públicas ou para substituir uma inferência surpreendente.
Perguntas Frequentes
A aula “Inferência de tipos” é grátis?
Sim — o texto completo de “Inferência de tipos” é 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 “Inferência de tipos”?
Deixe o compilador descobrir os tipos. 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 3 de 4.
Quanto tempo leva a aula “Inferência de tipos”?
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
- val versus var
- Tipos básicos e literais
- Inferência de tipos
- Expressões em vez de instruções