Smart Casting – Inget för korkade programmerare

Har man ett typat språk behövs det ibland få koll på vilket typ ett objekt är. I Java har vi instansof i Kotlin använder vi is

// Java
if (obj instansof String) {
    System.out.println("Längden är " + ((String) obj).length());
}

// Kotlin
if (obj is String) 
     println("Längden är " + obj.length)

Ovan ser bra ut både i Java och Kotln. Det är dock en skillnad:  Kotlins  Smart Casting

I Java behöver vi alltid tala om vilken typ som vi förväntar oss. I exemplet ovan gör vi det genom att skriva ((String) obj).length() Det känns lite onödigt att vi om och om igen behöver tala om för kompilatorn att ett objekt som vi vet är en sträng är en sträng.

Gör vi en kontroll av typningen i en if-sats med en operator till vänster om en operator,  vet kompilatorn typen på höger sida om operatorn. Nedan är exempel på eller (||) samt och (&&) operatorerna.

if (x !is String || x.length() == 0) return

if (x is String && x.length() > 0)
    println(x.length()) 

Vi har även automatisk castning i satsen println(x.length()) till en sträng.

Det är även möjligt att göra en when-sats där vi väljer över typen som nedan.

when (x) {
    is Int -> print(x + 1)
    is String -> print(x.length + 1)
    is IntArray -> print(x.sum())
}

 

 

 

 

Posted in Kod

Leave a Reply

Your email address will not be published. Required fields are marked *