Sobes.tech
Senior

Jakie możliwości języka Kotlin chciałbyś zobaczyć w innych językach programowania?

sobes.tech AI

Odpowiedź od AI

  • Funkcje rozszerzające: Pozwalają na dodanie nowych funkcji do istniejących klas bez dziedziczenia lub użycia wzorców dekoratorów. Poprawiają czytelność i organizację kodu.

  • Null-safety (bezpieczeństwo null): System typów, który wyraźnie rozróżnia nullable i non-nullable typy, zapobiegając błędom NullPointerException podczas kompilacji.

  • Klasy danych: Uproszczone tworzenie klas do przechowywania danych z automatycznym generowaniem equals(), hashCode(), toString(), copy().

    data class User(val name: String, val age: Int)
    
  • Wyrażenia while i when: when to potężna alternatywa dla switch z obsługą różnych warunków (typy, zakresy, warunki boolowskie), while może być wyrażeniem zwracającym wartość ostatniego warunku.

    val result = when (x) {
        1 -> "jeden"
        in 2..10 -> "od dwóch do dziesięciu"
        is String -> "łańcuch"
        else -> "coś innego"
    }
    
  • Korutyny: Lekkie wątki, które ułatwiają programowanie asynchroniczne i nieblokujące. Zintegrowane na poziomie języka.

  • Nazwane i opcjonalne argumenty: Poprawiają czytelność podczas wywoływania funkcji i pozwalają pomijać opcjonalne parametry.

    fun greet(name: String, greeting: String = "Cześć") {
        println("$greeting, $name!")
    }
    
    greet(name = "Świecie") // Używamy domyślnego argumentu opcjonalnego
    greet(name = "Świecie", greeting = "Witaj") // Nadpisujemy argument opcjonalny
    
  • Smart casts: Kompilator automatycznie określa typ zmiennej po sprawdzeniu (np. is), umożliwiając dostęp do członków tego typu bez jawnego rzutowania.

    fun printLength(obj: Any) {
        if (obj is String) {
            // Teraz obj jest traktowane jako String
            println("Długość łańcucha: ${obj.length}")
        }
    }
    
  • Wnioskowanie typu: Kompilator może automatycznie określić typ zmiennej, zmniejszając redundancję kodu.

    val number = 42 // Kotlin sam określa, że to Int
    val message = "Cześć" // Kotlin sam określa, że to String
    
  • Wyrażenia lambda z domyślnym parametrem it: Przydatne dla prostych lambd z jednym parametrem.

    val list = listOf(1, 2, 3)
    list.forEach { println(it) } // it to element listy