// data class автоматически генерирует методы toString(), equals(), hashCode() и copy()
data class Product(
val id: Int,
val name: String,
val price: Double,
val category: String = "general" // Значение по умолчанию
)
data class Order(
val orderId: Int,
val customerName: String,
val items: List<Product>
)
// Метод-расширение (Extension function): добавляем новую функцию к уже существующему классу Order
fun Order.totalPrice(): Double {
// sumOf перебирает товары и складывает их цены (it — текущий товар)
return items.sumOf { it.price }
}
fun main() {
// Создаем 4 товара с разными категориями
val p1 = Product(1, "Ручка", 50.0, "general")
val p2 = Product(2, "Тетрадь", 80.0, "general")
val p3 = Product(3, "Наушники", 2500.0, "electronics")
val p4 = Product(4, "Шоколадка", 120.0, "food")
// Создаем 2 заказа
val order1 = Order(101, "Антон", listOf(p1, p2, p3))
val order2 = Order(102, "Иван", listOf(p4, p2))
// Выводим информацию по первому заказу
// toString() у data class выводит объект красиво в строковом виде
println("Заказ №${order1.orderId}, Клиент: ${order1.customerName}")
println("Товары: ${order1.items}")
println("Итоговая сумма: ${order1.totalPrice()} руб.\n")
// Выводим информацию по второму заказу
println("Заказ №${order2.orderId}, Клиент: ${order2.customerName}")
println("Товары: ${order2.items}")
println("Итоговая сумма: ${order2.totalPrice()} руб.\n")
// Использование copy() для создания акционного товара со скидкой 20%
val discountedHeadphones = p3.copy(price = p3.price * 0.8)
println("Исходный товар: $p3")
println("Товар по акции (-20%): $discountedHeadphones")
}