Sobes.tech
Middle

Jaké jsou nejlepší praktiky, které používáte k organizaci kódu v Kotlinu?

sobes.tech AI

Odpověď od AI

Používám kombinaci přístupů s důrazem na čitelnost, udržovatelnost a škálovatelnost.

  • Struktura projektu podle funkcí/modulů: Rozdělení na moduly (pro velké projekty) nebo balíčky podle funkcionality.
  • Dohody o pojmenování: camelCase pro proměnné a funkce, PascalCase pro třídy a objekty. Jasná a srozumitelná jména odrážející účel.
  • Použití rozšíření: Pro přidání funkcionality ke stávajícím třídám bez změny jejich zdrojového kódu. Pomáhá se vyhnout dědičnosti a činí kód čistším.
    // Příklad rozšíření pro String
    fun String.isInteger(): Boolean {
        return this.toIntOrNull() != null
    }
    
  • Funkce na úrovni vrchu: Pro pomocné funkce, které nejsou vázány na konkrétní třídu.
    // Příklad funkce na úrovni vrchu
    fun formatCurrency(amount: Double): String {
        return "%.2f Kč".format(amount)
    }
    
  • Data-třídy: Pro jednoduché držitele dat. Automaticky generují equals(), hashCode(), toString() a copy().
    data class User(val name: String, val age: Int)
    
  • Sealed-třídy: Pro reprezentaci omezené hierarchie tříd. Zajišťují úplné větvení (exhaustive when).
    sealed class Result {
        data class Success(val data: String) : Result()
        data class Error(val message: String) : Result()
    }
    
    fun processResult(result: Result) {
        when (result) {
            is Result.Success -> println("Úspěch: ${result.data}")
            is Result.Error -> println("Chyba: ${result.message}")
        }
    }
    
  • Object deklarace: Pro singletony a companion objekty.
    object DatabaseManager {
        fun connect() {
            // ...
        }
    }
    
  • Lambda výrazy a funkce na úrovni vrchu: Pro kompaktní a výstižný kód.
    val numbers = listOf(1, 2, 3, 4, 5)
    val evenNumbers = numbers.filter { it % 2 == 0 }
    
  • Nullable typy a bezpečné volání (?., ?:): Pro jasné označení možnosti null a bezpečnou práci s nimi.
    val name: String? = getName()
    val length = name?.length ?: 0 // Bezpečné volání a operátor Elvis
    
  • Dohody o formátování kódu: Dodržování standardního stylu Kotlin (mezery, odsazení atd.), často používám automatické formátování (například s pomocí ktlint).
  • Komentáře: Používám komentáře k vysvětlení složitých částí kódu nebo rozhodnutí designu, ale snažím se psát samo-vysvětlující kód.
  • Testy: Píšu jednotkové a integrační testy pro ověření funkčnosti a usnadnění refaktoringu.