0Pricing
Kotlin Academy · Урок

Первичный конструктор и параметры-свойства

Объявляйте классы с первичными конструкторами и встроенными объявлениями свойств.

«Первичный конструктор и параметры-свойства» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.

Основной конструктор

Класс Kotlin объявляет свой основной конструктор сразу после имени класса, в круглых скобках. Тела метода нет — только список параметров.

Простейший класс

Основной конструктор без модификаторов не виден после имени класса.

class Greeter(val name: String) {
    fun greet() = "Hello, $name!"
}
fun main() {
    println(Greeter("Ada").greet())
}

Параметры-свойства

Добавьте к параметру конструктора префикс val или var, чтобы одним шагом сделать его свойством класса.

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}")
}

Параметры без val/var

Параметры конструктора без val/var существуют только в области конструктора: их можно использовать в блоках init или при инициализации свойств, но нельзя получить к ним доступ позже.

class Logger(prefix: String) {
    val msg = "$prefix: ready"
}
fun main() {
    val l = Logger("[INFO]")
    println(l.msg)
    // l.prefix // ERROR — not a property
}

Значения параметров по умолчанию

Задавайте значения по умолчанию для параметров конструктора, чтобы избежать шаблонного кода перегруженных вариантов.

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)
}

Именованные аргументы

Откажитесь от позиционного порядка и указывайте имена параметров при вызове — особенно удобно при наличии значений по умолчанию.

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}")
}

Видимость конструктора

Используйте private constructor, чтобы запретить создание экземпляров извне — это часто применяют вместе с фабричными методами.

class Singleton private constructor() {
    companion object {
        val instance = Singleton()
    }
}
fun main() {
    val s = Singleton.instance
    println(s)
}

Вторичные конструкторы

Добавляйте дополнительные конструкторы с помощью ключевого слова constructor. Они должны делегировать вызов основному конструктору через 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
}

Конструктор с указанием видимости

Для каждого конструктора можно задать свою видимость — это удобно в библиотеках.

class Lib internal constructor(val key: String) {
    companion object {
        fun create(key: String) = Lib(key)
    }
}
fun main() {
    println(Lib.create("abc").key)
}

Повторение блока инициализации

Код, который должен выполняться во время создания объекта, помещается в блок init { }. Несколько блоков init выполняются в порядке следования в исходном коде.

class Validator(val value: String) {
    init { require(value.isNotBlank()) { "value cannot be blank" } }
}
fun main() {
    println(Validator("ok").value)
    // Validator("") // throws IllegalArgumentException
}

Объединение свойств и логики

Объявления свойств, вторичные конструкторы и блоки init объединяются в гибкую цепочку инициализации.

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
}

Быстрая проверка

Что делает ключевое слово val, если оно используется в параметре основного конструктора?

Повторение

Основной конструктор находится в заголовке класса. Используйте val/var для параметров-свойств; параметры без них доступны только конструктору. Добавляйте значения по умолчанию, чтобы уменьшить количество перегруженных вариантов, а логику настройки размещайте в блоках init. Вторичные конструкторы делегируют вызов через this(...).

Часто задаваемые вопросы

Урок «Первичный конструктор и параметры-свойства» бесплатный?

Да — полный текст урока «Первичный конструктор и параметры-свойства» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.

Чему я научусь в уроке «Первичный конструктор и параметры-свойства»?

Объявляйте классы с первичными конструкторами и встроенными объявлениями свойств. Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Kotlin Academy?

Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Первичный конструктор и параметры-свойства»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Kotlin Academy?

Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Первичный конструктор и параметры-свойства
  2. Блоки init и порядок инициализации
  3. Пользовательские геттеры и сеттеры с field
  4. lateinit и отложенная инициализация
← Назад к Kotlin Academy