Ответ
В Kotlin часто использую extension-функции, data-классы и корутины.
Data-классы – для хранения данных с автоматическими equals(), hashCode(), toString():
data class User(val id: Int, val name: String)
Extensions – для расширения функциональности без наследования:
fun String.addExclamation() = "$this!"
println("Hello".addExclamation()) // "Hello!"
Корутины – для асинхронного кода:
viewModelScope.launch {
val data = repository.fetchData() // suspend-функция
updateUI(data)
}
Также активно применяю when, let, apply, run для удобной работы с nullable и builder-паттернами.