Kotlin'da object: bu nima, sintaksis va singleton obyektlarni qo'llash

Muallif: IT Sectr Nashr etilgan: 2026-06-21 O'qish vaqti: 9 daq

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 — bitta nusxali singleton sinfini e'lon qilish uchun kalit so'z
  • Kechiktirilgan initsializatsiya — object sinf yuklanayotganda emas, birinchi murojaatda yaratiladi
  • Companion object — Kotlin'dagi statik a'zolarning analogi (static kalit so'zi mavjud emas)
  • Object expression — metodlarni joyida qayta belgilash uchun anonim obyekt
  • Thread-safe — object initsializatsiyasi kafolatlangan holda xavfsiz

Kotlin'da object nima?

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.

Singleton obyektlar (object declaration)

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.

kotlin
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 uchun meros

Object oddiy sinflar va interfeyslardan meros olishi mumkin. Bu object-ni bitta nusxali abstrakt sinf yoki interfeys implementatsiyasi sifatida ishlatishga imkon beradi.

kotlin
interface Logger {
    fun log(message: String)
}

object ConsoleLogger : Logger {
    override fun log(message: String) {
        println("[LOG] $message")
    }
}

Companion object

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.

kotlin
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.

@JvmStatic annotatsiyasi

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 expressions (anonim obyektlar)

Object expression — alohida nomlangan sinf e'lon qilmasdan, sinf yoki interfeys metodlarini qayta belgilash uchun joyida yaratilgan anonim obyektdir.

kotlin
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.

kotlin
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")
}

Amaliy foydalanish ssenariylari

Object — Kotlin'ning eng universal konstruksiyalaridan biri, ko'plab ssenariylarda qo'llaniladi.

Singleton repozitoriyalar

Android loyihalarida object ko'pincha bir nechta nusxa talab qilinmaydigan Repository e'lon qilish uchun ishlatiladi. Yagona nusxa ma'lumotlarning izchilligini kafolatlaydi.

kotlin
object UserRepository {
    fun getUser(id: Int): User? {
        // foydalanuvchini olish
        return null
    }
}

Companion object orqali fabrik metodlari

Companion object fabrik metodlari bilan — ko'p konstruktorlarga alternativadir. Nomlangan fabrik metodlari kodni o'z-o'zini hujjatlashtiruvchi qiladi.

kotlin
data class GsonParser {
    companion object {
        fun create(): GsonParser = GsonParser()
        fun createPretty(): GsonParser = GsonParser()
    }
}

Konstantalar va sanab o'tishlar

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 oddiy sinfdan nima bilan farq qiladi?

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.

Object declaration qachon initsializatsiya qilinadi?

Kechiktirilgan — obyektga birinchi murojaatda. Bungacha xotira ajratilmaydi va init blokidagi kod bajarilmaydi.

Object konstruktorga ega bo'lishi mumkinmi?

Yo'q, object aniq konstruktorga ega bo'lishi mumkin emas. Initsializatsiya init blokida amalga oshiriladi, u obyektga birinchi murojaatda bir marta chaqiriladi.

Companion object oddiy objectdan nima bilan farq qiladi?

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.

Object declarations ko'p tarmoqli muhitda xavfsizmi?

Ha, object initsializatsiyasi JVM statik initsializatori tufayli to'liq thread-safe. Hech qanday qo'shimcha sinxronizatsiya talab qilinmaydi.

Xulosa

  • object — kechiktirilgan va thread-safe initsializatsiyali deklarativ singleton
  • companion object — Kotlin'dagi statik a'zolar, fabrik metodlari, konstantalar
  • Object expression — yopilishdan o'zgaruvchilarni tutib oluvchi anonim obyektlar
  • Meros — object sinflar va interfeyslardan, jumladan bir nechta turdan meros olishi mumkin
  • Samaradorlik — JVM static initializer orqali initsializatsiya, double-checked locking yuklamasisiz
  • Qo'llash — singleton xizmatlar, repozitoriyalar, konstantalar, fabrikalar, listener adapterlari
  • Cheklovlar — aniq konstruktorning yo'qligi, butun JVM uchun bitta nusxa

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.

Loyihani muhokama qilish

Shuningdek o'qing