Koje godine se pojavio programski jezik kotlin? Šta je Kotlin i sa čime dolazi: tutorijal i poređenje novog Android razvojnog jezika sa Javom

Ovaj članak govori o programskom jeziku Kotlin. Saznat ćete o razlozima za nastanak projekta, mogućnostima jezika i vidjeti nekoliko primjera. Članak je napisan prvenstveno sa očekivanjem da je čitalac upoznat sa programskim jezikom java, međutim, oni koji znaju neki drugi jezik takođe će moći da steknu predstavu o temi. Članak je površan i ne bavi se pitanjima vezanim za kompilaciju u javascript-u. Kompletnu dokumentaciju možete pronaći na službenoj web stranici projekta, ali ću pokušati ukratko govoriti o jeziku.

O projektu

Ne tako davno, JetBrains, kompanija koja kreira razvojna okruženja, najavila je svoj novi proizvod - programski jezik Kotlin. Talas kritika zahvatio je kompaniju: kritičari su predložili da se kompanija urazumi i dovrši dodatak za Scalu, umjesto da razvija vlastiti jezik. Scala programerima zaista nedostaje dobro razvojno okruženje, ali su problemi programera dodataka razumljivi: Scala, koja je nastala zahvaljujući istraživačima iz Švicarske, ugradila je mnoge inovativne naučne koncepte i pristupe, što je stvaranje dobrog razvojnog alata učinilo izuzetno teškim zadatkom. . Trenutno je segment modernih statički kucanih jezika za JVM mali, tako da odluka da kreirate svoj jezik zajedno sa razvojnim okruženjem za njega izgleda veoma dalekovidno. Čak i ako ovaj jezik uopšte ne zaživi u zajednici, JetBrains ga prvenstveno pravi za svoje potrebe. Svaki Java programer može razumjeti ove potrebe: Java kao jezik se razvija vrlo sporo, nove funkcije se ne pojavljuju u jeziku (na funkcije prvog reda čekamo već nekoliko godina), kompatibilnost sa starijim verzijama jezika ga čini nemoguće da se mnoge korisne stvari pojave u bliskoj budućnosti (na primjer, pristojna parametrizacija). Za kompaniju koja razvija softver, programski jezik je glavni radni alat, pa su efikasnost i jednostavnost jezika pokazatelji od kojih zavisi ne samo lakoća razvoja alata za njega, već i troškovi programiranja kodiranja, odnosno koliko će biti lako. održavati ovaj kod i razumjeti ga.

O jeziku

Jezik je statički otkucan. Ali u poređenju sa Javom, Kotlin kompajler dodaje informacije tipu o tome može li referenca sadržavati null, što pooštrava provjeru tipa i čini izvršenje sigurnijim:

