Sari la conținut
Background Image
  1. Posts/

Învățarea limbajului Kotlin

Denis Nutiu
Autor
Denis Nutiu
I’m Denis, a Software Engineer living in Romania. I’m passionate about cloud computing and software development.

kotlin

Introducere
#

Salutare tuturor! 👋

Anul 2023 se apropie de sfârșit și vreau să scriu un scurt articol despre experiența mea cu Kotlin și ce alte limbaje de programare am încercat anul acesta.

În afara serviciului, îmi place să experimentez cu noi limbaje de programare și tehnologii. De obicei, nu construiesc proiecte secundare în limbajele și cadrele pe care le folosesc cu normă întreagă la serviciu, deoarece nu mi se pare distractiv. Îmi place să învăț lucruri noi.

Așa că am început să experimentez cu Dart, Rust, Swift și Kotlin și am ajuns la concluzia că alegerea mea preferată este Kotlin.

În opinia mea…

Dart este un limbaj frumos și are instrumente excelente, dar nu îl văd folosit nicăieri în afara Flutter. Așa că nu am multe cazuri de utilizare pentru el.

Rust este un limbaj excelent cu instrumente excelente. Dar nu-mi place să mă lupt cu verificatorul de împrumuturi și cu macrocomenzile. 💀 Nu mă văd ca un programator de sisteme, așa că nu am multe cazuri de utilizare pentru Rust.

Swift este un limbaj excelent, iar instrumentele pe care le-am folosit nu sunt grozave, nu-mi place deloc XCode.

De asemenea, nu am un computer Apple pe care să-l folosesc personal tot timpul. Mi se pare că Apple a neglijat și limbajul. Chiar dacă este open-source și a apărut în 2015, când eram student în primul an la facultate, nu îl văd folosit nicăieri în afara ecosistemului Apple. Ceea ce este păcat, deoarece este un limbaj cu adevărat interesant.

Kotlin, limbajul viitorului
#

Până acum am folosit Kotlin pentru a scrie o mică aplicație Android numită Image Tagger, care este în prezent în curs de revizuire de către Google, și pentru a rezolva puzzle-urile Advent of Code 2023.

Ceea ce îmi place la Kotlin este că este un limbaj modern construit pe JVM, este ușor de învățat, și este distractiv să scrii cod în el ✨.

Din păcate, limbajul nu este încă atât de popular. Sper că în viitor mai mulți oameni vor începe să-l folosească.

Vă permite să vizați mai multe platforme, cum ar fi Android, iOS, Web, Desktop și chiar dispozitive încorporate. Imaginați-vă având expresivitatea Kotlin pe Raspberry Pi. 🤯 sau construind cat 🐈 în Kotlin folosind funcții de programare funcțională și rulându-l ca o aplicație nativă pe mașina dvs. Linux. 🐧

Advent of Code 2023 - Ziua 6
#

Pentru a vă arăta niște cod Kotlin, vă voi împărtăși soluția mea pentru puzzle-ul Advent of Code 2023 Ziua 6. Puzzle-ul este despre o cursă de bărci, se dă o intrare și trebuie să citiți intrarea, să o analizați, apoi să scrieți soluția pentru puzzle.

Intrarea arată astfel:

1
2
Timp:      7  15   30
Distanță:  9  40  200

Pentru a citi intrarea, am creat o clasă de date Race care reprezintă o cursă de bărci, apoi am analizat-o folosind caracteristicile de programare funcțională și lambda-urile din Kotlin.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
data class Race(val raceTime: Long, val distance: Long)

class WaitForIt : Puzzle("2023", "6") {
    private fun getRaceTimesPart1(): List<Race> = inputData.map {
        // Split on spaces, ignore first item, transform tokens to integers
        it.split(Regex("\\s")).drop(1).map { it.trim().toLongOrNull() }.filterNotNull()
    }.zipWithNext().map {
        // Take the zipped lines (since we only have 2) and transform them into races.
        it.first.mapIndexed { index, i -> Race(i, it.second[index]) }
    }.flatten().also {
        println("The input is $it")
    }
    /// ...
}

Acum că am o List<Race>, pot executa logica mea pentru a rezolva prima parte a puzzle-ului:

Generez toate combinațiile posibile de curse și apoi număr numărul de moduri în care recordul a fost bătut.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
/// ...
    override fun partOne() {
        getRaceTimesPart1().map {
            // here we transform a race into a list of all the possible combinations that we can have
            (1..<it.raceTime).count { time -> (it.raceTime - time) * time > it.distance }
        }.reduce { acc, i -> acc * i }.also {
            println("The number of ways the record was beaten $it.")
        }
    }
/// ...

A doua parte a puzzle-ului este similară cu prima, dar intrarea este diferită.

Concluzie
#

Kotlin este un limbaj excelent și aștept cu nerăbdare să-l folosesc mai mult în 2024. Sper că voi folosi Ktor pentru a scrie o parte din codul meu de backend pentru alte aplicații pe care le voi construi.

Sper că v-a plăcut acest articol! 📖

Related

Învățând Limbi Străine cu Memrise
·2 minute
Am cumpărat astăzi un abonament pe viață la Memrise Pro și sunt recunoscător că am putut face asta. Memrise este o aplicație mobilă care îți permite să accesezi o varietate de cursuri. Are și un site web, așa că o poți folosi și din browserul de internet.