Kotlin pro Android: základy syntaxe a možnosti

Autor: IT Sectr Publikováno: 2026-02-10 Doba čtení: 8 min

Kotlin — staticky typovaný programovací jazyk od JetBrains, běžící na JVM a oficiálně podporovaný Googlem pro vývoj Androidu od roku 2017. Kotlin je plně kompatibilní s Javou, má stručnou syntaxi a vestavěnou null-bezpečnost. Kotlin Documentation — kompletní průvodce jazykem a standardní knihovnou.

Hlavní body

  • Kotlin — staticky typovaný JVM jazyk od JetBrains se stručnou syntaxí a null-bezpečností
  • Null safety — kompilátor rozlišuje nullable (String?) a non-null (String) typy, eliminuje NullPointerException
  • Data classes — automatické generování equals, hashCode, toString, copy a componentN
  • Extension functions — přidávání metod k existujícím třídám bez dědičnosti pomocí statických volání
  • Coroutines — asynchronní programování v sekvenčním stylu pomocí suspend-funkcí bez blokování vláken

Co je Kotlin?

Kotlin — staticky typovaný programovací jazyk vytvořený společností JetBrains (tvůrcem IntelliJ IDEA) a vydaný v roce 2016 pod licencí Apache 2.0. Kotlin se kompiluje do bytekódu JVM, JavaScriptu a nativního kódu (přes Kotlin/Native). Hlavní oblast použití — vývoj Androidu, serverové aplikace a multiplatformní projekty.

Google prohlásil Kotlin oficiálním jazykem vývoje Androidu na Google I/O 2017. Podle údajů Google (Android Developer Blog, 2026) více než 85% nových projektů v Google Play používá Kotlin. Jazyk je také aktivně využíván při vývoji serverů (Spring Boot, Ktor) a v multiplatformních projektech (Kotlin Multiplatform Mobile).

Kotlin je plně kompatibilní s Javou — lze volat Java kód z Kotlinu a naopak v rámci jednoho projektu. Nástroje pro sestavení (Gradle, Maven) podporují oba jazyky, což umožňuje postupnou migraci z Javy na Kotlin bez prostojů ve vývoji.

Proč je Kotlin populárnější než Java pro Android

Hlavní důvody: stručnost — Kotlin vyžaduje v průměru o 40% méně řádků kódu než Java pro stejný úkol. Null-bezpečnost — kompilátor zakazuje používání nullable typů bez kontroly. Funkcionální možnosti — funkce vyššího řádu, lambdy, extension functions a korutiny činí kód výraznějším a bezpečnějším.

Základy syntaxe

Základní syntaxe Kotlinu kombinuje stručnost s jasností. Proměnné se deklarují pomocí val (neměnná) a var (měnná). Kompilátor používá type inference, ale explicitní uvedení typu je podporováno. Funkce se deklarují klíčovým slovem fun.

kotlin
package com.example.intro

// Konstanty a proměnné
val appName: String = "KotlinApp"  // neměnná
var version = 1.0  // měnná, typ odvozen

// Funkce s expression body
fun sum(a: Int, b: Int) = a + b

// String templates
fun greet(name: String) = "Ahoj, $name! Verze ${appName}_$version"

// Default and named arguments
fun createUser(
    name: String,
    age: Int = 18,
    email: String? = null
)

When-výraz nahrazuje switch v Javě a je flexibilnější: podporuje kontrolu typů, rozsahy, podmínky a větve bez break. Kompilátor kontroluje vyčerpávající pokrytí pro enum a sealed třídy. Smart casts automaticky převádějí typy po kontrole is, čímž eliminují explicitní přetypování.

kotlin
fun analyzeValue(value: Any) = when (value) {
    is String -> "Řetězec délky ${value.length}"  // smart cast
    is Int -> "Celé číslo: $value"
    in 1..10 -> "Číslo v rozsahu 1-10"
    else -> "Neznámý typ"
}

Null-bezpečnost a elvis operátory

Null-bezpečnost — klíčová vlastnost Kotlinu, která eliminuje NullPointerException na úrovni kompilace. V Kotlinu typy ve výchozím nastavení nemohou být null. Chcete-li povolit null, přidejte ? k typu: String?. Kompilátor vyžaduje explicitní kontrolu každé nullable hodnoty.

