Data Classes
Model immutable data with auto-generated equals, copy, and destructuring.
Code
data class User(val id: Int, val name: String, val email: String? = null)
val u1 = User(1, "Alice", "[email protected]")
val u2 = User(2, "Bob")
// Auto-generated toString/equals/hashCode/copy
println(u1)
println(u1 == User(1, "Alice", "[email protected]"))
// Destructuring
val (id, name) = u1
println("$id: $name")
// copy with overrides
val u3 = u1.copy(name = "Alice Smith")
println(u3)
// Sealed hierarchy with data classes
sealed class Result<out T> {
data class Success<T>(val value: T) : Result<T>()
data class Failure(val message: String) : Result<Nothing>()
}
fun handle(r: Result<Int>) = when (r) {
is Result.Success -> println("ok: ${r.value}")
is Result.Failure -> println("err: ${r.message}")
}
handle(Result.Success(42))
handle(Result.Failure("nope"))
// Data class in collection
val list = listOf(u1, u2, u3)
println(list.associateBy { it.id })Explanation
Data classes auto-generate toString, equals, hashCode, copy, and componentN for destructuring based on constructor properties. They are perfect for plain model objects and work well inside sealed hierarchies to model algebraic types. The copy function supports immutable updates by overriding only selected fields.
More Kotlin Snippets
Null Safety
Use nullable types, safe calls, Elvis, and smart casts for null-safe code.
Coroutines
Use launch, async, await, and structured concurrency with supervisorScope.
Extension Functions
Add methods to existing types with extensions and infix operators.
Sealed Classes
Model closed hierarchies and UI state with sealed classes and when.
When Expression
Branch on values, ranges, and types with when as statement or expression.
Collections
Filter, map, group, partition, and chunk with functional operators.