object Kotlin'da — bu kechiktirilgan initsializatsiya va standart holatda thread-safe bo'lgan singleton obyekt yaratishning deklarativ usulidir. object kalit so'zi bitta nusxaga ega butun sinfni almashtiradi va singleton, companion object, anonim obyektlar va statik utilitalarni e'lon qilish uchun ishlatiladi. JetBrains Kotlin Documentation (2026) ga ko'ra, object declaration JVM dunyosida singleton-ni amalga oshirishning eng sodda va xavfsiz usulidir.
Asosiy ma'lumotlar
object Kotlin'da — bu bir vaqtning o'zida sinfni aniqlaydigan va uning yagona nusxasini (singleton) yaratadigan maxsus e'lon shaklidir. Bu bitta konstruksiyadagi class declaration va instance creation gibrididir.
Java'da singleton yaratish uchun shaxsiy konstruktor, statik maydon, getInstance metodi yozish va thread-safe-likni ta'minlash kerak. Kotlin object buni bir qator kod bilan bajaradi: object MySingleton { }. Kompilyator JVM bayt-kodida static initializer mexanizmidan foydalanib, thread-safe kechiktirilgan initsializatsiyani avtomatik yaratadi.
Kotlin Language Specification (2026) ga ko'ra, object declaration statik blokda initsializatsiya qilinadigan INSTANCE statik maydoni va shaxsiy konstruktorga ega final sinfga kompilyatsiya qilinadi. Bu JVM darajasida initsializatsiyaning atomikligini kafolatlaydi.
Object declaration (singleton obyekti) object kalit so'zi va undan keyin nom bilan e'lon qilinadi. Obyekt tanasi xususiyatlar, metodlar, init bloklarini o'z ichiga olishi va boshqa sinflar yoki interfeyslardan meros olishi mumkin.
object DatabaseManager {
private val connection: String = "jdbc:postgresql://localhost:5432/app"
fun query(sql: String): List<Map<String, Any>> {
// so'rovni bajarish
return emptyList()
}
}
// Foydalanish
DatabaseManager.query("SELECT * FROM users")
DatabaseManager initsializatsiyasi birinchi murojaat momentida sodir bo'ladi — kechiktirilgan va thread-safe. Sinxronizatsiya uchun hech qanday qo'shimcha kod talab qilinmaydi.
Object oddiy sinflar va interfeyslardan meros olishi mumkin. Bu object-ni bitta nusxali abstrakt sinf yoki interfeys implementatsiyasi sifatida ishlatishga imkon beradi.
interface Logger {
fun log(message: String)
}
object ConsoleLogger : Logger {
override fun log(message: String) {
println("[LOG] $message")
}
}
companion object — bu companion kalit so'zi bilan sinf ichida e'lon qilingan maxsus object-dir. Kotlin'da static kalit so'zi yo'qligi sababli statik a'zolarni almashtiradi.
class ApiClient {
companion object {
private const val BASE_URL = "https://api.example.com"
fun create(): ApiClient {
return ApiClient()
}
}
}
// ApiClient nusxasini yaratmasdan chaqirish
val client = ApiClient.create()
Companion object nomga ega bo'lishi mumkin (standart Companion), interfeyslarni implementatsiya qilishi va extension functions orqali kengaytirilishi mumkin. Java'dagi statik metodlardan farqli o'laroq, companion object to'liq huquqli obyektdir, argument sifatida uzatilishi yoki o'zgaruvchiga saqlanishi mumkin.
Kotlin Best Practices (2026) ga ko'ra, companion object fabrik metodlari, konstantalar va sinf bilan bog'liq statik utilitalar uchun ishlatiladi. Companion object-ni haddan tashqari ko'p ishlatishdan qochish tavsiya etiladi — bog'liq bo'lmagan utilitalar uchun eng yuqori darajadagi funksiyalardan foydalanish yaxshiroqdir.
Java bilan uyg'unlik uchun companion object metodlari @JvmStatic bilan annotatsiya qilinishi mumkin. Bu JVM bayt-kodida haqiqiy statik metod yaratadi va Java kodidan Companion sintaksisisiz foydalanish mumkin bo'ladi.
Object expression — alohida nomlangan sinf e'lon qilmasdan, sinf yoki interfeys metodlarini qayta belgilash uchun joyida yaratilgan anonim obyektdir.
val handler = object : Runnable {
override fun run() {
println("Vazifa bajarildi")
}
}
thread(handler)
Object expressions object e'lonlaridan farq qiladi, chunki ular har bir bajarilishda yangi nusxa yaratadi. Ular singleton emas va nomga ega emas. Anonim obyektlar lambdalar kabi yopilishdan o'zgaruvchilarni tutib olishi mumkin.
Java'da anonim sinflar faqat bitta turdan meros olishi mumkin bo'lsa, Kotlin object expression bir nechta turni bir vaqtning o'zida meros qilib olishi mumkin.
interface Clickable {
fun click()
}
abstract class View {
abstract fun render()
}
val button = object : View(), Clickable {
override fun render() = println("Tugmani renderlash")
override fun click() = println("Tugma bosildi")
}
Object — Kotlin'ning eng universal konstruksiyalaridan biri, ko'plab ssenariylarda qo'llaniladi.
Android loyihalarida object ko'pincha bir nechta nusxa talab qilinmaydigan Repository e'lon qilish uchun ishlatiladi. Yagona nusxa ma'lumotlarning izchilligini kafolatlaydi.
object UserRepository {
fun getUser(id: Int): User? {
// foydalanuvchini olish
return null
}
}
Companion object fabrik metodlari bilan — ko'p konstruktorlarga alternativadir. Nomlangan fabrik metodlari kodni o'z-o'zini hujjatlashtiruvchi qiladi.
data class GsonParser {
companion object {
fun create(): GsonParser = GsonParser()
fun createPretty(): GsonParser = GsonParser()
}
}
Object Java'dagi statik final maydonlarini almashtirib, konstantalar uchun konteyner vazifasini bajarishi mumkin. Object merosni qo'llab-quvvatlaydi, bu konfiguratsiya iyerarxiyalarini yaratishga imkon beradi.
Kotlin Standard Library (2026) ga ko'ra, object declaration Kotlin'da singleton yaratishning eng samarali usulidir, tezlik jihatidan "double-checked locking" implementatsiyalaridan ustun turadi va Java'dagi enum singleton bilan solishtirish mumkin.
Tez-tez beriladigan savollar
Object bir vaqtning o'zida sinfni e'lon qiladi va uning yagona nusxasini yaratadi. Oddiy sinf konstruktor orqali yaratilgan bir nechta nusxalarga ega bo'lishi mumkin.
Kechiktirilgan — obyektga birinchi murojaatda. Bungacha xotira ajratilmaydi va init blokidagi kod bajarilmaydi.
Yo'q, object aniq konstruktorga ega bo'lishi mumkin emas. Initsializatsiya init blokida amalga oshiriladi, u obyektga birinchi murojaatda bir marta chaqiriladi.
companion object — sinf ichida e'lon qilingan objectdir. Uning a'zolari nusxa yaratmasdan sinf nomi orqali mavjud bo'ladi, bu Java'dagi statik a'zolarni almashtiradi.
Ha, object initsializatsiyasi JVM statik initsializatori tufayli to'liq thread-safe. Hech qanday qo'shimcha sinxronizatsiya talab qilinmaydi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.