(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': data().getTime(),įvykis:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5LHNRP9'); Kodėl "Kotlin" yra nuostabi, bet vis tiek liksite su "Java" - The Codest
The Codest
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Pramonės šakos
    • Fintech ir bankininkystė
    • E-commerce
    • Adtech
    • Sveikatos technologijos
    • Gamyba
    • Logistika
    • Automobiliai
    • IOT
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
Atgal rodyklė GRĮŽTI ATGAL
2022-05-18
Programinės įrangos kūrimas

Kodėl "Kotlin" yra nuostabi, bet vis tiek liksite su "Java

The Codest

Marcin Perlikowski

Vyresnysis "Java" programuotojas

Jei esate "Java" programuotojas, tikėtina, kad turite bent šiek tiek patirties su kitomis programavimo kalbomis. Kai kurie iš mūsų savo programavimo nuotykius pradėjo nuo kitos kalbos, pavyzdžiui, C/C++, JavaScript, C#, Python, o gal net nuo "Pascal" ar "Basic". Tačiau kai kurie pradėjo nuo "Java" ir tiesiog niekada per daug nesigilino į kitas kalbas, nemaloniai prisimindami tą vienintelį kartą, kai reikėjo greitai užkoduoti ką nors iš frontend pusės.

Nepriklausomai nuo to, kokiai grupei priklausote, yra priežastis, dėl kurios liekate su Java. Ir aš jūsų nekaltinu. Ji turi bene labiausiai išvystytą, universalią ir išbaigtą ekosistemą visoje įmonė pasaulis. Kalba turi gražiai pritaikytą galimybių rinkinį, kuris yra tarp per daug ir per mažai. Lėtai, bet nuolat pridedamos naujos funkcijos, todėl kalba dažniausiai atitinka naujausias programavimo pasaulio tendencijas.

Ar žinote Lombokas tačiau? Jei ne, labai rekomenduoju pabandyti. Jei patiks, turiu ką nors, ką galite išbandyti. Visiškai naują kalbą, kuri savo savybėmis lomboką paverčia atgyvena. Ji vadinasi Kotlin.

Kotlin? Turite omenyje "Android" kalbą?

Na taip, bet iš tikrųjų ne

"Kotlin" "Android" sistemoje palaimino pati "Google" ir ji tapo de facto pasirinkta šios platformos kalba. Šiame straipsnyje daugiausia dėmesio skirsiu ne tam, bet "Android" iš tiesų yra ta vieta, kur pirmą kartą susipažinau su "Kotlin".

Mano kolega darbe kūrė programėlę tuometinei projektas, savarankiškai. Tačiau terminai sparčiai artėjo, todėl man buvo pavesta padėti jam jų laikytis. Dabar leiskite man persikelti į tą akimirką. Aaaand... YUCK! Kodėl jis vartoja kažkokią keistą kalbą, kuri skamba kaip kečupo prekės ženklas!? Atrodo siaubingai!

Kodėl prieš kiekvieną funkciją rašoma “fun”? Tarsi aš dar nežinočiau, kas tai yra. Be to, aš jau turiu įdomus su Java bet kokiu atveju. O kur yra grąžinimo tipas? Pabaigoje? Ar jūs išprotėjote? Tai ką, jūs kažką priskiriate funkcijai? Tai neturi jokios prasmės! Viskas atrodo taip Java su papildomais žingsniais! Palaukite, kur yra klasė, kuriai priklauso šis metodas? Kur jį paslėpėte, kečupas skamba, Java imituojanti programavimo kalbos pasiteisinimą? O ne. O ne, ne jūs. AR TAI GLOBALI FUNKCIJA? Štai ir viskas, baigta, skambinu į policiją.

Spoileris: neskambinau teisėsaugai. Patiko man tai ar ne, bet turėjau pakoreguoti savo į Java orientuotą mąstyseną, kad prisitaikyčiau prie kitos kalbos. Tačiau tai nebus taip blogai, tiesa? Tai vis dar JVM kalba, be abejo, tai tiesiog kitokia Java. Gal net su kai kuriomis šauniomis papildomomis funkcijomis? Nenoromis pradėjau dirbti prie projekto.

"Java" su papildomais veiksmais

