IT Industrija
🔥 Najčitanije
🔥 Najčitanije
Zašto je novi zvanični jezik za razvoj Android aplikacija izazvao toliko oduševljenje u zajednici i koje ga to funkcionalnosti izdvajaju u odnosu na druge programske jezike.
Nedavno smo se upoznali sa novim zvaničnim jezikom za razvoj Android aplikacija. Na tu temu je bilo više reči i na meetupu Kotlin Srbija korisničke grupe održanom u Startit Centru Beograd.
Kako bismo vam na što bolji način približili Kotlin, u ovom tekstu ćemo opisati zašto je ovaj jezik izazvao toliko oduševljenje u Android zajednici i koje su to funkcionalnosti koje ga svrstavaju u grupu savremenih programskih jezika.
Imajte na umu da izdvajamo samo neke od funkcionalnosti po kojima se Kotlin ističe u odnosu na druge jezike. Podsećam da kompletan pregled ovog jezika i sintakse možete pogledati na zvaničnom Kotlin sajtu kao i u dokumentaciji jezika.
Kotlin “type” sistem razlikuje nullable i ne nullable tipove. Nullable tipove definišemo navođenjem znaka “?” nakon definisanja tipa (primer String?). Ovako definisana promenljiva kompajleru daje do znanja da ona u nekom trenutku izvršavanja aplikacije može da ima vrednost “null” i da je pre korišćenja ove promenljive neophodno izvršiti proveru da li je inicijalizovana. Kao što vidite na primeru ispod, kompajler se buni kada želimo da uradimo operaciju na promenljivoj mightBeNull, ako nismo uradili prethodnu null proveru. Na ovaj način nam sam “type” sistem pomaže u izbegavanju NullPointerException izuzetka u toku izvršavanja aplikacije (eng. runtime).
Svi smo se u kodu sretali sa metodama koje imaju previše ulaznih parametara da bismo ih pratili jednostavno i one često izgledaju na primer ovako:
Prilikom poziva ovako definisanih metoda moramo da navedemo svaki ulazni parametar u tačnom redosledu kao i da prosledimo vrednost za njega iako ćemo za većinu njih navoditi njihove već podrazumevane (eng. default) vrednosti.
U Kotlinu istu stvar mozemo da postignemo mnogo elegantnije korišćenjem koncepta imenovanih argumenata i podrazumevanih vrednosti koje su već integrisane u jezik:
Pored toga što nam pomaže da izbegnemo greške koje su dosta čest slučaj pri korišćenju ovako definisanih metoda, ovo je mnogo jednostavnije i preglednije za čitanje. Takođe, velika prednost ove funkcionalnosti koju poseduje Kotlin je i to što smanjuje broj implementacija neke funkcije koju treba da napišete (eng. overloaded functions)
Kotlin uvodi naredbu when koja daje više mogućnosti od sada već tradicionalne switch naredbe u drugim programskim jezicima. When sekvencialno poredi prosleđene argumente kroz sve grane sve dok uslov iz neke od grana ne bude zadovoljen. When se može koristiti kao naredba ili izraz. Ako se koristi kao izraz vrednost zadovoljene grane postaje vrednost celog izraza. Ako se koristi kao naredba vrednost grane koja zadovoljava uslov je ignorisana.
U else granu when naredbe se ulazi ako ni jedna od grana ne zadovoljava uslove. U slučaju da se when koristi kao izraz else grana je obavezna osim ako kompajler ne prepozna da su svi mogući slučajevi već pokriveni u granama.
When se može koristiti i kao zamena za if-else if lanac. Ako when nema argumenata za proveru onda su uslovi grana jednostavni boolean izrazi, odnosno grana je izvršena ako je uslov ispunjen.
Da li ste se nekad zapitali zašto je potrebno da kastujete objekat u neku klasu iako ste već proverili da li je taj objekat instanca te klase? U Kotlinu to ne morate da radite u većini slučajeva, jer kompajler prati upotrebu ključne reči is za nepromenjljive (eng. immutable) vrednosti i automatski kastuje po potrebi. Na promeru ispod možemo uočiti da je promenljiva x u telu if naredbe tipa String, odnosno Kotlin kompajler je za nas odradio pametnu konverziju tipova. Van bloka if naredbe promenljiva x je i dalje tipa Object.
Ovo pravilo važi i kada koristimo when naredbu:
Treba napomenuti da pametno kastovanje ne radi u slučajevima kada kompajler ne može da garantuje da promenljiva ne može da se promeni između provere, a to se najčešće odnosi na slučaj ako se promenljiva nalazi u nekom lambda izrazu.
Kotlin vam omogućava da dodate nove metode na već postojeće tipove. Ova funkcionalnost znači da ne morate više da kreirate pomoćne klase koje reimplementiraju već postojeće ili da koristite neki od dizajn paterna kao što je dekorator. Ovo je u Kotlin ugrađeno posebnim deklaracijama koje se nazivaju ekstenzije. Jednostavnim definisanjem nove metode na postojećoj klasi, ta metoda postaje dostupna na svim već postojećim instancama klase.
Kotlin podržava ekstenzije na funkcijama kao i na propertijima:
Lambda izraz se u Kotlinu sastoji od vitičastih zagrada, deklaracije parametara koji u punoj formi idu unutar zagrada sa opcionim tipovima i tela izraza koje ide nakon -> znaka.
Kotlin ima konciznu sintaksu za lambde koja omogućava laku primenu i korišćenje paradigmi i koncepata funkcinonalnog programiranja u ovom jeziku. Lambde možemo koristiti u skoro svakom aspektu jezika. Na primer u jednoj liniji možemo preveriti da li je svaki element kolekcije String:
Uobičajno je da lambda izraz ima samo jedan parametar. Ako Kotlin sam može da zaključi to iz potpisa metode dozvoljava nam da taj parametar izostavimo prilikom deklaracije i implicitno će ga deklarisati pod imenom it kao što možemo videti iz navedenog primera. Ako povratna vrednost lambde nije Unit (Unit je ekvivalent Void tipu u Javi) onda poslednji (ili jedini) izraz u telu se ponaša kao povratna vrednost izraza.
Lamba sintaksa u Kotlinu je jedna od njegovih najboljih funkcionalnosti i daje mu mogućnost da se kod piše kao DSL tako da bude sintaksno validan i potpuno funkcionalan.
Objavio/la članak.
ponedeljak, 3. Jul, 2017.
Petar Popović
utorak, 4. Jul, 2017.
Sve je to meni jasno, samo sam hteo da kažem da nije toliko poseban kao što bi moglo da se zaključi iz samog teksta, a pogotovo iz naslova... U svakom slučaju drago mi je da se Google "opametio" i ugledao na Apple. Nadam se da ćemo videti više kvalitetnijih aplikacija zahvaljujući Kotlinu, nego što je to bio slučaj sa Javom. Sve najbolje :)
Marko
ponedeljak, 3. Jul, 2017.
Petre, Kotlin jeste veoma slican Swift jeziku i po funkcionalnostima i po sintaksi ima sve sto i svaki moderan programski jezik treba da ima. Kao sto je Swift moderniji i napredniji jezik od ObjC tako je i Kotlin i moderniji jezik od Jave poenta je da pokrivaju razlicite ekosisteme s obzirom da Kotlin radi na JVM-u. Inace Kotlin postoji od 2011/2012 samo sto je sada i zvanicno dobio vetar u ledja od Googla ;)
Petar Popović
ponedeljak, 3. Jul, 2017.
Po čemu ga navedene funkcionalnosti izdvajaju u odnosu na Swift koji postoji već tri godine?