0Pricing
Android Academy · Урок

Конструкторы и init

Создавайте и инициализируйте объекты.

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

Что такое конструктор

Конструктор — это специальный код, который выполняется при создании объекта. Он задаёт начальные значения объекта.

В Kotlin основной конструктор записывается сразу после имени класса.

Первичный конструктор

Первичный конструктор записывается в скобках после имени класса. Значения передаются при создании объекта.

Здесь для создания Dog требуется указать имя.

class Dog(name: String) {
    val dogName = name
}

fun main() {
    val d = Dog("Rex")
    println(d.dogName)
}

Свойства в конструкторе

Если добавить val или var перед параметром конструктора, он автоматически станет свойством.

Это самый распространённый и лаконичный стиль Kotlin.

class Dog(val name: String, var age: Int)

fun main() {
    val d = Dog("Rex", 3)
    println(d.name + " is " + d.age)
}

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

Для параметров конструктора тоже можно задать значения по умолчанию. Тогда при вызове их можно не указывать.

Здесь для age используется значение 0, если оно не передано.

class Dog(val name: String, var age: Int = 0)

fun main() {
    val d = Dog("Max")
    println(d.age)
}

Блок init

Блок init выполняется как часть первичного конструктора. Используйте его для логики настройки, которую неудобно размещать в одной строке объявления свойства.

Из него можно читать параметры конструктора.

class Dog(val name: String) {
    init {
        println("Created dog: " + name)
    }
}

fun main() {
    Dog("Rex")
}

Проверка в init

Блок init часто используют для проверки входных данных. Здесь с помощью require выполняется проверка, которая не допускает отрицательный возраст.

Если проверка не пройдена, объект не создаётся.

class Person(val age: Int) {
    init {
        require(age >= 0) { "Age cannot be negative" }
    }
}

fun main() {
    val p = Person(25)
    println(p.age)
}

Порядок выполнения

Инициализаторы свойств и блоки init выполняются сверху вниз в том порядке, в котором они расположены в классе.

Это важно, когда одна строка зависит от значения, заданного выше.

class Demo {
    val a = 1
    init { println("a is " + a) }
    val b = a + 1
    init { println("b is " + b) }
}

fun main() {
    Demo()
}

Вычисляемые свойства

В теле класса можно вычислить свойство на основе значений конструктора.

Здесь area вычисляется на основе width и height.

class Rect(val width: Int, val height: Int) {
    val area = width * height
}

fun main() {
    println(Rect(3, 4).area)
}

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

В классе также могут быть вторичные конструкторы, объявленные с помощью ключевого слова constructor. Они должны делегировать вызов первичному конструктору через this(...).

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

class Dog(val name: String) {
    constructor() : this("Unknown")
}

fun main() {
    println(Dog().name)
}

Использование нового объекта

После выполнения конструктора и init объект готов к работе. Вы можете сразу читать его свойства и вызывать его методы.

Здесь конструктор настраивает баланс, а метод списывает с него средства.

class Account(var balance: Int) {
    fun spend(amount: Int) {
        balance = balance - amount
    }
}

fun main() {
    val acc = Account(100)
    acc.spend(30)
    println(acc.balance)
}

Конструкторы задают основу

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

  • Первичный конструктор: объявляет и получает значения.
  • init: выполняет настройку и проверку.

Это не позволяет объектам приложения оставаться созданными лишь частично.

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

Проверьте, насколько хорошо Вы поняли конструкторы и init.

Итоги

Вы изучили первичный конструктор, объявление свойств с помощью val/var в нём и задание значений по умолчанию.

Блок init выполняет настройку и проверку, а также запускается сверху вниз вместе с инициализаторами свойств. Далее Вы познакомитесь с классами данных, которые создают этот шаблонный код автоматически.

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

Урок «Конструкторы и init» бесплатный?

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

Чему я научусь в уроке «Конструкторы и init»?

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

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

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

Сколько времени занимает урок «Конструкторы и init»?

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

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

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

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

  1. Объявление функций
  2. Классы и свойства
  3. Конструкторы и init
  4. Классы данных
← Назад к Android Academy