Я портирую движок 2D-графики со Swift на Kotlin. Большие части модели данных являются вложенными структурами в Swift. В качестве простого примера:
struct Point {
var x: Float
var y: Float
}
struct Size {
var width: Float
var height: Float
}
struct Rect {
var origin: Point
var size: Size
}
Многие структурные модели глубоко вложены, с гораздо большим количеством уровней, чем здесь. Кроме того, поскольку мы используем struct
s вместо class
es для большинства типов, значения которых вводятся в Swift, мы можем легко использовать чистые функции для 2D-операций, как в этом небольшом надуманном примере:
func translate(rect1: Rect, dx: Float) -> Rect {
var rect2 = rect1 // Creates a mutable deep copy
rect2.origin.x += dx
return rect2
}
Такой подход обеспечивает нам высокую производительность, отсутствие проблем с обработкой памяти (все работает в стеке) и отличную тестируемость. Поскольку struct
s имеют типизированное значение, мы не можем случайно создать мелкие копии и изменить неправильные объекты.
Какой идиоматический c способ создания такой модели в Kotlin?
Похоже, классы данных Kotlin являются решением, но я не знаю, как Копирование глубоко вложенных классов данных обычно выполняется. Вы создаете собственные методы deepCopy () везде?
Должен ли я беспокоиться о производительности, если вызов метода copy () / deepCopy () запускает поток другой функции copy () / deepCopy (), вызывающей модель? (С точки зрения C программиста, я вижу тысячи маленьких, недолговечных выделений в куче)