Kotlin – szybki start

Kotlin – szybki start

Kotlin jest językiem opartym ja JVM który został zaprojektowany przez programistów firmy JetBrains. Język ten powstał jako odpowiedź na problemy Javy. Celem tego języka jest maksymalne uproszczenie programowania na JVM przy zachowaniu szybkości działania i kompilacji Javy. Kotlin dzięki swoim mechanizmom zapewnia dużą większą odporność na błędy. Czy jest to pretendent do następcy Javy? Moim zdaniem z pewnością tak. Do dzieła! Zaczynamy od utworzenia nowego projektu w środowisku Intellij Idea:

Tworzymy nowy plik Kotlin File/Class:

Plik HelloWorld.kt:

fun main(args: Array<String>) {
    println("JavaLeader.pl")
}

wynik:

JavaLeader.pl

Udało się! Pierwszy program w Kotlinie!

Lukry składniowe/uproszczenia:

Poniżej typowa klasa User.java zgodna z konwencją JavaBean:

public class User {
 
    String name;
    String username;
 
    public User(String name, String username) {
        this.name = name;
        this.username = username;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getUsername() {
        return username;
    }
 
    public void setUsername(String username) {
        this.username = username;
    }
}

W kotlinie ta sama klasa wygląda następująco:

class User (var name: String, var surname: String)

lub inaczej:

class User (name: String, surname: String) {
    val name    = name 
    val surname = surname
}

varname – w kotlinie oznacza zmienną do której można przypisać wartość wiele razy, val natomiast to odpowiednik zmiennej stałej – final z javy.

Dodanie specyficznych metod dostępowych – get i prywatnych domyślnych metod typu set:

class User (name: String, surname: String) {
    var name = name
        get() = name.decapitalize()
        private set
    var surname = surname
        get() = surname.decapitalize()
        private set
}

Świetnym przykładem uproszczeń są zwracane wartości, w kotlinie instrukcja try…catch może zwracać wartość:

fun sum(i: Int, j: Int) = i + j
 
val arg = try {
    sum(10,15)
}
catch (e: Exception) {
    -1
}

bez mechanizmu zwracania wartości, kod wyglądały następująco:

fun sum(i: Int, j: Int) = i + j
 
var arg: Int? = null
try {
    arg = sum(10,15)
} catch (e: Exception) {
    arg = -1
}
 
val result = arg!!

Znak !! oznacza, że jeśli dana zmienna przyjmie wartość null to zostanie zwrócony wyjątek NPE! Jest to konwersja zmiennej nullable na non-nullable.

Kolejny przykład uproszczenia to instrukcja when podobna do instrukcji switch…case:

fun checkType(a: Any?) = when(a) {
    null   -> "null"
    is Int -> "number"
    else   -> "?"
}
 
println(checkType(5))
println(checkType(null))

Rozszerzenia to sposób na dodanie funkcjonalności (np. metody) do klasy, bez konieczności ingerencji w jej kod, dziedziczenia z niej, czy stosowania wzorców projektowych typu „dekorator”. Przykład w kotlinie:

fun String.startWithUpperCaseCustom() = this[0].isUpperCase()
println("JavaLeader.pl".startWithUpperCaseCustom())

Ciekawym przykładem funkcji rozszerzającej jest funkcja apply(), zamiast pisać:

val u1     = User("JavaLeader", "pl")
u1.name    = "JavaLeader"
u1.surname = "pl"

można napisać:

u1.apply {
    name    = "JavaLeader"
    surname = "pl"
}

Zabezpieczenie przed błędem NullPointerException:

Język Java nie posiada mechanizmu który zabezpieczałby programistów przed błędem NullPointerException. Jest to jeden (o ile nie najczęstszy) z najczęstszych błędów występujących podczas programowania w Javie. W kotlinie aby zmienna mogła przyjmować wartość Null należy to wyraźnie wskazać znakiem “?“.

Próba przypisania wartości null do zmiennej:

val jl2: String = null;

nie zadziała! Trzeba dodać znak – “?“:

val jl2: String? = null;

wypisanie wartości nie zadziała – “Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?

println(jl2.length)

trzeba dodać znak – “?“:

println(jl2?.length)

lub “odpakować zmienną“:

if(jl2!=null) {
    println(jl2?.length)
}

Zobacz kod na GitHubie i zapisz się na bezpłatny newsletter!

.

Leave a comment

Your email address will not be published.


*