Construtor primário e parâmetros de propriedades
Declare classes com construtores primários e declarações de propriedades na própria classe.
Construtor primário e parâmetros de propriedades é uma aula grátis de Kotlin Academy 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 Kotlin Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Kotlin Academy inclui 4 aulas no total.
O construtor primário
Uma classe Kotlin declara seu construtor primário logo depois do nome da classe, entre parênteses. Não há corpo de método — apenas uma lista de parâmetros.
A classe mais simples
O construtor primário sem modificadores fica implícito depois do nome da classe.
class Greeter(val name: String) {
fun greet() = "Hello, $name!"
}
fun main() {
println(Greeter("Ada").greet())
}Parâmetros de propriedades
Prefixe um parâmetro do construtor com val ou var para transformá-lo em uma propriedade da classe em uma única etapa.
class Person(val name: String, var age: Int)
fun main() {
val p = Person("Bob", 30)
println("${p.name} is ${p.age}")
p.age = 31
println("Now ${p.age}")
}Parâmetros sem val/var
Parâmetros do construtor sem val/var são locais ao construtor — podem ser usados em blocos init ou em inicializadores de propriedades, mas não podem ser acessados posteriormente.
class Logger(prefix: String) {
val msg = "$prefix: ready"
}
fun main() {
val l = Logger("[INFO]")
println(l.msg)
// l.prefix // ERROR — not a property
}Valores padrão de parâmetros
Forneça valores padrão para os parâmetros do construtor para evitar código repetitivo de sobrecargas.
class User(
val name: String,
val age: Int = 0,
val email: String = ""
)
fun main() {
println(User("Ana").age) // 0
println(User("Ben", 25).email) // ""
println(User("Cal", 30, "c@x.io").email)
}Argumentos nomeados
Ignore a ordem posicional e nomeie os parâmetros no ponto da chamada — especialmente útil com valores padrão.
class HttpClient(
val baseUrl: String,
val timeoutMs: Int = 5000,
val retries: Int = 3
)
fun main() {
val c = HttpClient(
baseUrl = "https://api.example.com",
retries = 5
)
println("retries=${c.retries} timeout=${c.timeoutMs}")
}Visibilidade do construtor
Use private constructor para impedir a criação de instâncias externas — algo comum quando combinado com métodos de fábrica.
class Singleton private constructor() {
companion object {
val instance = Singleton()
}
}
fun main() {
val s = Singleton.instance
println(s)
}Construtores secundários
Adicione construtores adicionais com a palavra-chave constructor. Eles devem delegar ao construtor primário com this(...).
class Point(val x: Int, val y: Int) {
constructor(value: Int) : this(value, value)
}
fun main() {
println("${Point(3).x}, ${Point(3).y}") // 3, 3
}Construtor com visibilidade
Você pode combinar diferentes níveis de visibilidade por construtor — algo útil para bibliotecas.
class Lib internal constructor(val key: String) {
companion object {
fun create(key: String) = Lib(key)
}
}
fun main() {
println(Lib.create("abc").key)
}Recapitulação dos blocos init
O código que deve ser executado durante a construção fica em um bloco init { }. Vários blocos init são executados na ordem em que aparecem no código-fonte.
class Validator(val value: String) {
init { require(value.isNotBlank()) { "value cannot be blank" } }
}
fun main() {
println(Validator("ok").value)
// Validator("") // throws IllegalArgumentException
}Combinando propriedades e lógica
Declarações de propriedades, construtores secundários e blocos init se combinam em um fluxo de inicialização flexível.
class Account(
val owner: String,
initialBalance: Double = 0.0
) {
var balance: Double = initialBalance
private set
init {
require(initialBalance >= 0) { "balance must be non-negative" }
}
fun deposit(amount: Double) { balance += amount }
}
fun main() {
val a = Account("Alice", 100.0)
a.deposit(50.0)
println("${a.owner}: ${a.balance}") // Alice: 150.0
}Verificação rápida
O que a palavra-chave val faz quando usada em um parâmetro do construtor primário?
Recapitulação
O construtor primário fica no cabeçalho da classe. Use val/var para parâmetros de propriedades; parâmetros simples ficam locais ao construtor. Adicione valores padrão para reduzir sobrecargas e execute a lógica de configuração em blocos init. Construtores secundários delegam por meio de this(...).
Perguntas Frequentes
A aula “Construtor primário e parâmetros de propriedades” é grátis?
Sim — o texto completo de “Construtor primário e parâmetros de propriedades” é 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 Kotlin Academy, atualize para CoddyKit PRO. O curso de Kotlin Academy inclui 4 aulas no total.
O que vou aprender em “Construtor primário e parâmetros de propriedades”?
Declare classes com construtores primários e declarações de propriedades na própria classe. Você pratica Kotlin Academy 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 Kotlin Academy?
Nenhuma experiência prévia é necessária. Kotlin Academy 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 “Construtor primário e parâmetros de propriedades”?
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 Kotlin Academy?
Sim. Cada aula de Kotlin Academy 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
- Construtor primário e parâmetros de propriedades
- Blocos init e ordem de inicialização
- Getters e setters personalizados com field
- lateinit e inicialização tardia