window.pipedriveLeadboosterConfig = { base: leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster on juba olemas') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Miks Kotlin on vinge, aga sa jääd ikkagi Java juurde - The Codest
The Codest
  • Meie kohta
  • Teenused
    • Tarkvaraarendus
      • Frontend arendus
      • Backend arendus
    • Staff Augmentation
      • Frontend arendajad
      • Backend arendajad
      • Andmeinsenerid
      • Pilveinsenerid
      • QA insenerid
      • Muud
    • See nõuandev
      • Audit ja nõustamine
  • Tööstusharud
    • Fintech & pangandus
    • E-commerce
    • Adtech
    • Healthtech
    • Tootmine
    • Logistika
    • Autotööstus
    • IOT
  • Väärtus
    • CEO
    • CTO
    • Tarnejuht
  • Meie meeskond
  • Case Studies
  • Tea kuidas
    • Blogi
    • Kohtumised
    • Veebiseminarid
    • Ressursid
Karjäärivõimalused Võtke ühendust
  • Meie kohta
  • Teenused
    • Tarkvaraarendus
      • Frontend arendus
      • Backend arendus
    • Staff Augmentation
      • Frontend arendajad
      • Backend arendajad
      • Andmeinsenerid
      • Pilveinsenerid
      • QA insenerid
      • Muud
    • See nõuandev
      • Audit ja nõustamine
  • Väärtus
    • CEO
    • CTO
    • Tarnejuht
  • Meie meeskond
  • Case Studies
  • Tea kuidas
    • Blogi
    • Kohtumised
    • Veebiseminarid
    • Ressursid
Karjäärivõimalused Võtke ühendust
Tagasi nool TAGASI
2022-05-18
Tarkvaraarendus

Miks Kotlin on vinge, aga sa jääd ikkagi Java juurde

The Codest

Marcin Perlikowski

Vanem Java arendaja

Kui te olete Java-arendaja, on teil tõenäoliselt vähemalt mõningane kogemus teiste programmeerimiskeeltega. Mõned meist alustasid oma programmeerimisseiklust mõne muu keelega, nagu C/C++, JavaScript, C#, Python või võib-olla isegi midagi sellist nagu Pascal või Basic. Mõned aga alustasid Java'ga ja lihtsalt ei pööranud teistele keeltele kunagi liiga palju tähelepanu, mäletades ebameeldivalt seda ühte korda, kui neil oli vaja kiiresti midagi frontendipoolselt kodeerida.

Sõltumata sellest, millisesse gruppi te kuulute, on põhjus, miks te jääte koos Java. Ja ma ei süüdista teid. Sellel on vaieldamatult kõige arenenum, universaalsem ja täielikum ökosüsteem kogu maailma ettevõte maailma. Sellel keelel on kenasti kohandatud võimalused, mis on kuskil õiges vahemikus liiga palju ja liiga vähe. Ja uusi funktsioone lisatakse aeglaselt, kuid järjekindlalt, hoides seda enamasti kursis uuemate suundumustega programmeerimismaailmas.

Kas te teate Lombok aga? Kui te seda ei tee, siis soovitan väga proovida. Kui teile meeldib, siis on mul midagi just teie jaoks, mida proovida. Täiesti uus keel, mis oma omaduste poolest muudab Lomboki iganenuks. Selle nimi on Kotlin.

Kotlin? Sa mõtled Androidi keelt?

Noh jah, aga tegelikult ei

Google ise õnnistas Kotlini Androidi puhul nii palju, et sellest sai platvormi de facto keel. Selles artiklis ei keskendu ma sellele, kuid Android on tõepoolest koht, kus ma esimest korda Kotliniga kohtusin.

Minu töökaaslane arendas rakendust, mis oli tollase praeguse projekt, omal käel. Tähtajad lähenesid aga kiiresti, nii et mulle anti ülesanne aidata tal neid täita. Lubage mul end nüüd ajas tagasi viia sellesse hetke. Aaaa ja... YUCK! Miks ta kasutab mingit imelikku keelt, mis kõlab nagu ketšupi brändi!? See näeb kohutav välja!

Miks on iga funktsiooni ette kirjutatud "fun"? Nagu ma juba ei teaks, mis see on. Samuti on mul juba lõbus koos Java igatahes. Ja kus on tagastustüüp? Lõpus? Oled sa hullu? Mis see on, kas sa määrad midagi funktsioonile? Sellel pole mingit mõtet! See kõik näeb lihtsalt välja nagu Java koos täiendavate sammudega! Oodake, kuhu see meetod kuulub? Kuhu sa selle peitsid sa ketsupi-häälne, Java imiteeriv vabandus programmeerimiskeele kohta? Oh ei. Oh ei, sa ei teinud seda. ON SEE GLOBAALNE FUNKTSIOON? See on kõik, ma olen valmis, ma helistan politseisse.

Spoiler hoiatus: ma ei helistanud õiguskaitseorganitele. Kas see meeldis mulle või mitte, pidin oma Java-keskset mõtteviisi kohandama, et kohaneda teise keelega. See ei ole siiski nii halb, eks? See on ikkagi JVM keel, kindlasti on see lihtsalt teistsugune Java. Võib-olla isegi mõne laheda lisafunktsiooniga? Vastumeelselt hakkasin projekti kallal töötama.

Java koos täiendavate sammudega

Kui Java on nii suurepärane, miks ei ole siis Java 2? Nalja kõrvale jättes mõtlesin ma seda endale. Ma lihtsalt teesklen, et Kotlin on Java 2. Uus süntaks ja kõik, aga ma pean seda lihtsalt piisavalt ära õppima, et projekt lõpetada. Boy oh boy oli ma eksinud.

Pärast paari päeva pikkust proovimist sain kiiresti aru, et nii Kotlin kui ka Java ei ole nii elastsed. Kui püüda neid üksteise poole painutada, lõpeb see paratamatult sellega, et üks neist murdub pooleks. Selgus, et Kotlin on omaette asi ja see, et see töötab JVMil, ei tähenda programmeerija seisukohast peaaegu täpselt midagi. (Kõrvalmärkusena võib see ka transpileerida JavaScript, või kompileerida algupäraseks binaarseks versiooniks).

Plaan B siis. Tegelikult tuleb õppida keelt tundma. Dokumendi esmakordne lugemine ajab kogenud Java-programmeerijal külmavärinaid läbi selgroo. Näiteks:
- eelnevalt mainitud ülevalpoolne ehk globaalne kontekst
- parameetrite ja funktsioonide tagastamistüübid, mis on määratud lõpus

fun sum(a: Int, b: Int): Int {
   return a + b
}

funktsiooni keha võib olla väljendus (kasutades võrdsuse märki)

 fun sum(a: Int, b: Int) = a + b

if avaldis võib anda tulemuse

 val y = if (x == 1) {
 "one"
 } else if (x == 2) {
 "two"
 } else {
 "other"
 }

Okei, ma pean lihtsalt sellega harjuma. Lihtsalt teistsugune süntaks. Mida teil veel pakkuda on, mister Kotlin?

 value?.method() // execute if not null

Oh ok, vabanemine if (value == null), punkt teile. Mis sul veel on?

fun check(list: List, alternative: Boolean) = when {
 list on LinkedList -> print("lingitud")
 alternatiiv -> print("alternatiiv")
 list.size > 50 -> print("big")
 else -> print("muu")
 }

Hmm kena, võiks olla mugav vältida, kui teised blokeerivad, tundub siiski nagu trikk.

 objekt SingularObject: Counter() {
 var a = 14
 fun test() = if (a > 10) "rohkem" else "vähem"
 }

Ok, see tundub tegelikult kasulik, mulle meeldib! Teisest küljest, ma võin luua singletoni ka Java's. Võib-olla ei ole see nii elegantne, aga see ei ole midagi väga uut. On sul mingeid ässasid varrukas? Nagu tõelised heavy hitterid?

 var s: String = null // ei kompileeru, mitte-null tüüp

Oota... mida?

Miljardi dollari viga

Kujutage ette koodibaasi, kus te ei pea muretsema nullturvalisuse pärast. Kujutage ette, et iga viide sisaldab tegelikult midagi mõttekat. Kujutage ette, et olete kindel, et iga nulliga seotud probleem on eelnevalt lahendatud.
Kujutage ette, et enam ei ole. Kõik viited Kotlinis ei ole vaikimisi nullitavad. Kui te soovite neid nullitavaks muuta, peate te teadlikult teha see otsus ja selgesõnaliselt märkida see kood:

 var s: String? = null

Ma saan aru, et te võite praegu olla skeptiline kogu selle idee suhtes. Te olete harjunud nulliga viidetega. Sa hoiad seda kodeerimise ajal tagantjärele meeles. Sa oled õppinud, kus sa pead olema ettevaatlik. Täpselt minu mõtted. Tulevad Java, alguses tundus see tõepoolest imelik. Nagu, mis mõte on? See ei kaota maagiliselt kõiki sellega seotud probleeme. Ma pean lihtsalt igal pool lisama "?", kõlab nagu töö.

Aga ma otsustasin ju sügavale keelde sukelduda? Olgu see siis sinu moodi, mister Kotlin. Hakkasin tegema jõupingutusi, et kõrvaldada nii palju nullitav muutujaid, välju ja parameetreid kui võimalik. Samm-sammult õppisin kasutama keele omadusi, mis lihtsustasid nullitavate viidete kõrvaldamist, nt safe call "?." operaator, elvis "?:" operaator, delegeeritud omadused, "let" meetod ja palju muud.

Aja möödudes õnnestus mul saada mõned klassid sisaldama ainult mitte-null välju ja meetodi parameetreid. Põhimõtteliselt teadsin, et kui klass on edukalt instantseeritud, võin peaaegu unustada nullitavuse meetodite kehades. See oli õndsus. Aja jooksul hindasin seda üha enam ja enam. Lõppkokkuvõttes ei pidanud ma seda siiski tapjafunktsiooniks, Java tundus ikka veel nagu kodus. Kuni...

Tagasitulek

Projekt lähenes lõpule. Ma õppisin Kotlini üha paremini tundma ja nende teadmistega muutus kood üha korrastatumaks, loetavamaks ja ülevaatlikumaks. Parandusi võis palja silmaga näha commit history's. Lõpuks jõudis aga kätte see aeg. Ootamatult armsate mälestustega uuest keelest oli aeg hüvasti jätta ja minna tagasi magusasse mugavustsooni Java. Või nii ma arvasin.

Kas tunnete seda tunnet, kui hakkate midagi hindama just sel hetkel, kui see on kadunud? Kui sa ei saa aru, kui palju sa millestki sõltud, kuni sa ei saa seda enam kasutada? See oli kõige parem näide sellest tundest, mida ma ilmselt kunagi elus kogenud olen.

Kui ma sain tagasi koodi kirjutamise juurde Java, ma olin peaaegu hirmunud mõnede funktsioonide puudumise pärast. See oli nagu mu aju oleks alateadlikult, valesti tagantjärele Kotlini funktsioone Java'sse paigaldanud. Ma kogesin olukordi, kus ma tegelikult hakkasin midagi rakendama, ainult selleks, et aru saada, et see ei tööta selles keeles. Parimal juhul saaksin selle Kotlini moodi kirjutada, kuid see oleks mahukas, loetamatu ja/või nõuaks liiga palju boilerplate'i.

Nullturvalisus oli muidugi see funktsioon, mida ma kõige rohkem igatsesin. Aga ma olin üllatunud, kui palju väiksemaid asju muutus minu jaoks loomulikuks: nimeparameetrid, omadused getterite ja setterite asemel, "==" kui võrdsus ja "===" kui referentsiaalne võrdsus, kvalifitseeritud "this", laiendamisfunktsioonid, implicit singular lambda parameeter, "_" kasutamata lambda parameetrite jaoks, andmeklassid, scope funktsioonid, muud Kotlini stdlib funktsioonid, operaatorid ja palju muud. Ja kuidas see kõik kenasti kokku sobib. Võrreldes sellega tundus Java... primitiivne.

See tundus tegelikult nii halb, et hakkasin kaaluma Kotlinile üleminekut üldse. Teoreetiliselt on see Java'ga täielikult koostalitlusvõimeline, saab lihtsalt Kotlini toe olemasolevasse projekti lisada ja hakata uusi klasse kirjutama. Kotlini pool oskab Java'ga "rääkida" ja Java pool ei tea isegi, et ta "räägib" teise keelega. Ja pärast bytecode'iks kompileerimist ei tee see JVMile tegelikult mingit vahet.

Tutvuge Java eksperdiga

Reaalsuse kontroll

Mida te siis ootate? Kui keel on nii hea, kui te ütlete, siis kasutage seda! Võib-olla mitte olemasolevates projektides küll, ma tean, et see peaks olema koostalitlusvõimeline, aga kahe erineva keele segamine niimoodi kõlab koledal kombel.

Ok, nii et uute moodulite jaoks - Kotlin see on. Või on see? Te töötate meeskond. Te peate nendega konsulteerima ja neid veenma selle uue keele suursugususes. Mida? See ei meeldi neile? Kõlab nii, et nad lihtsalt ei taha selle õppimiseks vaeva näha. Sa ei saa neid küll süüdistada, ka sina olid alguses skeptiline.

Projektijuht! Jah! Ta mõistab kindlasti, kui suurt väärtust Kotlin meie meeskonnale annab. Oh, milline suursugusus tuleb!
-No
-Oota, miks?
-Meeskond ei tea seda.
-Nad õpivad!
-Nad ei taha õppida.
-Te saate neid teha!
-Nad ei pea õppima.
-See on küll tõsi, aga mõtle võimaluste peale!
-Ja, mis siis, kui sa mõtled kõigepealt probleemidele.

Legend ütleb, et on olemas projekt. Projekt, mis on suur ja keeruline, kuid igas osas kenasti kirjutatud. Projekt, kus kõik arendajad on kasutatud lahenduste osas ühel meelel. Kus uued funktsionaalsused lihtsalt voolavad sujuvalt programmeerijate klaviatuurilt. Kus vigu on harva ja neid on lihtne parandada.

Kas olete näinud sellist projekti? Ma ei ole. Mõni oli küll lähedal, kuid enamik neist on suur pärandkoodi segadus. Ja kui nad seda ei ole, siis tõenäoliselt muutuvad nad selleks mingil hetkel tulevikus. Nüüd kujutage ette, et visake sinna juurde veel üks keel. See toob kaasa uusi võimalusi vigade tegemiseks. See nõuab, et arendajad teaksid, mida nad teevad. See on pehmelt öeldes risk.

Nüüd kaaluge ka arendajate rotatsiooni. Inimesed tulevad ja lähevad. Kas te panete iga uue arendaja õppima täiesti uut keelt? Ei, see on ebaproduktiivne. Kas te võtate Kotlini arendajaid üldse tööle? Palju õnne sellega, hea Java arendaja palkamine on piisavalt raske.

Inimesed on proovinud. Pean ütlema, et ma ei nõustu enamiku selles artiklis esitatud väidetega. Seal on mõningast põhjendatud kriitikat, kuid ma arvan, et nad ei kasutanud Kotlini piisavalt, et tegelikult mõista "Kotlini viisi". Paljud kommenteerijad selle artikli all näivad arvavat sarnaselt.

See ei ole siiski oluline. Vean kihla, et see juhtuks ka teie projektis. "Proovitud, ei meeldinud". Sa ei pane neid rohkem aega kulutama. Sa ei pane neid uuesti proovima. Te ei pane neid andma sellele veel üht võimalust. Ja praktilisest vaatenurgast vaadatuna võib neil olla õigus. Java on lihtsalt nii populaarne, et millegi muu kasutamine JVMis tundub üleliigne.

Miks siis see artikkel?

Sa kulutasid just märkimisväärse aja artikli kirjutamisele, millel ei tundu olevat mõtet. Miks ma peaksin proovima keelt õppida, kui te ütlete, et see on niikuinii mõttetu?

Noh, ma ei arva, et see on mõttetu. Ma arvan endiselt, et Kotlin on suurepärane. Ma tahan seda ikka veel tegelikult kasutada (ja ma tegelikult kasutan seda oma eraprojektide jaoks). Kui ma saaksin, siis ma lihtsalt läheksin sellele üle ja unustaksin Java piirangud. Aga praegune reaalsus ütleb, et ma ei saa. Ja ma tahan proovida seda muuta.

Minu kavatsus teile, lugupeetud lugeja, on vähemalt kaaluda võimalust tulla välja mugavast Java mugavustsoonist. Sest võib-olla, ainult võib-olla, armastad Kotlini sama palju kui mina. Ja kui te armastate, siis on veel üks Kotlini tundev arendaja rohkem. turg.

Loe edasi:

Parim projektitüüp Java jaoks

3 ühist väljakutset tarkvara tootearenduse alustavatele ettevõtetele

Õige viis tipp Java arendajate leidmiseks

Seotud artiklid

Tarkvaraarendus

Tulevikukindlate veebirakenduste loomine: The Codest ekspertide meeskonna ülevaade

Avastage, kuidas The Codest paistab skaleeritavate, interaktiivsete veebirakenduste loomisel silma tipptehnoloogiatega, mis pakuvad sujuvat kasutajakogemust kõigil platvormidel. Saate teada, kuidas meie eksperditeadmised aitavad kaasa digitaalsele ümberkujundamisele ja äritegevusele...

THECODEST
Tarkvaraarendus

Top 10 Lätis asuvat tarkvaraarendusettevõtet

Tutvu Läti parimate tarkvaraarendusettevõtete ja nende innovaatiliste lahendustega meie viimases artiklis. Avastage, kuidas need tehnoloogiajuhid saavad aidata teie äri edendada.

thecodest
Enterprise & Scaleups lahendused

Java tarkvaraarenduse põhitõed: A Guide to Outsourcing Successfully

Tutvuge selle olulise juhendiga, kuidas edukalt outsourcing Java tarkvara arendada, et suurendada tõhusust, pääseda ligi eksperditeadmistele ja edendada projekti edu The Codest abil.

thecodest
Tarkvaraarendus

Ülim juhend Poola allhanke kohta

outsourcing kasv Poolas on tingitud majanduslikust, hariduslikust ja tehnoloogilisest arengust, mis soodustab IT kasvu ja ettevõtlussõbralikku kliimat.

TheCodest
Enterprise & Scaleups lahendused

Täielik juhend IT-auditi vahendite ja tehnikate kohta

IT-auditid tagavad turvalised, tõhusad ja nõuetele vastavad süsteemid. Lisateavet nende tähtsuse kohta leiate kogu artiklist.

The Codest
Jakub Jakubowicz CTO & kaasasutajad

Tellige meie teadmistebaas ja jääge kursis IT-sektori eksperditeadmistega.

    Meie kohta

    The Codest - rahvusvaheline tarkvaraarendusettevõte, mille tehnoloogiakeskused asuvad Poolas.

    Ühendkuningriik - peakorter

    • Büroo 303B, 182-184 High Street North E6 2JA
      London, Inglismaa

    Poola - kohalikud tehnoloogiakeskused

    • Fabryczna büroopark, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Varssavi, Poola

      The Codest

    • Kodu
    • Meie kohta
    • Teenused
    • Case Studies
    • Tea kuidas
    • Karjäärivõimalused
    • Sõnastik

      Teenused

    • See nõuandev
    • Tarkvaraarendus
    • Backend arendus
    • Frontend arendus
    • Staff Augmentation
    • Backend arendajad
    • Pilveinsenerid
    • Andmeinsenerid
    • Muud
    • QA insenerid

      Ressursid

    • Faktid ja müüdid koostööst välise tarkvaraarenduspartneriga
    • USAst Euroopasse: Miks otsustavad Ameerika idufirmad Euroopasse ümber asuda?
    • Tech Offshore arenduskeskuste võrdlus: Euroopa (Poola), ASEAN (Filipiinid), Euraasia (Türgi).
    • Millised on CTO ja CIOde peamised väljakutsed?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Copyright © 2025 by The Codest. Kõik õigused kaitstud.

    etEstonian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch elGreek etEstonian