8. Создайте класс данных
Класс dataпохож на класс structв некоторых других языках. Он существует главным образом для хранения данных. dataКлассы Kotlin обладают некоторыми дополнительными преимуществами, такими как утилиты для печати и копирования. В этом задании вы создадите простой класс данных и узнаете о поддержке классов данных в Kotlin.
Шаг 1: Создайте класс данных.
- Добавьте новый пакет
decorв папку example.myapp , чтобы разместить в нем новый код. Щелкните правой кнопкой мыши на файле example.myapp в панели «Проект» и выберите «Файл» > «Создать» > «Пакет» . - В пакете создайте новый класс с именем
Decoration.
package example.myapp.decor
class Decoration {
}
- Чтобы создать
Decorationкласс данных, добавьте перед объявлением класса ключевое слово `data.`. - Добавьте
Stringсвойство, которое будетrocksпередавать классу некоторые данные.
data class Decoration(val rocks: String) {
}
- В файле, вне класса, добавьте
makeDecorations()функцию для создания и вывода экземпляра классаDecorationс помощью метода"granite"`.`.
fun makeDecorations() {
val decoration1 = Decoration("granite")
println(decoration1)
}
- Добавьте
main()функцию для вызоваmakeDecorations()и запустите программу. Обратите внимание на логичный вывод, который получается, поскольку это класс данных.
⇒ Decoration(rocks=granite)
- В этом случае
makeDecorations()создайте еще дваDecorationобъекта, которые оба являются «сланцами», и распечатайте их.
fun makeDecorations() {
val decoration1 = Decoration("granite")
println(decoration1)
val decoration2 = Decoration("slate")
println(decoration2)
val decoration3 = Decoration("slate")
println(decoration3)
}
- Вставьте
makeDecorations()оператор print, который выводит результат сравненияdecoration1сdecoration2, и второй оператор, сравнивающийdecoration3сdecoration2. Используйте метод equals(), предоставляемый классами данных.
println (decoration1.equals(decoration2))
println (decoration3.equals(decoration2))
- Запустите свой код.
⇒ Decoration(rocks=granite) Decoration(rocks=slate) Decoration(rocks=slate) false true
Шаг 2. Используйте деструктуризацию.
Чтобы получить доступ к свойствам объекта данных и присвоить их переменным, можно присваивать их по одной, например, так.
val rock = decoration.rock
val wood = decoration.wood
val diver = decoration.diver
Вместо этого вы можете создать переменные, по одной для каждого свойства, и присвоить объект данных группе переменных. Kotlin помещает значение свойства в каждую переменную.
val (rock, wood, diver) = decoration
Это называется деструктуризацией и является удобным сокращенным способом записи. Количество переменных должно соответствовать количеству свойств, и переменным присваиваются значения в том порядке, в котором они объявлены в классе. Вот полный пример, который вы можете попробовать в Decoration.kt .
// Here is a data class with 3 properties.
data class Decoration2(val rocks: String, val wood: String, val diver: String){
}
fun makeDecorations() {
val d5 = Decoration2("crystal", "wood", "diver")
println(d5)
// Assign all properties to variables.
val (rock, wood, diver) = d5
println(rock)
println(wood)
println(diver)
}
⇒ Decoration2(rocks=crystal, wood=wood, diver=diver) crystal wood diver
Если вам не нужны одно или несколько свойств, вы можете пропустить их, используя _вместо имени переменной, как показано в приведенном ниже коде.
val (rock, _, diver) = d5