Jei "Java" tokia puiki, kodėl nėra "Java 2"? Juokas į šalį, Tai, ką aš maniau sau. Tiesiog apsimesiu, kad Kotlin yra Java 2. Nauja sintaksė ir visa kita, bet turiu išmokti tiek, kad galėčiau užbaigti projektą. Vaikeli, oi, vaikeli, aš klydau.

Išbandęs ją vos vieną ar dvi dienas, greitai supratau, kad ir "Kotlin", ir Java nėra tokie elastingi. Mėginant jas sulenkti vieną į kitą, viena iš jų neišvengiamai lūžta per pusę. Tapo akivaizdu, kad Kotlin yra atskiras dalykas, o tai, kad ji veikia JVM, programuotojo požiūriu beveik nieko nereiškia. (Beje, ji taip pat gali persiųsti į JavaScript, arba būti sukompiliuotas į vietinę dvejetainę versiją).

Tada planas B. Tiesą sakant, išmokti kalbą. Pirmą kartą skaitant dokumentus, patyrusiam "Java" programuotojui per nugarą perbėga šiurpuliukai. Pavyzdžiui:
- anksčiau minėtas aukščiausio lygio dar žinomas kaip visuotinis kontekstas.
- pabaigoje nurodyti parametrų ir funkcijų grąžinimo tipai.

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

funkcijos kūnas gali būti išraiška (naudojant lygybės ženklą)

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

if teiginys gali duoti rezultatą

 val y = if (x == 1) {
 "vienas"
 } else if (x == 2) {
 "du"
 } else {
 "kitas"
 }

Gerai, man tiesiog reikės prie to priprasti. Tiesiog kitokia sintaksė. Ką dar galite pasiūlyti, pone Kotlinai?

 value?.method() // įvykdyti, jei ne null

Gerai, atsikratyti jei (value == null), taškas jums. Ką dar turite?

fun check(list: List, alternative: Boolean) = when {
 list is LinkedList -> print("linked")
 alternative -> print("alternative")
 list.size > 50 -> print("big")
 else -> print("other")
 }

Hmm gražus, gali būti patogu išvengti, jei kiti blokai, vis dar atrodo kaip triukas, nors.

 objektas SingularObject: Skaitiklis() {
 var a = 14
 fun test() = if (a > 10) "daugiau" else "mažiau"
 }

Gerai, šis atrodo tikrai naudingas, man patinka! Kita vertus, "Java" taip pat galiu sukurti singletoną. Galbūt jis nebus toks elegantiškas, bet tai tikrai nieko naujo. Ar turite kokių nors tūzų rankovėje? Pavyzdžiui, tikrų sunkiasvorių?

 var s: String = null // nekompilatuoja, ne nulinis tipas

Palaukite... kas?

Milijardo dolerių klaida

Įsivaizduokite kodų bazę, kurioje nereikia rūpintis nuliniu saugumu. Įsivaizduokite, kad laikoma savaime suprantamu dalyku, jog kiekviena nuoroda iš tikrųjų yra kažkas prasmingo. Įsivaizduokite, kad esate tikri, jog visos su nulinėmis nuorodomis susijusios problemos sprendžiamos iš anksto.
Daugiau neįsivaizduokite. Pagal nutylėjimą visos Kotlin nuorodos nėra nulinės. Jei norite, kad jos būtų nulinės, turite sąmoningai priimti tokį sprendimą ir aiškiai nurodyti jį kodas:

 var s: String? = null

Suprantu, kad šiuo metu galite skeptiškai vertinti visą šią idėją. Esate pripratę prie nulinių nuorodų. Kodavimo metu tai įsidėmėjote galvoje. Sužinojote, kur reikia būti atsargiems. Mano mintys būtent tokios. Iš Java, iš pradžių iš tiesų buvo keista. Pavyzdžiui, kokia prasmė? Juk dėl to stebuklingai neišnyks visos susijusios problemos. Man tiesiog reikės visur pridėti “?”, skamba kaip darbas.

Bet aš nusprendžiau pasinerti į kalbą, ar ne? Tegul būna kaip jums, pone Kotlin. Pradėjau stengtis pašalinti kuo daugiau nulinių kintamųjų, laukų ir parametrų. Žingsnis po žingsnio išmokau naudotis kalbos savybėmis, kurios palengvino nulinių nuorodų pašalinimą, pvz., saugaus iškvietimo “?.” operatoriumi, elvis “?:” operatoriumi, deleguotomis savybėmis, “let” metodu ir kt.

