Co je na kotlinu tak super? Koukl jsem se jim na stránku a nevidím jediný důvod proč se to učit.
Nuž treba to začať študovať hlbšie a začať si v tom programovať príklady; nestačí sa len dívať na dokumentáciu. Skúsený Javista začne po chvíli vidieť výhody Kotlinu. Čím viac ho študujem, tým viac vidím tie desiatky a stovky drobných zlepšení, ktoré v konečnom synergickom efekte nesmierne zlepšujú tvorbu kódu.
package com.zetcode;
import java.util.ArrayList;
import java.util.List;
public class JavaEx {
public static void main(String[] args) {
List<String> words = new ArrayList<>();
words.add("pen");
words.add("dog");
words.add("pencil");
words.forEach(word -> System.out.println(word));
}
}
Zoberme si jednoduchý príklad v Jave a obdobný v Kotline.
package com.zetcode
fun main(args: Array<String>) {
val words = listOf("pen", "pencil", "dog")
words.forEach { word -> println(word) }
}
Kotlin umožňuje používanie funkcií, v Jave máme len metódy, t.j. nemusíme pri definovaní funkcie vždy vytvoriť triedu.
V príklade vidíme, že nepoužívame bodkočiarku (ala Python) na ukončenie príkazu. Máme literálový zápis na tvorbu
menších zoznamov, čo bolo jedným z najväčších pain in the ass Javy pre mňa. Pre výpis na konzolu používame println oproti zdĺhavému System.out.println.
Typová inferencia pri premennej words. (Chystá sa pre Javu 10.) Kotlin nemá ten debilný statický kontext, ktorý len prinášal viac problémov ako osohu. Kotlin má citlivo zvolená názvoslovie, mne sa proste najviac páči kľúčové slovo fun, oproti function (príliš dlhé), fn, def a pod. To isté pri val, oveľa viac mi to sedí ako const (JavaScript).
package com.zetcode;
public class JavaEx {
public static void main(String[] args) {
System.out.println(max(4, 5));
}
public static int max(int x, int y) {
if (x > y) {
return x;
} else {
return y;
}
}
}
package com.zetcode
fun main(args: Array<String>) {
println(max(30, 40))
}
fun max(x: Int, y: Int) : Int = if (x > y) x else y
if je v Kotline výraz, čo nám umožňuje použiť ho ako priradenie na pravej strane. Je to jedným z tých bezpočet malých zlepšení. Kotlin ďalej odbremení programátora od rozdielu medzi primitívnymi a objektovými dátovými typmi.
Viacriadkové reťazce, napríklad pri veršoch.
package com.zetcode;
public class JavaEx {
public static void main(String[] args) {
String sonnet = "Not marble, nor the gilded monuments\n" +
"Of princes, shall outlive this powerful rhyme;\n" +
"But you shall shine more bright in these contents\n" +
"Than unswept stone, besmear'd with sluttish time.\n" +
"When wasteful war shall statues overturn,\n" +
"And broils root out the work of masonry,\n" +
"Nor Mars his sword nor war's quick fire shall burn\n" +
"The living record of your memory.\n" +
"'Gainst death and all-oblivious enmity\n" +
"Shall you pace forth; your praise shall still find room\n" +
"Even in the eyes of all posterity\n" +
"That wear this world out to the ending doom.\n" +
"So, till the judgment that yourself arise,\n" +
"You live in this, and dwell in lovers' eyes.\n";
System.out.println(sonnet);
}
}
V Jave musíme zdĺhavo sčítať reťazce, použiť znak nového riadku. Nevyzerá to bohvie ako.
package com.zetcode
fun main(args: Array<String>) {
val sonnet = """
Not marble, nor the gilded monuments
Of princes, shall outlive this powerful rhyme;
But you shall shine more bright in these contents
Than unswept stone, besmear'd with sluttish time.
When wasteful war shall statues overturn,
And broils root out the work of masonry,
Nor Mars his sword nor war's quick fire shall burn
The living record of your memory.
'Gainst death and all-oblivious enmity
Shall you pace forth; your praise shall still find room
Even in the eyes of all posterity
That wear this world out to the ending doom.
So, till the judgment that yourself arise,
You live in this, and dwell in lovers' eyes.
"""
println(sonnet.trimIndent())
}
Kotlin to zjednodušuje výrazne, navyše elegantne jednou metódou odstráni vytvorené odsadenie. Podobne to má Python, ale oproti Kotlinu v Pythone musíme použiť navyše importovať funkciu z modulu.
Takto by som mohol pokračovať dlho. Tie zlepšenie nemajú konca, neustále narážam na nové a nové skvelé veci. Ako hovorím, seasoned Java programátor si veľmi rýchlo uvedomí, ako ohromne zlepší Kotlin prácu Java programátora.
Samostatnou kapitolou sú Kotlin DSL, ktoré takéto zlepšenia umožnia pre knižnice a výrazne zlepšia prácu s SQL, UI, súbormi atď.
No a ak by sa podarilo nahradiť JavaScript Kotlinom...