Sobes.tech
Middle+

Да ли сте користили inline класе у свом искуству развоја?

sobes.tech АИ

Одговор од АИ

Da, koristio sam. Inline klase (ili klase vrednosti u Kotlin 1.5+) koriste se za:

  1. Poboljšanje sigurnosti tipova bez dodatnih troškova pakovanja: Omogućavaju kreiranje "omotača" za primitivne tipove ili druge klase, dajući im specifično značenje, na primer, jedinice mere, ID-ove korisnika itd. Tokom kompilacije, Kotlin kompajler zamenjuje instancu inline klase njenim osnovnim tipom, izbegavajući kreiranje suvišnih objekata.

Primer:

// Definicija inline klase
@JvmInline
value class UserId(val id: String)

fun findUser(id: UserId) {
    // Logika za pronalazak korisnika po ID-u
}

fun main() {
    val userId = UserId("12345")
    findUser(userId) // Sigurno, očekuje se UserId
    // findUser("12345") // Greška pri kompilaciji, očekuje se UserId, dobija se String
}
  1. Jasnije kodiranje namera: Jasno ukazuju na to koji tip podataka se očekuje ili vraća, poboljšavajući čitljivost i održivost koda.

  2. Minimizacija kreiranja suvišnih objekata pri radu sa primitivnim tipovima: Omogućavaju korišćenje metoda i svojstava definisanih u inline klasi, bez kreiranja objekta te klase tokom izvršenja.

@JvmInline
value class Password(private val s: String) {
    val length: Int
        get() = s.length

    fun isValid(): Boolean = s.length >= 8
}

fun processPassword(password: Password) {
    if (password.isValid()) {
        // Obrada validne lozinke
    }
}

fun main() {
    val userPassword = Password("SecurePassword")
    processPassword(userPassword)
    println(userPassword.length) // Izvršava se bez kreiranja objekta Password
}

Korišćenje inline klasa pomaže u poboljšanju sigurnosti tipova i performansi, posebno pri radu sa ponovljenim tipovima podataka koji imaju različito semantičko značenje.