Af hverju Kotlin er frábært, en þú munt samt sem áður nota Java
Marcin Perlikowski
Æðsti Java-forritari
Ef þú ert Java-þróunaraðili, er líklegt að þú hafir að minnsta kosti einhverja reynslu af öðrum forritunarmálum. Sumir okkar hófu forritunarævintýrið sitt með öðru forritunarmáli eins og C/C++, JavaScript, C#, Python eða jafnvel eitthvað eins og Pascal eða Basic. Sumir byrjuðu hins vegar með Java og hafa einfaldlega ekki veitt öðrum forritunarmálum mikla athygli, með óþægilegri minningu um eina tiltekna atburðarás þegar þeir þurftu að kóða eitthvað fljótt á fronthliðinni.
Hér er tómt.
Óháð því í hvaða hóp þú tilheyrir, er ástæða fyrir því að þú dvelur hjá Java. Og ég kenni þér ekki um. Það hefur ef til vill mest þróaða, alhliða og fullkomnustu vistkerfið í heild fyrirtæki heims. Forritunarmálið hefur vel sniðið safn af möguleikum, einhvers staðar í réttri sviði milli of mikils og of lítils. Og nýir eiginleikar eru smám saman en stöðugt bættir við, sem heldur því að mestu uppfærðu með nýjustu straumum í forritunarheiminum.
Veit þú Lombok En hvað ef þú gerir það ekki? Ef þú gerir það ekki, mæli ég eindregið með að þú prófir. Ef þér líkar það, þá hef ég eitthvað sérstaklega fyrir þig til að prófa. Alveg nýtt forritunarmál sem, með eiginleikum sínum, gerir Lombok úrelt. Það heitir Kotlin.
Kotlin? Þú meinar Android-málið?
Kotlin á Android hlaut blessun Google sjálfs og varð de-facto forritunarmál vettvangsins. Þetta er ekki það sem ég mun einbeita mér að í þessari grein, en Android er sannarlega sá staður þar sem ég hitti Kotlin í fyrsta sinn.
Vinnufélagi minn var að þróa forrit fyrir þáverandi núverandi verkefni, sjálfur. En skilafrestirnir nálguðust hratt, svo mér var falið að hjálpa honum að standa við þá. Leyfðu mér nú að færa mig aftur til þess augnabliks. Aaaand… JÆJA! Hvers vegna er hann að nota einhvern undarlegt tungumál sem hljómar eins og a kechupvörumerki!? Það lítur hræðilega út!
Hvers vegna er “fun” skrifað fyrir framan hverja fall? Eins og ég viti ekki nú þegar hvað það er. Einnig er ég nú þegar að hafa skemmtilegur með Java Allavega. Og hvar er skilartegian? Í lokin? Ertu klikkaður? Hvað er þetta, ertu að úthluta einhverju í fall? Þetta er algjörlega út í hött! Þetta lítur allt bara út eins og Java með aukaskrefum! Bíddu, hvar er flokkurinn sem þessi aðferð tilheyrir? Hvar faldistu hann, þú sem hljómar eins og ketchup, Java hermdi forritunarmáls? Ó nei. Ó nei, þú gerðir það ekki. ER ÞETTA GLÓBALT STARF? Það er nóg komið, ég er búinn, ég hringi í lögregluna.
Viðvörun: Ég hringdi ekki á lögregluna. Hvort sem mér líkaði það betur eða verr þurfti ég að aðlaga Java-miðaða hugsunarháttinn minn til að taka við öðru forritunarmáli. En það verður samt ekki svo slæmt, er það ekki? Það er samt enn JVM-mál, vissulega er það bara annað Java. Kannski jafnvel með nokkrum flottum viðbótareiginleikum? Ég byrjaði tregt að vinna að verkefninu.
Java með aukaskrefum
Ef Java er svo frábært, af hverju er þá ekki Java 2? Grínilega séð, það var það sem ég hugsaði mér. Ég ætla bara að láta eins og Kotlin sé Java 2. Nýtt málfar og allt, en ég þarf bara að læra nóg til að klára verkefnið. Ó, hvað ég hafði rangt fyrir mér.
Eftir að hafa prófað það í aðeins einn eða tvo daga áttaði ég mig fljótt á því að bæði Kotlin og Java eru ekki teygjanleg. Að reyna að beygja þau að hvoru öðru endar óhjákvæmilega með því að eitt þeirra brotnar í tvennt. Það varð augljóst að Kotlin er sjálfstæð eining, og sú staðreynd að það keyrir á JVM þýðir nánast ekkert frá sjónarhóli forritara. (Auk þess getur það einnig þýðst í JavaScript, eða samþætt í innfæddan tvíbuta).
Áætlun B þá. Reyndar, kynnstu forritunarmálinu. Að lesa skjölin í fyrsta sinn sendir hroll um hrygginn á reyndum Java-forritara. Til dæmis: – áður nefndur efsta stig, þ.e. alþjóðlegur samhengi – gerðir breyta og gildisendunar fallagerða tilgreindar í lokin
fun sum(a: Int, b: Int): Int {
return a + b
}Hljóðskrift
Funktsjónar líkami getur verið tjáning (með jafnmerki)
val y = if (x == 1) {
"one"
} else if (x == 2) {
"two"
} else {
"other"
}Hljóðskrift
Ok, ég þarf bara að venjast þessu. Bara önnur setningagerð. Hvað annað hefurðu upp á að bjóða, herra Kotlin?
value?.method() // framkvæma ef ekki nullHljóðskrift
Ókei, að losna við Ef gildið er null, eitt stig fyrir þig. Hvað meira hefurðu?
```
fun check(list: List, alternative: Boolean) = when {
list is LinkedList -> print("linked")
alternative -> print("alternative")
list.size > 50 -> print("big")
else -> print("other")
}
```Hljóðskrift
Hmm, flott, gæti verið gagnlegt til að forðast if-else-blokkir, en það virðist samt vera smá gervi.
class SingularObject: Counter() {
var a = 14
fun test() = if (a > 10) "more" else "less"
}Hljóðskrift
Ok, þetta lítur virkilega gagnlegt út, mér líkar það! Á hinn bóginn get ég líka búið til singleton í Java. Kannski verður það ekki eins fágað, en það er ekkert nýtt í raun. Áttu eitthvað ess í erminni? Svona alvöru stórskotalið?
var s: String = null // ekki samhæft, ekki-null-gerðHljóðskrift
Ímyndaðu þér kóðagrunn þar sem þú þarft ekki að hafa áhyggjur af null-öryggi. Ímyndaðu þér að taka það sem sjálfsögðum hlut að hver tilvísun innihaldi í raun eitthvað merkingarbært. Ímyndaðu þér að vera viss um að öll null-tengd vandamál hafi verið leyst fyrirfram. Ímyndaðu þér ekki meira. Öll tilvísanir í Kotlin eru ekki nullanlegar sjálfgefið. Ef þú vilt gera þær nullanlegar, verður þú að meðvitað taka þá ákvörðun og skýrt segja það í kóði:
var s: String? = null
Hljóðskrift
Ég skil að þú gætir verið tortrygginn á alla hugmyndina á þessum tímapunkti. Þú ert vanur nullable-tilvísunum. Þú hefur það í huga þegar þú kóðar. Þú lærðir hvar þú þarft að vera varkár. Nákvæmlega mínar hugsanir. Frá Java, það fannst mér í raun skrítið í fyrstu. Eins og, hvað er tilgangurinn? Það ætlar ekki að láta öll tengd vandamál hverfa með töfrum. Ég þarf bara að bæta “?” alls staðar, það hljómar eins og leiðinlegt verk.
En ég ákvað að kafa djúpt í tungumálið, ekki satt? Skulum gera það á þinn hátt, herra. Kotlin. Ég byrjaði að leggja mig fram um að útrýma eins mörgum null-gildum og mögulegt var. Skref fyrir skref lærði ég að nota tungumálseiginleika sem gerðu það auðveldara að útrýma null-tilvísunum, t.d. örugga köllun (“?.”), elvis-skilyrði (“?:”), umboðseiginleika, “let”-aðferð og fleira.
Með tímanum tókst mér að gera nokkur flokkar eingöngu með reiti og aðferðaparametra sem aldrei gátu verið null. Í grundvallaratriðum vissi ég að ef flokkur var vel instansaður gat ég nánast gleymt null-möguleikum í aðferðarkóðunum. Það var hreinn unaður. Með tímanum gerði ég mér sífellt meiri grein fyrir þessu. Að lokum taldi ég það þó ekki vera banvæna eiginleika., Java Fannst enn eins og heima. Þangað til…
Koma aftur
Verkefnið var að nálgast lokin. Ég kynntist Kotlin sífellt betur og með þeirri þekkingu varð kóðinn sífellt snyrtilegri, læsilegri og hnitmiðaðri. Maður sá framfarirnar berum augum í commit-sögunni. En tíminn er loksins kominn. Með óvænt jákvæðum minningum um nýja forritunarmálið var kominn tími til að kveðja og snúa aftur í sætu þægindasvæðið Java. Eða svo hélt ég.
Þekkirðu þá tilfinningu þegar þú byrjar að meta eitthvað akkúrat á þeim augnabliki sem það hverfur? Þegar þú áttar þig ekki á því hversu mikið þú treystir á eitthvað fyrr en þú getur ekki notað það lengur? Þetta var besta dæmið um þá tilfinningu sem ég hef líklega nokkurn tíma upplifað í lífi mínu.
Þegar ég kom aftur að því að skrifa kóðann í Java, Ég var næstum því hræddur við skort á ákveðnum eiginleikum. Það var eins og heilinn minn, undirvitundarlega, hefði ranglega bætt Kotlin-eiginleikum inn í Java. Ég lenti í aðstæðum þar sem ég byrjaði að innleiða eitthvað, aðeins til að átta mig á því að það myndi ekki virka í þessu forritunarmáli. Í besta falli gat ég skrifað það á Kotlin-líkan hátt, en það var klunnalegt, ólesanlegt og/eða krafðist of mikils upphitunarkóða.
Null-öryggi var auðvitað sú eiginleiki sem ég saknaði mest. En ég var hissa á hversu margir smærri hlutir urðu mér eðlilegir: nafnkenndir breytur, eiginleikar í stað getta og setta, “==” sem jafnmerki og “===” sem tilvísunarsamkvæmni, skýr “this”, viðbótarfall, óbeinn einstaklingsbundinn lambda-parametri, “_” fyrir ónotaða lambda-parametra, gögn Flokkar, sviðsfall, önnur Kotlin-staðalbókasafnsfall, rekstraraðgerðir og fleira. Og hvernig allt fellur svo vel saman. Í samanburði fannst Java… frumstæð.
Mér leið svo illa að ég fór að íhuga að skipta alfarið yfir í Kotlin. Fræðilega séð er það fullkomlega samhæft við Java; þú getur einfaldlega bætt Kotlin-stuðningi við núverandi verkefni og byrjað að skrifa nýjar klassa. Kotlin-hliðin veit hvernig á að “tala” við Java, en Java-hliðin veit ekki einu sinni að hún sé að “tala” við annað forritunarmál. Og eftir þýðingu í bytecode skiptir það í raun engu máli fyrir JVM.
Veruleikapróf
Svo hvað ertu að bíða eftir? Ef forritunarmálið er eins gott og þú segir, notaðu það bara! Kannski ekki í núverandi verkefnum þó; ég veit að það ætti að vera samhæft, en að blanda saman tveimur mismunandi forritunarmálum svona hljómar ljótt.
Ok, svo fyrir nýja mótornar – Kotlin er það. Eða er það? Þú ert að vinna í a lið. Þú þarft að ráðfæra þig við þá og sannfæra þá um ágæti þessa nýja tungumáls. Hvað? Þeim líkar það ekki? Það hljómar eins og þeir vilji einfaldlega ekki leggja sig fram við að læra það. En þú getur ekki kennt þeim um, þú varst líka tortrygginn í fyrstu.
Verkefnisstjórinn! Já! Hann mun vissulega skilja hina miklu gildi sem Kotlin myndi færa í okkar team. Ó, hversu mikill vegur mun koma! -Nei -Bíddu, af hverju? -team veit það ekki. -Þeir munu læra! -Þeir vilja ekki læra. -Þú getur gert þau! -Þeir þurfa ekki að læra. -Ég meina, það er satt, en hugsaðu um möguleikana! -Já, hvað með að þú hugsaðir fyrst um vandamálin.
Goðsögnin segir að til séu verkefni. Verkefni sem er stórt og flókið, en vel skrifað í hverju einasta atriði. Verkefni þar sem allir forritarar eru sammála um notuð lausnir. Þar sem nýir eiginleikar renna hnökralaust af lyklaborðum forritaranna. Þar sem villur eru sjaldgæfar og auðvelt er að laga þær.
Hefurðu séð verkefni eins og þetta? Ég hef það ekki. Sumir komust nálægt því, en flest þeirra eru í raun algjör óreiða í erfðakóða. Og ef þau eru það ekki, munu þau líklega verða það einhvern tíma í framtíðinni. Nú ímynda þér að bæta enn einu forritunarmálinu við blandið. Það opnar upp á nýjar leiðir til að gera mistök. Það krefst þess að forritarar viti hvað þeir eru að gera. Það er áhætta, að minnsta kosti.
Íhugaðu nú einnig þróunaraðili Viðsnúningur. Fólk kemur og fer. Ætlarðu að láta hvern nýjan forritara læra alveg nýtt forritunarmál? Nei, það er gagnslaust. Ætlarðu yfir höfuð að ráða Kotlin-forritara? Gangi þér vel með það, það er nóg erfitt að ráða góðan Java-forritara.
Fólk hefur reynt. Ég verð að segja að ég sé ekki sammála flestum ásökunum í þeirri grein. Það er nokkur réttmæt gagnrýni í henni, en ég tel að þeir hafi ekki notað Kotlin nægilega til að skilja “Kotlin-háttinn”. Margir sem skrifuðu athugasemdir undir greininni virðast vera á svipaðri skoðun.
En það skiptir engu máli. Ég veðja að þetta myndi gerast í verkefni þínu líka. “Prófaði það, líkaði það ekki”. Þú munt ekki fá þá til að eyða meiri tíma í það. Þú munt ekki fá þá til að prófa aftur. Þú munt ekki fá þá til að gefa því annað tækifæri. Og frá hagnýtu sjónarhorni gætu þeir haft rétt fyrir sér. Java er bara svo vinsæll að það virðist óþarfi að nota neitt annað á JVM.
Hvers vegna þessi grein þá?
Þú eyddir töluverðum tíma í að skrifa grein sem virðist engan tilgang hafa. Hvers vegna ætti ég að reyna að læra tungumál ef þú segir að það sé samt sem áður tilgangslaust?
Jæja, ég tel það ekki tilgangslaust. Ég tel enn að Kotlin sé frábært. Ég vil enn í alvöru nota það (og ég nota það reyndar í mínum einkaverkefnum). Ef ég gæti, myndi ég einfaldlega skipta yfir í það og gleyma takmörkunum Java. En raunin er sú að ég get það ekki. Og ég vil reyna að breyta því.
Mín ósk til þín, kæri lesandi, er að þú íhugir að minnsta kosti að stíga út úr þægilega Java-þægindasvæðinu. Því kannski, bara kannski, munt þú elska Kotlin jafnmikið og ég geri. Og ef þú gerir það, þá er það einn fleiri Kotlin-kunnandi forritari á markaður.