Laikui bėgant pavyko pasiekti, kad kai kuriose klasėse būtų tik ne nuliniai laukai ir metodų parametrai. Iš esmės žinojau, kad jei klasė buvo sėkmingai instancuota, galiu beveik pamiršti apie metodų kūnų nulines reikšmes. Tai buvo palaima. Laikui bėgant tai vis labiau vertinau. Tačiau galiausiai negalvojau apie tai kaip apie žudančią funkciją, Java vis dar jautėsi kaip namie. Kol...

Sugrįžimas

Projektas artėjo prie pabaigos. Vis geriau pažinau "Kotlin", o įgijus šių žinių kodas darėsi vis tvarkingesnis, skaitomesnis ir glaustesnis. Patobulinimus plika akimi galėjai pamatyti įrašų istorijoje. Tačiau pagaliau atėjo laikas. Su netikėtai maloniais prisiminimais apie naująją kalbą atėjo laikas atsisveikinti ir grįžti į saldžią komforto zoną Java. Bent jau taip maniau.

Ar pažįstate tą jausmą, kai pradedate vertinti daiktą tą pačią akimirką, kai jo nebėra? Kai nesuvokiate, kaip labai nuo ko nors priklausote, kol nebegalite juo naudotis? Tai buvo pats geriausias šio jausmo pavyzdys, kokį turbūt esu patyręs gyvenime.

Kai grįžau prie kodo rašymo Java, mane beveik išgąsdino kai kurių funkcijų trūkumas. Atrodė, tarsi mano smegenys pasąmoningai, neteisingai Kotlin funkcijas būtų perkėlusios į Java. Patyriau situacijų, kai iš tikrųjų pradėjau ką nors įgyvendinti, kad suprasčiau, jog šioje kalboje tai neveiks. Geriausiu atveju galėčiau ją parašyti kaip Kotlin, bet ji būtų gremėzdiška, neskaitoma ir (arba) reikalautų per daug šablonų.

Nulinė apsauga, žinoma, buvo funkcija, kurios man labiausiai trūko. Tačiau nustebau, kiek daug mažesnių dalykų man tapo savaime suprantami: įvardyti parametrai, savybės vietoj getterių ir setterių, “==” kaip lygybė ir “===” kaip referencinė lygybė, kvalifikuotas “this”, išplėtimo funkcijos, numanomas vienintelis lambda parametras, “_” nenaudojamiems lambda parametrams, duomenys klases, apimties funkcijas, kitas Kotlin stdlib funkcijas, operatorius ir dar daugiau. Ir kaip visa tai gražiai dera tarpusavyje. Palyginimui, Java atrodė... primityvi.

Iš tikrųjų jaučiausi taip blogai, kad ėmiau svarstyti galimybę apskritai pereiti prie “Kotlin”. Teoriškai ji visiškai sąveikauja su “Java”, galima tiesiog pridėti "Kotlin" palaikymą prie esamo projekto ir pradėti rašyti naujas klases. Kotlin pusė žino, kaip "kalbėtis" su Java, o Java pusė net nežino, kad "kalbasi" su kita kalba. O po kompiliavimo į baitkodą JVM iš tikrųjų nedaro jokio skirtumo.

Susipažinkite su "Java" ekspertu

Realybės patikrinimas

Tad ko laukiate? Jei kalba yra tokia gera, kaip sakote, tiesiog ja naudokitės! Tačiau gal ne esamuose projektuose, žinau, kad ji turėtų būti sąveikaujanti, bet taip maišyti dvi skirtingas kalbas skamba negražiai.

Gerai, tad naujiems moduliams - Kotlin. Arba taip? Jūs dirbate komanda. Turite su jais pasitarti ir įtikinti juos šios naujos kalbos didingumu. Ką? Jiems ji nepatinka? Panašu, kad jie tiesiog nenori dėti pastangų jos mokytis. Tačiau negalite jų kaltinti, iš pradžių ir jūs buvote skeptiškas.