Fun foo(text:String) ( println(text.toLowerCase()) // NPE? Ne! ) val str:String? = null // String? -- nullable tip foo(str) //<- компилятор не пропустит такой вызов -- // тип str должен быть String, чтобы // передать его в foo

Uprkos činjenici da ovaj pristup može spasiti programera od brojnih problema povezanih sa NPE, za Java programera u početku se čini nepotrebnim - morate raditi nepotrebne provjere ili konverzije. Ali nakon nekog vremena programiranja u kotlinu, vraćajući se na Javu, osjećate da vam nedostaju ove informacije o tipu i razmišljate o korištenju Nullable/NotNull napomena. S tim su povezani problemi kompatibilnosti sa java unatrag - ove informacije nisu u java bajtkodu, ali koliko znam, ovaj problem je još uvijek u procesu rješavanja, a za sada su svi tipovi koji dolaze iz java nullable.

Usput, o kompatibilnosti unatrag: Kotlin je kompajliran u JVM bytecode (kreatori jezika ulažu mnogo truda na održavanje kompatibilnosti), što mu omogućava da se koristi u istom projektu sa Javom, kao i mogućnost međusobnog korištenja Jave i Kotlin klase čine prag za uvođenje Kotlina u veliki postojeći vrlo minimalan java projekat. U tom smislu, važna je mogućnost korištenja višestrukih java razvoja kreiranjem projekta u potpunosti u kotlinu. Na primjer, bilo mi je skoro lako napraviti mali projekat baziran na spring-webmvc.

Pogledajmo fragment kontrolera:

Path(array("/notes/")) klasa kontrolera NotesController (privatni autowired val notesService: NotesService? = null path(array("all")) fun all() = render("notes/notes") ( addObject(" bilješke", notesService!!.sve) ) ​​//... )

Posebnosti korištenja anotacija u Kotlinu su vidljive: na nekim mjestima ne izgleda tako uredno kao u Javi (ovo se odnosi na posebne slučajeve, na primjer, niz od jednog elementa), ali se anotacije mogu koristiti kao „domaće“ ključne riječi kao što su kao autowired ili kontroler (ako navedete pseudonim prilikom uvoza), a u smislu mogućnosti, napomene su bliže stvarnim klasama.

Treba napomenuti da Spring nije mogao umotati Kotlin klase za upravljanje transakcijama - nadam se da će to biti moguće u budućnosti.

Jezik ima podršku za prvoklasne funkcije. To znači da je funkcija tip ugrađen u jezik za koji postoji posebna sintaksa. Funkcije se mogu kreirati lokalno, prosljeđivati ​​kao parametri drugim funkcijama, a reference na njih mogu se pohraniti:

Fun doSomething(thing:()->Unit) ( // deklariramo parametar tipa funkcije // ()->Jedinica ne prihvaća ništa i // ne vraća ništa važno() // poziva ) doSomething() ( // i ovdje u hodu kreiramo funkciju tipa // ()->Unit i prosljeđujemo je funkciji doShomething // ako je funkcija posljednji parametar, možete je // premjestiti izvan zagrada poziva println("Hello svijet"))

Ako ovom proširenju dodamo funkcije koje nam omogućavaju da proširimo već postojeću klasu koristeći metodu koja ne krši enkapsulaciju klase, ali kojoj se može pristupiti kao metodama ove klase, onda ćemo dobiti prilično moćan mehanizam za proširenje. standardne java biblioteke koje su prilično loše u smislu pogodnosti. Po tradiciji, dodajmo mogućnost filtriranja liste koja već postoji u standardnoj biblioteci:

Zabava Lista .filter(uvjet:(T)->Boolean):Lista ( val rezultat = lista () for(stavka u ovome) ( if(uvjet(stavka)) result.add(item) ) vrati rezultat ) val someList = list(1, 2, 3, 4).filter ( it > 2 ) // someList= =

Imajte na umu da varijable nemaju specificirane tipove - Kotlin kompajler ih zaključuje ako je moguće i ne ometa razumljivost interfejsa. Općenito, jezik je osmišljen tako da osobu za tastaturom što je više moguće spasi od kucanja nepotrebnih znakova: kratka, ali jasna sintaksa s minimalnim brojem ključnih riječi, nema potrebe za tačkom i zarezom za razdvajanje izraza, zaključivanje o tipu gdje prikladno, nema nove ključne riječi za kreiranje klase - samo ono što je neophodno.

Da bismo ilustrirali temu nastave i sažetosti, pogledajmo sljedeći kod:

// kreiranje bean klasa postaje // lakonski, polja se mogu deklarirati // direktno u klasi deklaracije konstruktora TimeLord(val name:String) // klasa možda uopće nema tijelo class TARDIS(val owner:TimeLord) fun main (args: Niz ) ( val doctor = TimeLord("Doktor") val tardis = TARDIS(doktor) println(tardis.owner.name) )

U nekoliko redova, uspjeli smo deklarirati dvije klase, kreirati dva objekta i ispisati ime vlasnika TARDIS-a! Možete primijetiti da je klasa deklarirana sa parametrima svog jedinog mogućeg konstruktora, koji su ujedno i deklaracija njenih svojstava. Izuzetno kratko, ali informativno. Sigurno će biti onih koji će osuditi nemogućnost deklariranja više od jednog konstruktora, ali čini mi se da to ima svoj pragmatizam - uostalom, nekoliko konstruktora u Javi ili vam dozvoljavaju da deklarirate defaultne parametre, što Kotlin podržava na jeziku nivo, ili konvertovati jedan tip u drugi, sa kojim će ova klasa raditi, a to se već može sigurno prepustiti fabričkom metodu. Obratite pažnju na deklaraciju “varijabli” i polja. Kotlin nas tjera da napravimo izbor: val ili var. Gdje val deklarira nepromjenjivu konačnu referencu, a var promjenjivu, što pomaže da se izbjegne široka upotreba promjenjivih referenci.

Primjer

Sada smo došli do mjesta gdje možemo učiniti nešto zanimljivije. Tokom intervjua, često dajem zadatak da implementiram stablo, pređem ga i odredim neku radnju sa elementom. Pogledajmo kako se to implementira u kotlinu.

Ovako bih volio da upotreba izgleda:

Fun main(args: Array ) ( // kreiraj malo stablo val tree= tree("root") ( node("1-1") ( node("2-1") node("2-2") ) node("1-2" " ) ( node("2-3") ) ) // prelazimo ga i ispisujemo vrijednosti na konzoli tree.traverse ( println(it) ) )

Sada pokušajmo ovo implementirati. Kreirajmo klasu čvora stabla:

/** * @param vrijednost podataka čvora */ klasa Čvor (val vrijednost:T) ( // djeca čvora privatno val djeca:Lista > = arrayList() /** * Metoda koja kreira i dodaje dijete u čvor * @param vrijednost vrijednost za novi čvor * @param init funkcija za inicijalizaciju novog čvora, opcioni * parametar */ fun node(vrijednost: T, init:Node .()->Jedinica = ()):Čvor (val čvor = Čvor (value) node.init() children.add(node) return node ) /** * Metoda rekurzivno prelazi sve podređene čvorove počevši od samog čvora *, svaki čvor je obaviješten o rukovatelju * @param rukovaocu funkcije rukovatelja za vrijednost svakog čvora */ fun traverse(handler:(T)->Unit) ( handler(value) children.forEach (dijete -> child.traverse(handler) ) )

Sada dodajmo funkciju za kreiranje vrha stabla:

/** * Kreira čvor stabla sa vrijednošću i inicijalizira * njegove potomke metodom init. */ zabava stablo(vrijednost:T, init:čvor .()->Jedinica): Čvor

( val node = Node(value) // poziva init metodu proslijeđenu u // parametru na objektu čvora node.init() return node )

Na dva mjesta u kodu korišćena je konstrukcija poput Node.()->Unit, njeno značenje je da se kao ulaz očekuje tip funkcije, koji će biti izvršen kao metoda objekta tipa Node. Iz tijela ove funkcije postoji pristup drugim metodama ovog objekta, kao što je metoda Node.node(), koja vam omogućava da izvršite inicijalizaciju stabla slično onoj opisanoj u primjeru.

Umjesto zaključka

Ako ste zainteresirani za jezik, sve informacije o jeziku mogu se pronaći na službenoj web stranici projekta, njihovi izvori se mogu naći na githubu, a sve pronađene greške mogu se objaviti u Issue Tracker. Još uvijek ima mnogo problema, ali programeri jezika se aktivno bore protiv njih. Sada tim radi na još uvijek ne baš stabilnoj verziji milestone 3, nakon stabilizacije, koliko znam, planirano je korištenje jezika unutar kompanije JetBrains, nakon čega je već planirano prvo izdanje.

Oznake: Dodajte oznake

Ovaj članak govori o programskom jeziku Kotlin. Saznat ćete o razlozima za nastanak projekta, mogućnostima jezika i vidjeti nekoliko primjera. Članak je napisan prvenstveno sa očekivanjem da je čitalac upoznat sa programskim jezikom java, međutim, oni koji znaju neki drugi jezik takođe će moći da steknu predstavu o temi. Članak je površan i ne bavi se pitanjima vezanim za kompilaciju u javascript-u. Kompletnu dokumentaciju možete pronaći na službenoj web stranici projekta, ali ću pokušati ukratko govoriti o jeziku.

O projektu

Ne tako davno, JetBrains, kompanija koja kreira razvojna okruženja, najavila je svoj novi proizvod - programski jezik Kotlin. Talas kritika zahvatio je kompaniju: kritičari su predložili da se kompanija urazumi i dovrši dodatak za Scalu, umjesto da razvija vlastiti jezik. Scala programerima zaista nedostaje dobro razvojno okruženje, ali su problemi programera dodataka razumljivi: Scala, koja je nastala zahvaljujući istraživačima iz Švicarske, ugradila je mnoge inovativne naučne koncepte i pristupe, što je stvaranje dobrog razvojnog alata učinilo izuzetno teškim zadatkom. . Trenutno je segment modernih statički kucanih jezika za JVM mali, tako da odluka da kreirate svoj jezik zajedno sa razvojnim okruženjem za njega izgleda veoma dalekovidno. Čak i ako ovaj jezik uopšte ne zaživi u zajednici, JetBrains ga prvenstveno pravi za svoje potrebe. Svaki Java programer može razumjeti ove potrebe: Java kao jezik se razvija vrlo sporo, nove funkcije se ne pojavljuju u jeziku (na funkcije prvog reda čekamo već nekoliko godina), kompatibilnost sa starijim verzijama jezika ga čini nemoguće da se mnoge korisne stvari pojave u bliskoj budućnosti (na primjer, pristojna parametrizacija). Za kompaniju koja razvija softver, programski jezik je glavni radni alat, pa su efikasnost i jednostavnost jezika pokazatelji od kojih zavisi ne samo lakoća razvoja alata za njega, već i troškovi programiranja kodiranja, odnosno koliko će biti lako. održavati ovaj kod i razumjeti ga.

O jeziku

Jezik je statički otkucan. Ali u poređenju sa Javom, Kotlin kompajler dodaje informacije tipu o tome može li referenca sadržavati null, što pooštrava provjeru tipa i čini izvršenje sigurnijim:

Fun foo(text:String) ( println(text.toLowerCase()) // NPE? Ne! ) val str:String? = null // String? -- nullable tip foo(str) //<- компилятор не пропустит такой вызов -- // тип str должен быть String, чтобы // передать его в foo

Uprkos činjenici da ovaj pristup može spasiti programera od brojnih problema povezanih sa NPE, za Java programera u početku se čini nepotrebnim - morate raditi nepotrebne provjere ili konverzije. Ali nakon nekog vremena programiranja u kotlinu, vraćajući se na Javu, osjećate da vam nedostaju ove informacije o tipu i razmišljate o korištenju Nullable/NotNull napomena. S tim su povezani problemi kompatibilnosti sa java unatrag - ove informacije nisu u java bajtkodu, ali koliko znam, ovaj problem je još uvijek u procesu rješavanja, a za sada su svi tipovi koji dolaze iz java nullable.

Usput, o kompatibilnosti unatrag: Kotlin je kompajliran u JVM bytecode (kreatori jezika ulažu mnogo truda na održavanje kompatibilnosti), što mu omogućava da se koristi u istom projektu sa Javom, kao i mogućnost međusobnog korištenja Jave i Kotlin klase čine prag za uvođenje Kotlina u veliki postojeći vrlo minimalan java projekat. U tom smislu, važna je mogućnost korištenja višestrukih java razvoja kreiranjem projekta u potpunosti u kotlinu. Na primjer, bilo mi je skoro lako napraviti mali projekat baziran na spring-webmvc.

Pogledajmo fragment kontrolera:

Path(array("/notes/")) klasa kontrolera NotesController (privatni autowired val notesService: NotesService? = null path(array("all")) fun all() = render("notes/notes") ( addObject(" bilješke", notesService!!.sve) ) ​​//... )

Posebnosti korištenja anotacija u Kotlinu su vidljive: na nekim mjestima ne izgleda tako uredno kao u Javi (ovo se odnosi na posebne slučajeve, na primjer, niz od jednog elementa), ali se anotacije mogu koristiti kao „domaće“ ključne riječi kao što su kao autowired ili kontroler (ako navedete pseudonim prilikom uvoza), a u smislu mogućnosti, napomene su bliže stvarnim klasama.

Treba napomenuti da Spring nije mogao umotati Kotlin klase za upravljanje transakcijama - nadam se da će to biti moguće u budućnosti.

Jezik ima podršku za prvoklasne funkcije. To znači da je funkcija tip ugrađen u jezik za koji postoji posebna sintaksa. Funkcije se mogu kreirati lokalno, prosljeđivati ​​kao parametri drugim funkcijama, a reference na njih mogu se pohraniti:

Fun doSomething(thing:()->Unit) ( // deklariramo parametar tipa funkcije // ()->Jedinica ne prihvaća ništa i // ne vraća ništa važno() // poziva ) doSomething() ( // i ovdje u hodu kreiramo funkciju tipa // ()->Unit i prosljeđujemo je funkciji doShomething // ako je funkcija posljednji parametar, možete je // premjestiti izvan zagrada poziva println("Hello svijet"))

Ako ovom proširenju dodamo funkcije koje nam omogućavaju da proširimo već postojeću klasu koristeći metodu koja ne krši enkapsulaciju klase, ali kojoj se može pristupiti kao metodama ove klase, onda ćemo dobiti prilično moćan mehanizam za proširenje. standardne java biblioteke koje su prilično loše u smislu pogodnosti. Po tradiciji, dodajmo mogućnost filtriranja liste koja već postoji u standardnoj biblioteci:

Zabava Lista .filter(uvjet:(T)->Boolean):Lista ( val rezultat = lista () for(stavka u ovome) ( if(uvjet(stavka)) result.add(item) ) vrati rezultat ) val someList = list(1, 2, 3, 4).filter ( it > 2 ) // someList= =

Imajte na umu da varijable nemaju specificirane tipove - Kotlin kompajler ih zaključuje ako je moguće i ne ometa razumljivost interfejsa. Općenito, jezik je osmišljen tako da osobu za tastaturom što je više moguće spasi od kucanja nepotrebnih znakova: kratka, ali jasna sintaksa s minimalnim brojem ključnih riječi, nema potrebe za tačkom i zarezom za razdvajanje izraza, zaključivanje o tipu gdje prikladno, nema nove ključne riječi za kreiranje klase - samo ono što je neophodno.

Da bismo ilustrirali temu nastave i sažetosti, pogledajmo sljedeći kod:

// kreiranje bean klasa postaje // lakonski, polja se mogu deklarirati // direktno u klasi deklaracije konstruktora TimeLord(val name:String) // klasa možda uopće nema tijelo class TARDIS(val owner:TimeLord) fun main (args: Niz ) ( val doctor = TimeLord("Doktor") val tardis = TARDIS(doktor) println(tardis.owner.name) )

U nekoliko redova, uspjeli smo deklarirati dvije klase, kreirati dva objekta i ispisati ime vlasnika TARDIS-a! Možete primijetiti da je klasa deklarirana sa parametrima svog jedinog mogućeg konstruktora, koji su ujedno i deklaracija njenih svojstava. Izuzetno kratko, ali informativno. Sigurno će biti onih koji će osuditi nemogućnost deklariranja više od jednog konstruktora, ali čini mi se da to ima svoj pragmatizam - uostalom, nekoliko konstruktora u Javi ili vam dozvoljavaju da deklarirate defaultne parametre, što Kotlin podržava na jeziku nivo, ili konvertovati jedan tip u drugi, sa kojim će ova klasa raditi, a to se već može sigurno prepustiti fabričkom metodu. Obratite pažnju na deklaraciju “varijabli” i polja. Kotlin nas tjera da napravimo izbor: val ili var. Gdje val deklarira nepromjenjivu konačnu referencu, a var promjenjivu, što pomaže da se izbjegne široka upotreba promjenjivih referenci.

Primjer

Sada smo došli do mjesta gdje možemo učiniti nešto zanimljivije. Tokom intervjua, često dajem zadatak da implementiram stablo, pređem ga i odredim neku radnju sa elementom. Pogledajmo kako se to implementira u kotlinu.

Ovako bih volio da upotreba izgleda:

Fun main(args: Array ) ( // kreiraj malo stablo val tree= tree("root") ( node("1-1") ( node("2-1") node("2-2") ) node("1-2" " ) ( node("2-3") ) ) // prelazimo ga i ispisujemo vrijednosti na konzoli tree.traverse ( println(it) ) )

Sada pokušajmo ovo implementirati. Kreirajmo klasu čvora stabla:

/** * @param vrijednost podataka čvora */ klasa Čvor (val vrijednost:T) ( // djeca čvora privatno val djeca:Lista > = arrayList() /** * Metoda koja kreira i dodaje dijete u čvor * @param vrijednost vrijednost za novi čvor * @param init funkcija za inicijalizaciju novog čvora, opcioni * parametar */ fun node(vrijednost: T, init:Node .()->Jedinica = ()):Čvor (val čvor = Čvor (value) node.init() children.add(node) return node ) /** * Metoda rekurzivno prelazi sve podređene čvorove počevši od samog čvora *, svaki čvor je obaviješten o rukovatelju * @param rukovaocu funkcije rukovatelja za vrijednost svakog čvora */ fun traverse(handler:(T)->Unit) ( handler(value) children.forEach (dijete -> child.traverse(handler) ) )

Sada dodajmo funkciju za kreiranje vrha stabla:

/** * Kreira čvor stabla sa vrijednošću i inicijalizira * njegove potomke metodom init. */ zabava stablo(vrijednost:T, init:čvor .()->Jedinica): Čvor

( val node = Node(value) // poziva init metodu proslijeđenu u // parametru na objektu čvora node.init() return node )

Na dva mjesta u kodu korišćena je konstrukcija poput Node.()->Unit, njeno značenje je da se kao ulaz očekuje tip funkcije, koji će biti izvršen kao metoda objekta tipa Node. Iz tijela ove funkcije postoji pristup drugim metodama ovog objekta, kao što je metoda Node.node(), koja vam omogućava da izvršite inicijalizaciju stabla slično onoj opisanoj u primjeru.

Umjesto zaključka

Ako ste zainteresirani za jezik, sve informacije o jeziku mogu se pronaći na službenoj web stranici projekta, njihovi izvori se mogu naći na githubu, a sve pronađene greške mogu se objaviti u Issue Tracker. Još uvijek ima mnogo problema, ali programeri jezika se aktivno bore protiv njih. Sada tim radi na još uvijek ne baš stabilnoj verziji milestone 3, nakon stabilizacije, koliko znam, planirano je korištenje jezika unutar kompanije JetBrains, nakon čega je već planirano prvo izdanje.

Tagovi:

  • kotlin
  • java
  • jetbrains
Dodaj oznake

Posljednje ažuriranje: 12.02.2017

Kotlin je statički kucani programski jezik iz JetBrainsa. Kotlin se može koristiti za kreiranje mobilnih i web aplikacija.

Kotlin radi na Java virtuelnoj mašini (JVM) i kompajliran je u bajt kod kada se kompajlira. To jest, kao iu slučaju Jave, možemo pokrenuti Kotlin aplikaciju gdje god je JVM instaliran. Iako je takođe moguće kompajlirati kod u JavaScript-u i pokrenuti ga u pretraživaču. I, pored toga, možete kompajlirati Kotlin kod u izvorne binarne datoteke koje će raditi bez ikakve virtuelne mašine. Dakle, raspon platformi za koje možete kreirati aplikacije u Kotlinu je izuzetno širok - Windows, Linux, Mac OS, iOS, Android.

Prva verzija jezika objavljena je 15. februara 2016. godine. Iako se razvoj samog jezika odvija od 2010. Trenutna verzija jezika u ovom trenutku je verzija 1.2, koja je objavljena 28. novembra 2017.

Na Kotlin su uticali mnogi jezici: Java, Scala, Groovy, C#, JavaScript, Swift i omogućava vam da pišete programe u objektno orijentisanim i funkcionalnim stilovima. Ima jasnu i razumljivu sintaksu i prilično je lako naučiti.

Najpopularnija oblast u kojoj se Kotlin koristi je prvenstveno razvoj za Android OS. Štoviše, toliko je popularan da je Google na konferenciji Google I/O 2017 proglasio Kotlin jednim od službenih jezika za razvoj Androida (uz Javu i C++), a alati za rad s ovim jezikom uključeni su po defaultu u funkcionalnost razvojnog okruženja Android Strudio počevši od verzije 3.0.

Možete preuzeti kompajler direktno za sam Kotlin jezik na .

Arhiva se nalazi na gornjoj adresi. Preuzmite i raspakujte kotlinc folder iz arhive. U raspakovanoj arhivi u folderu bin možemo pronaći kotlinc uslužni program koji će se koristiti za kompajliranje:

Sada definirajmo direktorij na tvrdom disku za datoteke izvornog koda. Na primjer, u mom slučaju direktorij će se nalaziti duž putanje c:/kotlin. Kreirajmo tekstualnu datoteku u ovom direktoriju i preimenujmo je u app.kt. Ekstenzija kt je ekstenzija datoteka u jeziku Kotlin.

Fun main(args: Array )( println("Zdravo Kotlin") )

U ovom slučaju definiramo glavnu funkciju, koja će predstavljati radnje koje izvršava program. Da biste definirali funkciju, koristite ključnu riječ fun.

Ova funkcija uzima parametar args, koji predstavlja niz stringova.

Unutar glavne funkcije, izvršava se još jedna funkcija - println(), koja ispisuje neku poruku na konzolu.

Otvorimo komandnu liniju. Prvo koristite naredbu cd za navigaciju do mape u kojoj se nalazi datoteka app.kt. Zatim, da prevedete program, unesite sljedeću naredbu:

C:\kotlin\bin\kotlinc app.kt -include-runtime -d app.jar

U ovom slučaju, prenosimo app.kt datoteku kompajleru c:\kotlin\bin\kotlinc za kompilaciju. (Da bi se izbeglo pisanje pune putanje do kompajlera, putanja do njega se može dodati promenljivoj PATH u varijablama okruženja). Zatim, koristeći parametar -include-runtime, specificirate da će generirana datoteka uključivati ​​Kotlin okruženje. A parametar -d određuje kako će se zvati kreirana datoteka aplikacije, odnosno, u ovom slučaju će to biti app.jar .

Nakon pokretanja ove naredbe, datoteka app.jar će biti kreirana. Pokrenimo ga sada. Da biste to učinili, unesite naredbu

Java -jar app.jar

U ovom slučaju, pretpostavlja se da je putanja do JDK instaliranog na računaru navedena u varijabli PATH u varijablama okruženja. U suprotnom, umjesto “java” morat ćete napisati punu putanju do java uslužnog programa.

Kao rezultat toga, kada pokrenemo datoteku, vidjet ćemo liniju “Hello Kotlin” na konzoli.

Službeni jezik za razvoj Androida.

Zašto je Kotlin dobio ime po ostrvu u Finskom zaljevu, kako i kada je jezik postao popularan među programerima mobilnih aplikacija, zašto je zgodan za korištenje i zašto je uopće bio potreban? Rekao je menadžer marketinga Kotlina Roman Belov "papir", kako je u Sankt Peterburgu stvoren jezik koji prepoznaje Google.

Fotografija iz arhive Romana Belova

Kako i kada se pojavio programski jezik Kotlin?

Počeli smo razvijati Kotlin 2010. godine. U to vreme, JetBrains je već imao deset godina, a glavni proizvod kompanije, JetBrains IntelliJ IDEA, napisan u potpunosti na Javi, već je bio veoma velik. Postalo je jasno da nam Java na mnogo načina ne odgovara. Postojalo je nekoliko alternativnih programskih jezika, ali se pokazalo da nijedan od njih ne ispunjava uslove koje smo postavili za jezik na koji bismo željeli da se prebacimo.

Postojao je i drugi razlog. Kada se na jednom mjestu okupi veliki broj ljudi s velikim iskustvom u programskim jezicima, često se dešava da se rodi novi jezik. I tako se dogodilo. Prvo, postojala je prepoznata i ozbiljna potreba, a drugo, mogli smo je zadovoljiti.

Kao i mnoge naše proizvode, kreirali smo Kotlin na osnovu naših potreba. Ovo je, generalno, princip inherentan razvoju kompanije: vidimo da na tržištu ne postoji alat koji bi rešio problem, a onda ga kreiramo. Naši prvi korisnici smo uvijek mi sami. Stoga obično završimo s vrlo praktičnim i pragmatičnim alatima.

Zašto se Kotlin tako zove?

U trenutku kada je naziv izmišljen, na JVM-u (Java Virtual Machine - cca. "papiri") postojali su i jezici nazvani po ostrvima: Java, Cejlon. I pomislili smo: koje ostrvo imamo u blizini? Kotlin. I ovo ime se zadržalo. Ovdje nema tradicije ni pravila, ali dogodilo se, nema dubljeg razmišljanja iza toga.

Koje su karakteristike jezika?

Vjerovatno najbolja riječ koja odgovara kotlinskom jeziku je pragmatizam. Postoje različiti jezici: neki dolaze iz akademske zajednice, drugi su kreirani za određene platforme. U početku smo imali za cilj praktičan jezik za najširu moguću publiku. Moralo je biti demokratski, odnosno bez gluposti. Postoje situacije kada programer poznaje sve zamršenosti jezika i zahvaljujući tome piše lukav kod - a niko od mlađih programera ne može ući u ovaj kod. Potreban nam je jezik koji je podjednako dobar i za početnike i za napredne programere.

Imamo i potpunu demokratiju unutar kompanije: svaki programer sam odlučuje na kom jeziku će pisati, Java ili Kotlin, a ne prelazi svi na Kotlin. Kao menadžer jezičkog marketinga, JetBrains je za mene mali svijet. Kada svi u našoj velikoj kompaniji pređu na Kotlin, onda će, vjerovatno, programeri širom svijeta preći na njega. Ali, zaista, postotak upotrebe Kotlina u kompaniji stalno raste.

Zašto je Kotlin tako dobar? Prije svega, programeri vole Kotlin zbog njegove sažetosti i izražajnosti. Ovo je zajedničko svim novim jezicima. Ranije to ljudima nije mnogo smetalo, ali onda je veličina programa postala veća – ljudi su shvatili da pišu puno potpuno besmislenih dijelova koda samo zato što ih je sintaksa programskog jezika zahtijevala.

Drugi razlog je taj što je potpuno kompatibilan sa Javom i omogućava vam da postepeno prelazite sa Java aplikacije na Kotlin aplikaciju. Na primjer, aplikacija Basecamp je u potpunosti prešla sa Jave na Kotlin u roku od šest mjeseci.

Treća stvar je da je Kotlin bezbedan: semantika jezika sadrži principe koji sprečavaju niz vrlo čestih grešaka koje se obično javljaju tokom izvršavanja programa. Ovo vam omogućava da napišete sigurniji kod, što vam u konačnici pomaže uštedjeti novac i smanjiti troškove testiranja.

Kako su Kotlin primijetili programeri aplikacija?

U JetBrains-u se ne bavimo razvojem Androida i u početku niko nije mislio da će Kotlin biti jezik koji će biti tako prikladan za potrebe Android programera. Ali u nekom trenutku se pokazalo da je Android zaglavio na Javi 6 i mnoge nove Java funkcije nisu bile dostupne na Androidu. Tada su progresivni programeri skrenuli pažnju na Kotlin.

Shvatili smo da bi Kotlin mogao biti veoma koristan za Android i počeli smo da usavršavamo funkcije koje pomažu Android programerima, uzimajući u obzir njihove potrebe prilikom razvoja dizajna jezika.

Prije godinu dana imali smo prilično veliki događaj: Gradle build sistem, sa kojim su izgrađene sve Android aplikacije, najavio je prelazak na Kotlin.

U određenom smislu, priča o Kotlinu na Androidu je potpuno fantastična i udžbenička: jednostavno smo napravili programski jezik i programerima se to jako svidjelo. Ovo je priča o kretanju odozdo prema gore, a ne obrnuto. Programeri već duže vrijeme traže od Googlea da podrži Kotlin. I Google ih je poslušao.

Sa najavom Google-a, za nas se ništa formalno ne mijenja: nastavljamo da razvijamo jezik i ciljamo na različite platforme. Naravno, od Android programera očekujemo posebnu pažnju na jezik: to će se posebno izražavati u porukama o grešci, u zahtjevima za podršku za ovu ili onu funkcionalnost i, naravno, sve ćemo to obraditi. Ali generalno, naravno, nastavićemo da se krećemo planiranim putem.

Ko koristi Kotlin jezik i zašto?

U kompaniji smo Kotlin počeli da koristimo 2012. godine, ali je zvanično izdanje jezika bilo 17. februara 2016. godine. Do tog vremena, dizajn jezika se aktivno mijenjao i održavanje koda u Kotlinu je bilo prilično problematično. Moramo shvatiti da razvoj programskih jezika zahtijeva veliku pažnju kompatibilnosti unatrag. A kada smo najavili izdanje, obavezali smo se na kompatibilnost unatrag: da će novi kod biti kompatibilan na binarnom nivou sa starim. I te obaveze ispunjavamo.

Trenutno ruske kompanije kao što su Avito i Rocket Bank koriste jezik Kotlin u svojim aplikacijama. Tokom prošle godine, 160 hiljada programera isprobalo je Kotlin. Do sada je Kotlin pokazivao eksponencijalni rast u broju programera, i mislim da će nam Google-ova najava pomoći da nastavimo s tim rastom.

Programski jezik Kotlin, koji je razvila kompanija JetBrains iz Sankt Peterburga, postao je službeni razvojni jezik za Android. Ovo je zvanično objavljeno na Google I/O konferenciji. Tim Kotlina predvodi diplomac Univerziteta ITMO Andrey Breslav. Zašto je IT gigant tako omiljen kod Kotlina među mnogim drugim "mladim" jezicima, kako i zašto se uopće pojavljuju novi programski jezici, pročitajte u komentarima stručnjaka i zbirci informacija ITMO.NEWS.

Kako se razvijaju programski jezici

Prema različitim procjenama, u svijetu već postoji više od dvije hiljade različitih programskih jezika. Ažuriranja se stalno objavljuju za stare jezike, a pojavljuju se i novi jezici. Kada se sintaksa jezika ne mijenja, već samo postaje složenija i proširena, programeru je potrebno samo malo vježbe da nastavi pisati na svom omiljenom jeziku. Ponekad se mijenja struktura samog jezika, a zatim programer ponekad mora ponovo učiti, prilagođavajući se ažuriranom jeziku. Obično se prijelaz na novu strukturu događa postepeno i u dijelovima, odnosno samo 10-20% programskog koda počinje da se piše novim jezikom.

« Programeri nisu bili u potpunosti zadovoljni jezicima C++ i Java, jer su to prilično složeni jezici, a prvi je teži od drugog. Stoga se pojavio Scala jezik, koji se sviđa mnogim programerima, ali je i vrlo složen. JetBrainsovo veliko iskustvo u kreiranju alata za razvoj programa za različite programske jezike omogućilo mu je da za sedam godina stvori Kotlin jezik, koji je potpuno kompatibilan sa Javom, ali jednostavniji i praktičniji od njega. Programski jezici se stalno razvijaju; niko sebi više ne postavlja zadatak da napravi univerzalni jezik. Uprkos tome, svaki jezik je efikasniji u određenoj oblasti u kojoj se najčešće koristi. Postoji čak i pravac u stvaranju jezika kada se razvijaju za određeno predmetno područje“, komentirao je šef Katedre za tehnologiju programiranja na Univerzitetu ITMO.


Danas neke kompanije čak sastavljaju vlastite jezične ocjene. Na primjer, kompanija TIOBE, specijalizirana za procjenu kvaliteta softvera, od 2001. godine mjesečno izračunava indeks popularnosti određenih jezika. Generirana lista sadrži 50 redova, a da bi programski jezik bio uključen u indeks, programeri moraju napisati odgovarajuće pismo kompaniji. Izračun je zasnovan na podacima sa 25 internet pretraživača. Do sada na rang listi vodi Java sa velikom razlikom, a slijedi je C. Istovremeno, sastavljači liste naglašavaju da su u protekloj godini oba programska jezika postala manje popularna, za oko 6%. Istovremeno, TIOBE pokazuje da je jezik C bio jezik broj 1 do 2002. godine, a Java je bila na 14. mjestu 1997. godine, ali je pet godina kasnije zamijenila C na prvoj poziciji.

Možete održati odlično predavanje o istoriji razvoja jezika: kustos akademskih programa na Yandexu, direktor centra za studentska takmičenja na Fakultetu računarskih nauka Visoke ekonomske škole govori o tome kako se jezici C , PHP, Ruby i Java su se pojavili. Mikhail Gustokashin. Predavač naglašava da za svaki zadatak treba izabrati drugačiji programski jezik. Na primjer, on kaže da je za vojnu industriju najbolje pisati dobrim starim Pascalom - jezikom koji je rođen davne 1970. godine! Zašto? Zato što je pouzdaniji. Poslovne aplikacije se mogu pisati na Javi jer je i ovaj jezik prilično pouzdan, ali mnogo lakši za korištenje. Stručnjak također naglašava da je važno održati interes za jezik među programerima stvaranjem zajednice programera koji pišu na ovom jeziku. Ako se stvori infrastruktura oko novog jezika i ljudi se okupljaju da ga koriste, tek tada će jezik postati popularan. Inače, programeri Kotlina su također usvojili ovu strategiju.

Malo o Kotlinu

Programski jezik Kotlin počeo je da se razvija u peterburškoj kompaniji JetBrains 2010. godine. Zvanično izdanje proizvoda objavljeno je 2016. Jezik je ovo ime dobio u čast ostrva u Finskom zaljevu na kojem se nalazi Kronštat. Zanimljivom koincidencijom, naziv popularnog jezika Java je i ime ostrva u Indoneziji. Koincidencija vjerovatno nije slučajna. Kako se navodi u saopštenju za javnost, Kotlin bi trebao raditi gdje god radi Java, a jedan od ciljeva je bio napraviti proizvod koji bi se mogao koristiti u mješovitim projektima koji se kreiraju na više jezika.


Kako navode autori Kotlina, najvažnije im je bilo stvoriti „pragmatičan“ proizvod. To znači da nisu bili fokusirani samo na ispravljanje grešaka i poboljšanje proizvoda, što bi svaki programer uradio, već su željeli napraviti koristan alat.

« Razvojni alati, uključujući programske jezike, neprestano se razvijaju. Jezici se razlikuju od drugih alata po tome što ih je prilično teško evolucijski razviti. Nova verzija jezika mora podržavati sve postojeće programe. To ograničava mogućnosti razvoja postojećih jezika i stvara potrebu za nastankom novih. Faktor koji određuje uspjeh novog programskog jezika je, prije svega, pogodnost za programere. Osim što je koncizan i ekspresivan, Kotlin je vrlo kompatibilan s Java kodom: možete koristiti sve postojeće biblioteke, pa čak i miješati kod na dva jezika u jednom projektu, tako da nema posebnih poteškoća u tranziciji“, komentirao je Kotlin projekt menadžer u JetBrains, diplomac ITMO Univerziteta.

Zašto je Google volio Kotlin

Na službenoj web stranici Android programeri pišu da su posljednjih godina primijetili "uspon" Kotlina. Zaposleni u Guglu ne stide se da opisuju jezik kao impresivan, koncizan, osnažujući i ugodan za rad. Ima povećanu produktivnost: programski kod u njemu je u prosjeku 40% kraći nego na drugim jezicima, a Kotlin vam također omogućava da izbjegnete neke greške u kodu. Jedan od odlučujućih faktora za popularnost Kotlina u Google-u bio je da je kompatibilan sa Javom, koja se već koristi u razvoju aplikacija za Android.

Sada, kada programeri počnu kreirati novu aplikaciju u službenom razvojnom okruženju Android Studio, mogu odmah omogućiti dodatak “Kotlin support”. Također možete pretvoriti već kreirane linije koda na drugim jezicima u Kotlin jezik, umetnuti blokove na drugim jezicima u linije koda u Kotlinu. U budućnosti će se razvijati više biblioteka i alata za jezik, razvijaće se više materijala za obuku i lakše će se naći rješenja za moguće probleme.

« Nedostatak garancija jezičke podrške od Google-a obeshrabrio je mnoge programere da pređu na Kotlin. Čak i ako stvarno volite jezik,programer uvek razmišlja o riziku da će u nekom trenutku ovaj jezik jednostavno prestati da radi. Sada postoji garancija da Kotlin neće prestati s radom, a očekujemo da će se broj korisnika jezika naglo povećati. Bilo bi prirodno pretpostaviti da će mnoge kompanije na kraju u potpunosti preći na Kotlin, iako ih tehnički ništa ne prisiljava na to, to je jednostavno pitanje preferencija“- naglasio je Andrej Breslav.

Dodao je da se Kotlin vrlo aktivno razvija. Razvojni tim trenutno radi na sistemu izgradnje, brzini kompilacije, poboljšanju performansi IDE-a, dodavanju novih funkcija u komplet alata, uključujući i one vezane za integraciju u Android Studio. U toku je i rad na projektima sa više platformi (mogućnost kompajliranja istog koda za nekoliko platformi), a u fazi dizajna su i brojna poboljšanja jezika.


Gugl je takođe naglasio da su inspirisani konceptom Kotlin jezika, prema kojem je on oduvek bio i ostaće besplatan za programere, odnosno projekat otvorenog koda. To znači da jezik nije vezan ni za jednu kompaniju, a izvorni kod se distribuira pod besplatnom licencom. Možete preuzeti proizvod. Kako bi podržali razvoj Kotlina, Google i JetBrains će stvoriti neprofitno partnerstvo. Takođe, u okviru „misije“ Androida, veoma je važno da autori Kotlina oko svog proizvoda stvore zajednicu ljudi koji se profesionalno bave razvojem na ovom jeziku i vole da dele svoja iskustva. Na primjer, u novembru će se održati Kotlin konferencija u Sjedinjenim Državama, a programeri također mogu primati dnevne vijesti i savjete o softverskom proizvodu i sastajati se lokalno.

Inače, sam projekat Android Studio razvijen je na osnovu okruženja za razvoj softvera IntelliJ IDEA, koje je takođe kreirao JetBrains. No, uprkos bliskoj saradnji, iz peterburške kompanije naglašavaju da nema govora o bilo kakvoj prodaji JetBrainsa američkom IT gigantu. Istovremeno, Koltin neće biti dizajniran samo za Android. Cilj kompanije je da programski jezik učini prikladnim za različite razvojne platforme.

mob_info