kotlin
// Nullable a non-null typy
val nonNull: String = "Vždy non-null"
val nullable: String? = null  // povoleno

// Safe call — provede se pouze pokud není null
val length: Int? = nullable?.length

// Elvis operátor — výchozí hodnota
val text: String = nullable ?: "Default text"

// Let — provedení bloku s non-null hodnotou
nullable?.let { value ->
    println("Hodnota: $value")
}

Safe call operátor (?.) vrací null, pokud je objekt před operátorem null, a volá metodu/vlastnost v opačném případě. Elvis operátor (?:) poskytuje výchozí hodnotu, pokud je levá strana null. Not-null assertion (!!) vyhazuje NullPointerException, pokud je hodnota null — používejte pouze když jste si 100% jisti existencí hodnoty.

Platformní typy (platform types) — Java typy z volaného Java kódu, které Kotlin nemůže označit jako nullable nebo non-null. Typ se zobrazuje jako String! (s vykřičníkem). Vývojář je sám odpovědný za null-bezpečnost při práci s Java kódem.

Data třídy a destrukturalizace

Data třídy v Kotlinu automaticky generují equals(), hashCode(), toString(), copy() a componentN(). To eliminuje boilerplate Java modelů (POJO) a činí kód čistším. Deklarace data class zabírá jeden řádek místo 20-30 v Javě.

kotlin
data class User(
    val id: Long,
    val name: String,
    val email: String,
    val age: Int? = null
)

// Použití
val user = User(1, "Anna", "anna@example.com")
val updatedUser = user.copy(age = 25)

// Destrukturalizace
val (id, name) = user
println("Uživatel #$id: $name")

Destrukturalizace umožňuje rozložit data class na proměnné v jednom řádku. To je výhodné při práci s páry, trojicemi a dalšími složenými hodnotami. Destrukturalizace je podporována pro data třídy, standardní kolekce (List, Map) a jakékoli třídy s operator fun componentN().

Rozšiřující funkce

Extension functions — mechanismus Kotlinu pro přidávání nových metod k existujícím třídám bez dědičnosti. Rozšíření se kompilují do statických metod s parametrem receiver, takže dědičnost není vyžadována a virtualita není podporována.

kotlin
// Extension function pro String
fun String.isEmail(): Boolean {
    return this.contains("@") && this.contains(".")
}

// Extension property
val String.isPhoneNumber: Boolean
    get() = this.matches(Regex("^\\+?[\\d-]{10,15}$"))

// Generic extension pro kolekce
fun List<Int>.sumOfEvens(): Int {
    return this.filter { it % 2 == 0 }.sum()
}

// Použití
println("test@mail.com".isEmail())  // true

Rozšíření jsou široce používána v Android SDK a knihovnách. Například Activity extensions v Android KTX jsou extension functions pro Activity, Fragment, View a další třídy. Rozšíření mohou být deklarována jako top-level funkce v souboru nebo jako členové třídy (member extensions).

Korutiny pro asynchronní programování

Coroutines — mechanismus asynchronního programování v Kotlinu umožňující psát neblokující kód v sekvenčním stylu. Korutina pozastavuje provádění na suspend-funkci bez blokování vlákna a obnovuje práci po dokončení operace. To je alternativa k řetězcům callbacků RxJava a AsyncTask.

kotlin
import kotlinx.coroutines.*

// Suspend-funkce — může se pozastavit
suspend fun fetchUserData(userId: Int): User {
    // delay — suspend-funkce, neblokuje vlákno
    delay(500)
    return User(userId, "User $userId", "user@example.com")
}

// Spuštění v korutině
fun loadData() {
    CoroutineScope(Dispatchers.Main).launch {
        val user = fetchUserData(1)  // pozastavení zde
        updateUI(user)  // pokračování na hlavním vlákně
    }
}

Dispatchers určují fond vláken pro korutinu: Dispatchers.Main (UI vlákno), Dispatchers.IO (síťové/disk operace), Dispatchers.Default (CPU-intenzivní úkoly). Structured concurrency garantuje, že korutina nezůstane aktivní po skončení scope — to zabraňuje únikům paměti.