Projekto vadovas! Taip! Jis tikrai supras, kokią didelę vertę Kotlin atneštų mūsų team. O, kokia didybė ateis!
-Nuo
-Palaukite, kodėl?
-team to nežino.
-Jie išmoks!
-Jie nenori mokytis.
-Jūs galite juos pasigaminti!
-Jiems nereikia mokytis.
-Tai tiesa, bet pagalvokite apie galimybes!
-Taip, o gal pirmiausia pagalvokite apie problemas?.

Legendoje sakoma, kad egzistuoja projektas. Projektas, kuris yra didelis ir sudėtingas, bet gražiai parašytas kiekvienoje dalyje. Projektas, kuriame visi kūrėjai vieningai kalba apie naudojamus sprendimus. Kur naujos funkcijos tiesiog sklandžiai liejasi iš programuotojų klaviatūrų. Kur klaidos pasitaiko retai ir jas lengva ištaisyti.

Ar esate matę tokį projektą? Nemačiau. Kai kurie buvo artimi, bet dauguma jų yra didelė paveldėto kodo netvarka. O jei ir nėra, greičiausiai kada nors ateityje taps. O dabar įsivaizduokite, kad į šią mišrainę įmaišysite dar vieną kalbą. Ji suteikia naujų būdų daryti klaidas. Ji reikalauja, kad kūrėjai žinotų, ką daro. Tai, švelniai tariant, rizika.

Dabar taip pat atsižvelkite į kūrėjas rotacija. Žmonės ateina ir išeina. Ar priversite kiekvieną naują kūrėją mokytis visiškai naujos kalbos? Ne, tai būtų neproduktyvu. Ar pirmiausia samdysite "Kotlin" kūrėjus? Sėkmės, nes pasamdyti gerą "Java" programuotoją pakankamai sunku.

Žmonės bandė. Turiu pasakyti, kad nesutinku su daugeliu tame straipsnyje pateiktų kaltinimų. Ten yra pagrįstos kritikos, bet manau, kad jie nenaudojo Kotlin pakankamai, kad iš tikrųjų suprastų “Kotlin būdą”. Panašu, kad daugelis komentatorių po tuo straipsniu mano panašiai.

Tačiau tai nesvarbu. Galiu lažintis, kad taip nutiktų ir jūsų projekte. “Išbandžiau, nepatiko”. Jų nepriversite tam skirti daugiau laiko. Nepriversite jų pabandyti dar kartą. Nepriversite jų suteikti jam dar vieną šansą. Ir praktiniu požiūriu jie gali būti teisūs. Java yra toks populiarus, kad bet ko kito naudojimas JVM atrodo nereikalingas.

Kodėl šis straipsnis?

Ką tik praleidote nemažai laiko rašydami straipsnį, kuris, atrodo, neturi prasmės. Kodėl turėčiau bandyti mokytis kalbos, jei sakote, kad tai vis tiek beprasmiška?

Nemanau, kad tai beprasmiška. Vis dar manau, kad "Kotlin" yra puiki. Aš vis dar noriu ją naudoti (ir iš tikrųjų ją naudoju savo privačiuose projektuose). Jei galėčiau, tiesiog pereičiau prie jos ir pamirščiau "Java" apribojimus. Tačiau dabartinė realybė sako, kad negaliu. Ir aš noriu pabandyti tai pakeisti.

Mano ketinimas jums, gerbiamas skaitytojau, yra bent jau apsvarstyti galimybę išeiti iš jaukios "Java" komforto zonos. Nes galbūt, tik galbūt, jums Kotlin patiks taip pat, kaip ir man. O jei taip, tai dar vienas Kotlin išmanantis kūrėjas rinka.

Skaityti daugiau:

Geriausias "Java" projektų tipas

3 dažniausiai pasitaikantys programinės įrangos produktų kūrimo iššūkiai pradedančiosioms įmonėms

Tinkamas būdas rasti geriausius "Java" programuotojus

Susiję straipsniai

Išmaniojo telefono sveikatos priežiūros programėlės su širdies piktograma ir kylančia sveikatos diagrama, pažymėtos The Codest logotipu, iliustracija, vaizduojanti skaitmeninės sveikatos ir sveikatos technologijų sprendimus.
Programinės įrangos kūrimas

Sveikatos priežiūros programinė įranga: Sveikatos priežiūros paslaugos: tipai, naudojimo atvejai

