Объявление классов данных
Компактные классы моделей
«Объявление классов данных» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.
Классы для хранения данных
Многие классы существуют только для объединения нескольких значений: пользователя, точки, результата.
Kotlin предоставляет класс данных — краткий способ объявить такие классы моделей со множеством автоматически предоставляемых возможностей.
Объявление класса данных
Добавьте ключевое слово data перед class и перечислите свойства в конструкторе.
Эта единственная строка создаёт полнофункциональную модель.
data class User(val name: String, val age: Int)
fun main() {
val u = User("Alice", 30)
println(u.name)
println(u.age)
}Бесплатный toString
Класс данных автоматически создаёт удобочитаемый toString(). При выводе объекта отображаются имя его класса и значения свойств.
Сравните это с обычным классом, который вывел бы непонятное хеш-значение.
data class User(val name: String, val age: Int)
fun main() {
val u = User("Bob", 25)
println(u)
}Свойства обязательны
Класс данных должен объявлять хотя бы одно свойство в своём основном конструкторе.
Каждый параметр должен быть val или var, чтобы он стал свойством, которое могут использовать сгенерированные функции.
data class Point(val x: Int, val y: Int)
fun main() {
val p = Point(3, 4)
println(p)
}Свойства только для чтения и изменяемые свойства
Используйте val для свойств только для чтения, а var — для изменяемых свойств.
Неизменяемые классы данных обычно предпочтительнее, потому что их проще анализировать.
data class Counter(var count: Int)
fun main() {
val c = Counter(0)
c.count = 5
println(c)
}Значения параметров по умолчанию
Как и любой конструктор, класс данных может иметь значения по умолчанию.
Это позволяет вызывающему коду не указывать параметры, которым не нужно задавать значения.
data class User(val name: String, val active: Boolean = true)
fun main() {
val u = User("Mia")
println(u)
}Именованные аргументы
Объединяйте классы данных с именованными аргументами, чтобы создание объектов было понятным и самодокументируемым.
Это особенно полезно, когда несколько свойств имеют один и тот же тип.
data class Rect(val width: Int, val height: Int)
fun main() {
val r = Rect(width = 10, height = 5)
println(r)
}Добавление методов
У класса данных по-прежнему может быть тело с собственными функциями и вычисляемыми свойствами.
Сгенерированные функции существуют рядом с тем, что добавили Вы.
data class Circle(val radius: Double) {
fun area(): Double = 3.14159 * radius * radius
}
fun main() {
val c = Circle(2.0)
println(c.area())
}Свойства вне конструктора
Сгенерированные функции используют только свойства основного конструктора.
Свойство, объявленное в теле класса, является частью объекта, но игнорируется функциями toString, equals и другими.
data class User(val name: String) {
var nickname: String = ""
}
fun main() {
val u = User("Alex")
u.nickname = "Al"
println(u) // nickname not shown
println(u.nickname)
}Когда использовать классы данных
Выбирайте класс данных, когда объект в основном хранит значения:
- объекты передачи данных и модели программных интерфейсов
- координаты, диапазоны, результаты
- наборы конфигурации
Не используйте их для классов, построенных вокруг сложного поведения или наследования.
Объединяем всё
Класс данных — это компактное объявление модели:
- Добавьте в начало
dataи перечислите свойства - Бесплатно получите
toString,equals,hashCode,copy - Поддерживаются значения по умолчанию, именованные аргументы и дополнительные методы
data class Book(val title: String, val pages: Int = 0)
fun main() {
val b = Book(title = "Kotlin", pages = 300)
println(b)
}Быстрая проверка
Проверьте, насколько хорошо Вы понимаете объявление классов данных.
Итоги
Вы узнали, как объявлять классы данных:
- Ключевое слово
dataсоздаёт стандартные функции - Свойства конструктора определяют создаваемое поведение
- Значения по умолчанию и именованные аргументы делают классы данных гибкими
Далее Вы подробно изучите сгенерированные функции copy и equals.
Часто задаваемые вопросы
Урок «Объявление классов данных» бесплатный?
Да — полный текст урока «Объявление классов данных» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 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 — локальная установка не требуется.
Все уроки этого курса
- Объявление классов данных
- copy и equals
- Деструктурирующие объявления
- Классы данных в коллекциях