Select Page

Kotlin porovnávanie, rozdiel medzi == a ===

Jaroslav Beňo

21/05/2020

V tomto článku sa oboznámiš ako je to v Kotline s porovnávaním. Dozvieš sa aký je rozdiel medzi == a ===. Poďme na to v článku Kotlin porovnávanie, rozdiel medzi == a ===.

V Jave ak by som porovnal dve premenné pomocou ==, tak sa porovná ich hodnota. V Kotline je všetko referenčné, teda by som očakával, že ak použijem == tak sa porovnajú hodnoty, teda adresy na objekt a vtedy by dva rôzne objekty boli rôzne lebo majú inú adresu.

No nie je to tak. Znak == je štrukturálne porovnanie. Ak by som chcel porovnať referencie, tak použijem znak === čo je referenčne porovnanie.

Majme takýto príklad:

val jaro = Osoba("Jaro", "484848/4894")
val peter = Osoba("Peter", "121212/4849")

println(jaro == peter)
println(jaro === peter)

Výstup na konzole bude false a false, pretože sú to dva rôzne objekty a ani ich štruktúra nie je rovnaká.

V takomto príklade:

val peter = Osoba("Peter", "121212/4849")
val peter2 = Osoba("Peter", "121212/4849")

println(peter == peter2)
println(peter === peter2)  

Na výstupe by si očakával pre == true a pre === false, pretože majú rovnakú štruktúru a zároveň sú to dva rozdielne objekty. Na výstupe ale bude false a false.

Prečo?

Lebo na pozadí sa pri použití == volá metóda equals. Nachádza sa táto metóda v triede Osoba? Nie, tak z kade ju Kotlin zoberie? Zoberie ju z triedy Object – toto je trieda, z ktorej sú odvodené všetky ostatné triedy na pozadí.

Táto metóda equals porovnáva referencie, teda správ sa akoby sme použili ===. To ale nechceme, teda ju musíme prepísať v našej triede Osoba.

Ak začnem písať funkciu tak najprv napíšem override a keď začnem písať názov funkcie, tak nám Kotlin dá na výber:

idea kotlin 16
override fun equals(other: Any?): Boolean {
    return super.equals(other)
}  

super.equals znamená, že sa zavolá equals metóda z rodičovskej triedy a tou je Object. To chceme prepísať a vymyslíme si ako sa majú dve osoby porovnávať. To je na nás, kedy povieme, že je to tá istá osoba?

Napríklad porovnáme všetky údaje. No logicky by nám malo stačiť porovnať rodné číslo. To je už na nás.

Táto funkcia má na vstupe other, čo je typu Any – teda hocijakého typu (otáznik pri type budeme preberať pri safe type). My musíme najprv sa spýtať, či other je typu Osoba, lebo porovnávame túto Osobu s ďalšou Osobou.

override fun equals(other: Any?): Boolean {
    if(other is Osoba)
        return meno == other.meno
    else
        return false
}

K podmienkam sa ešte dostaneme.

Ak teraz spustíme program

println(peter == peter2)
println(peter === peter2)

na výstupe bude true a false. True preto, lebo som porovnal pomocou equals a false preto, lebo som porovnal referencie (odkazy na objekty v pamäti).

Ako je to s nerovnosťou? Použijeme ! pre negáciu. Napr. ak chcem porovnať, či sa premenné nerovnajú štrukturálne dáme != ak chcem porovnať, či sa dve premenné nerovnajú referenčne, tak dáme !==.

Najnovšie články

O autorovi: Jaroslav Beňo

Jaro je v skratke kresťan, manžel, otec a programátor. Na tomto webe sa venuje programovaniu. Jeho túžbou je šíriť vedomosti ďalej, aby sme mohli spolu rásť.

Pripravil viacero online video kurzov. Jeho sociálne siete:

Podobné články

Kotlin when

Predstav si, že napíšeš aplikáciu, kde používateľ bude čítať dáta z konzoly, ak niečo zadá, tak sa má niečo vykonať, ak zadá niečo iné, tak sa vykoná niečo iné. Napríklad budeš mať aplikáciu, kde používateľ bude vyberať smer kade má ísť. Ak napíše SEVER, tak na...

Kotlin podmienky if a if else

V tomto článku sa naučíš, čo je to podmienka a ako ju požiť. Poďme na to a poďme sa naučiť Kotlin podmienky if a if else. Základom každého algoritmu je podmienka. Ak niečo, tak niečo, alebo niečo iné. Napríklad ideš kúpiť vajíčka do obchodu: Je obchod otvorený? Ak...

Kotlin premenné

V tomto článku sa dozvieš čo sú to premenné a ako fungujú v programovacom jazyku Kotlin. Premenné sú jedným zo základných pilierov pri programovaní. Musíš vedieť, ako sa vytvárajú a na čo slúžia. Poďme na to Kotlin premenné. Premenné slúžia na uchovanie informácii...

Kotlin prvý program

V tomto článku sa dozvieš ako krok za krokom napíšeš svoj prvý program v Kotline. Potrebuješ vývojové prostredie IntelliJ IDEA a ostatné sa dozvieš v článku. Vytvoríme nový Kotlin/JVM project a dáme Next. Pomenujeme projekt a zašpecifikujeme umiestnenie....

Ako skonvertovať Java kód na Kotlin kód

V IntelliJ IDEA máme možnosť skopírovať java kód a po vložení do Kotlin kódu sa nás IDEA spýta, či daný kód chceme preložiť do Kotlin kódu. Toto je rýchli spôsob ako si vyskúšať ako by Java kód vyzeral v Kotline. A ty sa v tomto článku dozvieš ako na...

Kotlin úvod v skratke

V tomto článku sa ti v skratke budem snažiť povedať, čo je to Kotlin. Kotlin je programovací jazyk, ktorý vlastní JetBrains, ktorý vytvorili napríklad IntelliJ IDEA vývojové prostredie. Kotlin je navrhnutý tak, aby mohol byť spustený na JVM, tak ako iné java programy....

Kotlin plugin v IntelliJ IDEA

Pri programovaní aplikácie - programu v jazyku Kotlin vieme použiť napríklad IntelliJ IDEA vývojové prostredie. Ja toto prostredie odporúčam a v tomto článku sa dozvieš ako nastaviť Kotlin plugin v IntelliJ IDEA. V IntelliJ IDEA si musíme byť istý, že máme...

Share This

Páčil sa ti článok? Zváž zdieľanie. Ďakujeme.