0Pricing
Kotlin Academy · Урок

Основы классов данных: автоматически создаваемые методы

Разберитесь, что создаёт data class: equals, hashCode, toString и copy.

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

Что такое класс данных

Класс данных — это класс, основное назначение которого заключается в хранении значений. Компилятор Kotlin автоматически создаёт для Вас функции equals, hashCode, toString, copy и componentN.

Объявление класса данных

Добавьте data перед обычным классом. Все параметры основного конструктора должны быть val или var.

data class User(val name: String, val age: Int)
fun main() {
    val u = User("Ada", 35)
    println(u)
}

Автоматически создаваемый toString

Компилятор создаёт toString, перечисляющий каждое свойство по имени.

data class Point(val x: Int, val y: Int)
fun main() {
    println(Point(3, 5)) // Point(x=3, y=5)
}

Автоматически создаваемый equals

equals сравнивает значения всех свойств: два экземпляра с одинаковыми полями равны независимо от идентичности ссылок.

data class Coord(val lat: Double, val lng: Double)
fun main() {
    val a = Coord(41.0, 29.0)
    val b = Coord(41.0, 29.0)
    println(a == b)      // true (structural)
    println(a === b)     // false (reference)
}

Автоматически создаваемый hashCode

hashCode согласован с equals: равные объекты имеют одинаковые хеш-коды, поэтому классы данных корректно работают в множествах и в качестве ключей отображений.

data class Key(val id: Int, val tag: String)
fun main() {
    val map = mapOf(Key(1, "a") to "one")
    println(map[Key(1, "a")]) // one
}

Автоматически создаваемый copy

copy() создаёт новый экземпляр с теми же значениями полей и позволяет переопределять отдельные поля с помощью именованных аргументов.

data class Config(val host: String, val port: Int, val tls: Boolean)
fun main() {
    val dev = Config("localhost", 8080, false)
    val prod = dev.copy(host = "prod.example.com", tls = true)
    println(prod) // Config(host=prod.example.com, port=8080, tls=true)
}

Автоматически создаваемый componentN

Для каждого свойства создаётся функция componentN(), например component1 и component2, что позволяет выполнять деструктуризацию.

data class Pair2(val first: String, val second: Int)
fun main() {
    val p = Pair2("Ada", 35)
    val (name, age) = p
    println("$name is $age")
}

Чего не делают классы данных

Классы данных не создают toString для унаследованных полей, по умолчанию являются final и не могут быть abstract, open, sealed или inner.

data class Sample(val n: Int)
// open data class Bad(...) // ERROR
// sealed data class Bad(...) // ERROR
fun main() { println(Sample(1)) }

Свойства за пределами основного конструктора

Свойства, объявленные в теле класса, НЕ участвуют в equals, hashCode, toString и copy.

data class Person(val name: String) {
    var nickname: String = ""
}
fun main() {
    val a = Person("Ada").apply { nickname = "Augusta" }
    val b = Person("Ada").apply { nickname = "Different" }
    println(a == b)   // true — only name matters
    println(a)         // Person(name=Ada)
}

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

Сочетайте data class с параметрами по умолчанию для гибкого создания объектов.

data class Request(
    val url: String,
    val method: String = "GET",
    val headers: Map<String, String> = emptyMap()
)
fun main() {
    println(Request("https://api.example.com"))
}

Практика: класс DTO

Классы данных идеально подходят для DTO, ответов API и объектов-значений.

data class ApiResponse(
    val status: Int,
    val body: String,
    val timestamp: Long
)
fun main() {
    val ok = ApiResponse(200, "{}", System.currentTimeMillis())
    println(ok)
}

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

Какой метод компилятор Kotlin НЕ создаёт автоматически для класса данных?

Повторение

data class автоматически создаёт equals, hashCode, toString, copy и componentN на основе свойств основного конструктора. Свойства за пределами конструктора исключаются. Используйте классы данных для DTO, объектов-значений и любых контейнеров связанных значений.

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

Урок «Основы классов данных: автоматически создаваемые методы» бесплатный?

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

Чему я научусь в уроке «Основы классов данных: автоматически создаваемые методы»?

Разберитесь, что создаёт data class: equals, hashCode, toString и copy. Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

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

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

Сколько времени занимает урок «Основы классов данных: автоматически создаваемые методы»?

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

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

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

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

  1. Основы классов данных: автоматически создаваемые методы
  2. Копирование с помощью copy() и частичные переопределения
  3. Деструктурирующие объявления с componentN
  4. Классы данных в коллекциях и в качестве ключей карт
← Назад к Kotlin Academy