En klassresa

En Klass är fundamentalt i ett objektorienterat språk som Kotlin. Skall man beskriva verkligheten skall det göras på ett så enkelt sätt som möjligt. Java är lite omständlig på den punkten. Utvecklingsmiljöerna hjälper dig förvisso att generera nödvändiga getters och setters och det finns bibliotek som Lombok som skapar nödvändig boilerplate mer implicite. Skaparna av Kotlin har förstått det hela och hjälpt oss.

I sin enklaste form skriver man bara class framför klassnamnet och du har fått en klass som i princip bara kan användas som platshållare.

class UnknownCustomer

Har klassen ett attribut som t.ex. ett namn skriver du

class Customer(val name: String)

val betyder att det är en konstant och att när du väl har deklarerat namnet så går det inte att ändra.

För att sedan skapa en instans av klassen behövs följande: (notera att till skillnad mot Java så behövs inte ordet new för att skapa klassen.)

val myCustomer = Customer("Kalle Kula")
println("Killen heter "+myCustomer.name)

Nedan har vi lagt skapat en Customer men både namn, ålder och antal tecken som strängen namn består av.  Notera att det går utmärkt att använda tecknet å i variabelnamnet ålder.  Vi har även satt ordet var framför parametern ålder vilket gör att det går att ändra åldern senare.

class Customer(val name: String, var ålder: Int) 

val myCustomer = Customer("Kalle Kula", 34)
myCustomer.ålder = 44
println( myCustomer.name+ " är " + myCustomer.ålder + " år gammal!")

Om vi vill göra någon beräkning och spara den i klassen gör vi.

class Customer(val name: String, var ålder: Int) {
    var isOld = ålder > 50
}

val myCustomer = Customer("Kalle Kula", 34)  
if (myCustomer.isOld)
    println(myCustomer.name + "är gammal!")
else
    println(myCustomer.name + "är ung!")

När vi deklarerar variabeln isOld behöver vi inte ange att den har typen Boolean eftersom ålder > 50  är ett booleskt uttryck  förstår kompilatorn att det är en Boolean ändå. Kotlin försöker aldrig tvinga dig att skriva något som kompilatorn kan lista ut ändå.

Det finns dock ett problem med klassen ovan. Om någon sätter en ny ålder på kunden kommer inte isOld-flaggan att ändras. Om vi ändrar klassen så att vi kör en funktion då vi kontrollerar om kunden är gammal kommer vi alltid få rätt resultat. Det reserverade ordet fun betyder att det är en funktion vi deklarerar i klassen.

class Customer(val name: String, var ålder: Int) {
    fun isOld() = ålder > 50
}

val myCustomer = Customer("Kalle Kula", 34)
myCustomer.ålder = 66
if (myCustomer.isOld())
    println(myCustomer.name + "är gammal!")
else
   println(myCustomer.name + "är ung!")

Vill du lära dig mer läs gärna mer här!

Leave a Reply

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