En aquest tema, explorarem dos conceptes importants en Kotlin: les declaracions d'objectes i els objectes companys. Aquests conceptes són fonamentals per entendre com gestionar instàncies úniques i membres estàtics en Kotlin.

Declaracions d'Objectes

Què és una Declaració d'Objecte?

Una declaració d'objecte en Kotlin permet crear una única instància d'una classe directament. Aquesta instància és un singleton, és a dir, només hi ha una instància d'aquesta classe en tota l'aplicació.

Sintaxi

object MySingleton {
    val name = "Singleton"
    fun printName() {
        println(name)
    }
}

Explicació del Codi

  • object MySingleton: Declara un objecte anomenat MySingleton.
  • val name = "Singleton": Defineix una propietat name dins de l'objecte.
  • fun printName(): Defineix una funció printName dins de l'objecte.

Exemple Pràctic

fun main() {
    MySingleton.printName()  // Sortida: Singleton
}

Avantatges de les Declaracions d'Objectes

  • Instància Única: Assegura que només hi ha una instància de la classe.
  • Inicialització Lazy: L'objecte es crea només quan s'accedeix per primera vegada.
  • Fàcil Accés: No cal crear una instància explícitament; es pot accedir directament.

Objectes Companys

Què és un Objecte Company?

Un objecte company és un objecte declarat dins d'una classe que permet definir membres estàtics. A diferència de les declaracions d'objectes normals, els objectes companys poden accedir als membres privats de la seva classe contenedora.

Sintaxi

class MyClass {
    companion object {
        val name = "Companion"
        fun printName() {
            println(name)
        }
    }
}

Explicació del Codi

  • class MyClass: Declara una classe anomenada MyClass.
  • companion object: Declara un objecte company dins de MyClass.
  • val name = "Companion": Defineix una propietat name dins de l'objecte company.
  • fun printName(): Defineix una funció printName dins de l'objecte company.

Exemple Pràctic

fun main() {
    MyClass.printName()  // Sortida: Companion
}

Avantatges dels Objectes Companys

  • Membres Estàtics: Permet definir membres estàtics dins d'una classe.
  • Accés als Membres Privats: Pot accedir als membres privats de la classe contenedora.
  • Inicialització Lazy: L'objecte company es crea només quan s'accedeix per primera vegada.

Comparació entre Declaracions d'Objectes i Objectes Companys

Característica Declaracions d'Objectes Objectes Companys
Instància Única Sí Sí
Inicialització Lazy Sí Sí
Membres Estàtics No Sí
Accés als Membres Privats No Sí
Definició Fora d'una Classe Sí No

Exercicis Pràctics

Exercici 1: Declaració d'Objecte

Crea una declaració d'objecte anomenada Database amb una propietat url i una funció connect.

object Database {
    val url = "jdbc:mysql://localhost:3306/mydb"
    fun connect() {
        println("Connecting to $url")
    }
}

fun main() {
    Database.connect()  // Sortida: Connecting to jdbc:mysql://localhost:3306/mydb
}

Exercici 2: Objecte Company

Crea una classe User amb un objecte company que tingui una funció create que retorni una instància de User.

class User(val name: String) {
    companion object {
        fun create(name: String): User {
            return User(name)
        }
    }
}

fun main() {
    val user = User.create("John")
    println(user.name)  // Sortida: John
}

Errors Comuns i Consells

  • Accés a Membres Privats: Recorda que només els objectes companys poden accedir als membres privats de la seva classe contenedora.
  • Inicialització: Assegura't que les propietats i funcions dins de les declaracions d'objectes i objectes companys estiguin correctament inicialitzades abans d'accedir-hi.

Conclusió

En aquesta secció, hem après sobre les declaracions d'objectes i els objectes companys en Kotlin. Hem vist com crear instàncies úniques i membres estàtics, i hem explorat exemples pràctics per entendre millor aquests conceptes. Ara estàs preparat per utilitzar aquests patrons en els teus projectes Kotlin per gestionar instàncies úniques i membres estàtics de manera eficient.

© Copyright 2026. Tots els drets reservats