kotlin
// Paralelní spuštění pomocí async/await
suspend fun loadDashboard(): Dashboard = coroutineScope {
    val user = async { fetchUserData(1) }
    val orders = async { fetchOrders(1) }
    val stats = async { fetchStats() }
    
    Dashboard(user.await(), orders.await(), stats.await())
}

Kotlin versus Java: srovnání

Volba mezi Kotlinem a Javou pro nový Android projekt — zásadní architektonické rozhodnutí. Kotlin nabízí modernější syntaxi a vestavěné bezpečnostní mechanismy, Java — širší fond vývojářů a vyspělé knihovny.

VlastnostKotlinJava
Null-bezpečnostVestavěná (nullable/non-null)Chybí (@Nullable anotace)
Objem kódu−40% oproti JavěBoilerplate (getters/setters)
Data třídydata class (jeden řádek)POJO s Lombokem nebo ručně
AsynchronicitaCoroutines (suspend/await)CompletableFuture, RxJava
Extension functionsVestavěnéPouze přes utility třídy
Smart castsPo is kontroleExplicitní přetypování (Type) obj
Zpětná kompatibilita100% s Javou

Výkon Kotlinu a Javy je srovnatelný — oba se kompilují do bytekódu JVM. Kotlin někdy přidává mikro-režii na korutiny a inlining, ale to je pro mobilní aplikace zanedbatelné. Google a JetBrains aktivně investují do Kotlinu: Kotlin Multiplatform, Kotlin/Wasm a zlepšení výkonu kompilátoru K2.

Často kladené otázky

Čím se Kotlin liší od Javy?

Kotlin je kratší než Java o 40% — méně boilerplate. Kotlin přidává null-bezpečnost, data třídy, extension functions, korutiny, smart casts, when-výrazy. Plná kompatibilita s Javou: oba jazyky běží na JVM a mohou být použity v jednom projektu bez konfliktů.

Jak funguje null-bezpečnost v Kotlinu?

Typy jsou ve výchozím nastavení non-null. Pro nullable použijte ?: String?. Kompilátor zakazuje přímý přístup k nullable hodnotě. Safe call (?.) vrací null při null receiver. Elvis operátor (?:) nastaví výchozí hodnotu. !! — vynucené získání s možnou výjimkou.

Co jsou korutiny (coroutines) v Kotlinu?

Korutiny — odlehčená vlákna, umožňující psát asynchronní kód sekvenčně. Suspend-funkce se pozastaví bez blokování vlákna. launch a async spouští korutiny v CoroutineScope. Dispatchers.IO pro síťové požadavky, Dispatchers.Main pro aktualizace UI.

Co jsou data třídy v Kotlinu?

data class automaticky generuje equals(), hashCode(), toString(), copy() a componentN(). Příklad: data class User(val name: String, val age: Int). Destrukturalizace pomocí val (name, age) = user. Obdoba record v Javě 14+, ale s dodatečnou metodou copy().

Jak fungují rozšiřující funkce (extension functions)?

Extension functions přidávají metody k existujícím třídám: fun String.isEmail(): Boolean. Kompilátor je nahrazuje statickými voláními s parametrem receiver. Dědičnost není vyžadována. Rozšíření jsou široce používána v Android KTX: view.showToast(), activity.viewModels().

Shrnutí

  • Kotlin — staticky typovaný JVM jazyk od JetBrains, oficiální jazyk Androidu od roku 2017
  • Null safety — nullable/non-null typy, safe call (?.), elvis (??), let-bloky pro bezpečnou práci s nullable
  • Data classes — automatické generování equals, hashCode, toString, copy a destrukturalizace
  • Extension functions — přidávání metod k libovolným třídám bez dědičnosti, kompilace do statických volání
  • Coroutines — asynchronní kód v sekvenčním stylu se suspend-funkcemi, launch/async a Dispatchers
  • Srovnání s Javou — −40% kódu, null-bezpečnost, smart casts, when-výrazy a 100% kompatibilita s Javou
  • Kotlin Multiplatform — Kotlin se používá nejen pro Android, ale také pro iOS (KMM) a servery (Ktor, Spring)

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také