Основы классов данных: автоматически создаваемые методы
Разберитесь, что создаёт 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 — локальная установка не требуется.
Все уроки этого курса
- Основы классов данных: автоматически создаваемые методы
- Копирование с помощью copy() и частичные переопределения
- Деструктурирующие объявления с componentN
- Классы данных в коллекциях и в качестве ключей карт