Įrankiai, kuriais šiandien naudojasi sveikatos priežiūros organizacijos, nė iš tolo neprimena prieš kelis dešimtmečius naudotų popierinių kortelių. sveikatos priežiūros programinė įranga dabar padeda sveikatos sistemoms, pacientų priežiūrai ir šiuolaikiniam sveikatos priežiūros paslaugų teikimui klinikinėse ir...

GERIAUSIAS
Abstrakti mažėjančios stulpelinės diagramos su kylančia rodykle ir auksine moneta, simbolizuojančia ekonomiškumą arba taupymą, iliustracija. Viršutiniame kairiajame viršutiniame kampe pavaizduotas The Codest logotipas ir šūkis "In Code We Trust" šviesiai pilkame fone.
Programinės įrangos kūrimas

Kaip padidinti savo Dev komandą neprarandant produkto kokybės

Didinate savo kūrėjų komandą? Sužinokite, kaip augti neprarandant produkto kokybės. Šiame vadove aptariami ženklai, kad atėjo laikas didinti komandą, komandos struktūra, įdarbinimas, vadovavimas ir įrankiai - ir kaip The Codest gali...

GERIAUSIAS
Programinės įrangos kūrimas

Sukurkite ateičiai atsparias žiniatinklio programas: The Codest ekspertų komandos įžvalgos

Sužinokite, kaip The Codest puikiai kuria keičiamo dydžio interaktyvias žiniatinklio programas, naudodama pažangiausias technologijas ir užtikrindama vientisą naudotojų patirtį visose platformose. Sužinokite, kaip mūsų patirtis skatina skaitmeninę transformaciją ir verslo...

GERIAUSIAS
Programinės įrangos kūrimas

10 geriausių Latvijoje įsikūrusių programinės įrangos kūrimo įmonių

Naujausiame mūsų straipsnyje sužinokite apie geriausias Latvijos programinės įrangos kūrimo įmones ir jų inovatyvius sprendimus. Sužinokite, kaip šie technologijų lyderiai gali padėti pakelti jūsų verslo lygį.

thecodest
Įmonių ir didinimo sprendimai

"Java" programinės įrangos kūrimo pagrindai: A Guide to outsourcing Outsourcing Successfully

Išnagrinėkite šį esminį vadovą, kaip sėkmingai outsourcing "Java" programinę įrangą kurti, kad padidintumėte efektyvumą, įgytumėte patirties ir sėkmingai įgyvendintumėte projektus su The Codest.

thecodest

Prenumeruokite mūsų žinių bazę ir būkite nuolat informuoti apie IT sektoriaus patirtį.

    Apie mus

    The Codest - tarptautinė programinės įrangos kūrimo bendrovė, turinti technologijų centrus Lenkijoje.

    Jungtinė Karalystė - būstinė

    • 303B biuras, 182-184 High Street North E6 2JA
      Londonas, Anglija

    Lenkija - vietiniai technologijų centrai

    • Fabryczna biurų parkas, Aleja
      Pokoju 18, 31-564 Krokuva
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšuva, Lenkija

    The Codest

    • Pagrindinis
    • Apie mus
    • Paslaugos
    • Case Studies
    • Sužinokite, kaip
    • Karjera
    • Žodynas

    Paslaugos

    • Patariamoji tarnyba
    • Programinės įrangos kūrimas
    • Galinės dalies kūrimas
    • Priekinės dalies kūrimas
    • Staff Augmentation
    • Atgalinės versijos kūrėjai
    • Debesų inžinieriai
    • Duomenų inžinieriai
    • Kita
    • QA inžinieriai

    Ištekliai

    • Faktai ir mitai apie bendradarbiavimą su išoriniu programinės įrangos kūrimo partneriu
    • Iš JAV į Europą: Kodėl Amerikos startuoliai nusprendžia persikelti į Europą?
    • Technikos plėtros centrų užsienyje palyginimas: Tech Offshore Europa (Lenkija), ASEAN (Filipinai), Eurazija (Turkija)
    • Kokie yra svarbiausi CTO ir CIO iššūkiai?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Autorinės teisės © 2026 The Codest. Visos teisės saugomos.

    lt_LTLithuanian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech lvLatvian is_ISIcelandic lt_LTLithuanian