Назад к вопросам
Middle
135
questionbank
Какие общие идиомы и паттерны вы используете в Kotlin?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
- Создание data классов.
- Использование расширяющих функций для добавления функциональности без изменения исходного класса.
- Применение null-safety операторов (
?,?:,!!) для безопасной работы с nullable типами. - Лямбды и функции высшего порядка для работы с коллекциями и асинхронными операциями.
- Использование
whenвместо switch-case. - Применение
objectдля синглтонов. - Использование корутин для асинхронного и неблокирующего кода.
- Применение scope functions (
let,run,with,apply,also) для выполнения блока кода в контексте объекта. - Delegate свойства для сокращения шаблонного кода (например,
lazy,by viewModels()).
Примеры:
// Data класс
data class User(val name: String, val age: Int)
// Расширяющая функция
fun String.addGreeting(greeting: String): String {
return "$greeting, $this"
}
// Null-safety операторы
val nullableString: String? = null
val length = nullableString?.length ?: 0 // Elvis оператор
// Лямбда и функции высшего порядка
val numbers = listOf(1, 2, 3, 4, 5)
val squared = numbers.map { it * it }
// when выражение
fun describe(obj: Any): String =
when (obj) {
1 -> "One"
"Hello" -> "Greeting"
is Long -> "Long"
!is String -> "Not a string"
else -> "Unknown"
}
// object синглтон
object SingletonExample {
fun doSomething() {
// ...
}
}
// Корутины
import kotlinx.coroutines.*
fun main() = runBlocking { // main co-routine
launch { // launch a new co-routine and continue
delay(1000L) // non-blocking delay for 1 second (default time unit is ms)
println("World!") // print after delay
}
println("Hello,") // main co-routine continues while a previous has delayed
}
// Scope functions
val person = User("Alice", 30)
person.apply { // apply returns the object itself
age += 1
}.also { // also returns the object itself
println("Person's new age is ${it.age}")
}
// Delegate свойство с lazy
val lazyValue: String by lazy {
println("computed!")
"Hello"
}