Saat ini di kalangan developer android sedang hangat — hangatnya membicarakan tentan bahasa pemrogramman baru yang baru saja di umumkan google menjadi salah satu official support bahasa pemrogramman untuk mengembangkan aplikasi android. Bahasa pemrogramman itu adalah Kotlin yang mungkin teman — teman disini sudah pada mengetahui nya. Disini saya akan share dengan teman — teman yang mungkin masih bingung atau ingin mengetahui dan mulai menggunakan kotlin.
Sebagai awalan untuk memulai menggunakan kotlin untuk mengembangkan aplikasi android yang akan kita develop kita perlu memahami 5 hal dari kotlin. Apa aja itu berikut ini Pembahasanya.
1. Data classes
Dalam membuat program atau aplikasi pasyi kita tidak mungkin tidak berurusan dengan data, pada pemgrogramman java kita mengenal istilah POJO ( Plai Old Java Object ) sebagai sebuah class yang akan kita gunakan sebagai model dari data yang akan kita olah. Berikut ini adalah contoh dari POJO yang biasa kita tulis dengan Java.
1 |
public class User{ |
1 2 |
private String name; private int age; |
1 2 3 |
public void setName(String name){ this.name = name; } |
1 2 3 |
public String getName(){ return name; } |
1 2 3 |
public void setAge(int age){ this.age = age; } |
1 2 3 4 |
public int getAge(){ return age; } } |
Nah dalam bahasa pemrogramman kotlin juga menyediakan fitur untuk mempermudah kita ketika akan membuat class yang akan kita gunakan untuk model dari sebuah data dan di kotlin disebut dengan Data Class yang di tandai dengan code data berikut ini contoh nya :
1 |
<strong class="markup--strong markup--pre-strong">data</strong> <strong class="markup--strong markup--pre-strong">class</strong> User(<strong class="markup--strong markup--pre-strong">val</strong> name: String, <strong class="markup--strong markup--pre-strong">val</strong> age: Int) |
Class di atas itu sudah termasuk fungsi setter dan getter, jadi gimana mudah bukan? Dan data class di kotlin juga memiliki beberapa hal yang akan memudahkan kita sebagai developer untuk mengolah data class ini.
Copying
Menduplikasi sebuah data biasanya sering kita lakukan untuk beberapa object yang dimana kita tidak ingin mengubah nilai dari sebuah object sebelumnya. Untuk itu kita bisa melakukanya seperti dibawah ini :
1 |
<strong class="markup--strong markup--pre-strong">fun</strong> copy(name: String = <strong class="markup--strong markup--pre-strong">this</strong>.name, age: Int = <strong class="markup--strong markup--pre-strong">this</strong>.age) = User(name, age) |
Jadi kita bisa membuat fungsi untuk menyalin sebuah object menjadi bentuk object baru dan kita bisa mengubah beberapa nilai dari property dari object yang akan kita salin. Berikut ini contoh penggunaanya.
1 2 |
<strong class="markup--strong markup--pre-strong">val</strong> ocit = User(name = “Rayda”, age = 21) <strong class="markup--strong markup--pre-strong">val</strong> anakOcit = ocit.copy(age = 2) |
Data Classes and Destructuring Declarations
Terkadang akan lebih nyaman jika kita menyatukan 2 variable atau lebih kedalam satu variable. Kalau di java biasanya kita buat sebuah class untuk membuat atau menyatukan dua variable atau lebih tadi. Atau juga di java biasanya kita mengguanakan HasMap dan yang lainya. Akan tetapi pada kotlin kita bisa menggunakan yang namanya Destructuring Declarations seperti ini contoh nya.
Berikut ini adalah contoh jika kita mengoperasikan pengolahan variable dengan cara tradisional :
1 |
<strong class="markup--strong markup--pre-strong">val</strong> ocit = User("Rayda", 21) |
1 2 |
printf("$ocit.name, Berumur $ocit.age tahun") // Hasilnya "Rayda, Berumur 21 tahun" |
Akan tetapi jika kita menggunakan Destructuring declarations maka akan lebih simple seperti berikut ini :
1 2 |
<strong class="markup--strong markup--pre-strong">val</strong> ocit = User("Rayda", 23) <strong class="markup--strong markup--pre-strong">val</strong> (name, age) = ocit |
1 2 |
println("$name, Berumur $age tahun") // Hasilnya "Rayda, Berumur 23 tahun" |
2. Object declarations
Pada java untuk beberapa kasus untuk membuat data hanya bisa di inisiasi menjadi satu object saja, biasanya kita menggunakan sebuah Pattern yang biasa disebut dengan Singgleton. Salah satu yang mungkin biasa kita gunakan adalah penggunaan sebuah method pada satu class yang kita bisa akses secara langsung tanpa kita perlu membuat instance dari sebuah class yang berisi method tersebut. Berikut ini adalah contoh nya :
1 |
public class DataProviderManager{ |
1 2 3 |
public static void registerDataProvider(DataProvider dataProvider){ // .... } |
1 2 3 |
public static List<DataProvider> getAllDataProvider(){ // ... } |
1 |
} |
Untuk penggunaanya seperti berikut ini :
1 2 |
DataProviderManager.registerDataProvider(...) List<DataProvider> dataProvider = DataProviderManager.getAllDataProvider() |
Nah di kotlin kita bisa dengan mudah membuat sebuah object yang hanya memiliki satu inisiasi yang di sebut dengan object declarations berikut ini contohnya.
1 2 3 4 5 6 7 8 |
<strong class="markup--strong markup--pre-strong">object</strong> DataProviderManager { <strong class="markup--strong markup--pre-strong">fun</strong> registerDataProvider(provider: DataProvider) { // set add dataProvider } <strong class="markup--strong markup--pre-strong">val</strong> allDataProviders: Collection<DataProvider> <strong class="markup--strong markup--pre-strong">get</strong>() = // get all data provider } |
Untuk penggunaan nya kita bisa langsung akses ke function yang telah dibuat seperti contoh berikut ini :
1 2 |
DataProviderManager.registerDataProvider(…) val allDataProviders = DataProviderManager.allDataProviders |
Object ini juga bisa kita gunakan untuk mendeklarasikan anonymous inner class yang biasa di java kita gunakan ketika kita mengoverride method yang dari sebuah interaface.
Berikut contoh pada java :
1 2 3 4 5 |
new TextView(this).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { } }); |
Di kotlin kita bisa lakukan seperti ini :
1 2 3 4 5 6 |
TextView(this).setOnClickListener(object: View.OnClickListener{ override fun onClick(view: View?) { } }) |
3. Companion objects
Companion object ini masih berkaitan dengan sebuah pattern yang di sebut singgleton. Nah berikut ini adalah hal yang biasa kita lakukan pada java jika kita ingin membuat atau mengimplementasikan sebuah singgleton patter.
1 2 |
public class MyClass{ public static MyClass INSTANCE; |
1 2 3 4 5 6 |
public static MyClass create(){ if(INSTANCE == null){ INSTANCE = new MyClass(); } return INSTANCE; } |
1 |
} |
Dan untuk penggunaan seperti berikut ini :
1 |
MyClass myClass = MyClass.create(); |
Pada bahasa pemogramman kotlin kita mengenal istilah companion untuk membuat sebuah object singgleton ini. Dan berikut ini cara pembuatan dan penggunaanya :
1 2 3 4 5 |
<strong class="markup--strong markup--pre-strong">class</strong> MyClass { <strong class="markup--strong markup--pre-strong">companion</strong> <strong class="markup--strong markup--pre-strong">object</strong> Factory { <strong class="markup--strong markup--pre-strong">fun</strong> create(): MyClass = MyClass() } } |
Untuk cara penggunaanya seperti berikut ini:
1 |
<strong class="markup--strong markup--pre-strong">val</strong> instance = MyClass.create() |
Kita juga bisa membuat companion lebih sederhana seperti berikut ini :
1 2 3 4 |
<strong class="markup--strong markup--pre-strong">class</strong> MyClass { <strong class="markup--strong markup--pre-strong">companion</strong> <strong class="markup--strong markup--pre-strong">object</strong> { } } |
1 |
<strong class="markup--strong markup--pre-strong">val</strong> x = MyClass.Companion |
Cara lain untuk membuat companion adalah kita bisa menggunakan interface seperti berikut ini :
1 2 3 |
interface Factory<T> { fun create(): T } |
1 2 3 |
class MyClass { companion object : Factory<MyClass>{ override fun create(): MyClass = MyClass() |
1 2 |
} } |
1 |
val myClass = MyClass.create() |
4. String templates
Seperti yang kita ketahui pada basic pemrogramman base on JVM String bukanlah sebuah type data String adalah sebuah class yang memiliki keistimewaan yang bisa kita deklarasikan langsung nilainya.
Pada bahasa pemgrogramman kotlin kita akan di mudahkan jika berurusan dengan String, dan di kotlin di namai dengan String Templates. Nah berikut ini contoh penggunaan dari String templates :
Dengan String Template kita bisa pass sebuah variable kedalam object string hanya dengan menambahkan sebuah simbol $ yang mana itu tidak ada pada bahasa pemrogramman kotlin. Berikut ini jika kita lakukan di java dana kotlin.
Pada Java akan seperti ini :
1 2 |
int i = 10; String s = "i = " + i; //nilainya "i = 10" |
Dan pada kotlin jika kita menggunakan String Template akan seperti ini :
1 2 |
<strong class="markup--strong markup--pre-strong">val</strong> i = 10 <strong class="markup--strong markup--pre-strong">val</strong> s = “i = $i” //nilainya “i = 10” |
Atau kita juga bisa akses sebuah method melalui String Templates ini dengan menambahkan symbol ${…} berikut ini contoh penggunaanya :
1 2 |
<strong class="markup--strong markup--pre-strong">val</strong> s = "abc" <strong class="markup--strong markup--pre-strong">val</strong> str = "$s.length is ${s.length}" // evaluates to "abc.length is 3" |
5. Interoperability with Java
Bagi kamu yang baru migrasi ke kotlin yang asalnya kamu mahir pada java maka itu akan sangat mudah sekali, karena pada dasarnya code yang di tulis pada Kotlin akan di eksekusi pada JVM (Java Virtual Machine) dimana JVM ini adalah core dasarnya Java. So kita bisa bilang cara berfikir kotlin dan java sama saja konsep dasarnya sama saja. Akan tetapi banyak pattern baru yang diterapkan di kotlin yang mana itu akan membuat kita sebagai programmer akan lebih mudah dalam menulis kode sehingga kita bisa menjadi lebih produktif di setiap hari — hari kita koding.
Nah pada pembahasan yang terakhir ini kita akan bahas bagaimana cara kita mengintegrasikan kotlin dan java. Mungkin disini teman — teman ada yang ingin migrasi ke kotlin tapi tidak mau mengubah semua code yang sudah pernah di tulis dengan java ke kotlin. Untuk itu berikut ini adalah pembahasan kita tentang bagaimana menghubungkan kotlin dan juga java pada project yang akan kita kerjakan.
Type Data
Karena di kotlin semua adalah object maka setiap type data di java di buat class pada kotlin. Berikut ini adalah daftar type data pada java dan kotlin.

Dan berikut untuk tradisional class pada java dan kotlin

Setter & Getter
Pada saat kita membuat model dengan java maka biasanya kita tidak akan lepas dengan yang namanya Setter dan Getter ini. Okay katakanlah kita memiliki sebuah class user seperti ini :
1 |
public class User{ |
1 2 |
private String name; private int age; |
1 2 3 |
public void setName(String name){ this.name = name; } |
1 2 3 |
public String getName(){ return name; } |
1 2 3 |
public void setAge(int age){ this.age = age; } |
1 2 3 4 |
public int getAge(){ return age; } } |
Dan kita bisa akses class di atas pada kotlin sebagai data class dan seperti berikut ini cara penggunaanya :
1 2 |
// membuat objectnya val user = User() |
1 2 3 |
// Melakukan Setter user.name = "Rayda" user.age = 21 |
1 2 3 |
// melakukan getter val name = user.name val age = user.age |
Null Safety
Pada kotlin semua hal bersifat object dan kita tau pada JVM jika kita membuat sebuah object maka kita perlu memberi nilai atau instance dari sebuah object tersebut. Untuk itu kita perlu berhati — hati bila berurusan dengan object, apa bila sebuah object tidak memiliki nilai kemudian kita mengaksesnya maka akan mengakibatkan aplikasi yang kita buat menjadi crash atau force close dan lain sebagainya yang intinya code kita akan jadi error ketika di eksekusi pada JVM.
Beberapa object pada java itu bersifat null yang mana kita perlu melakukan pengamanan terhadap object yang null ini. Perhatikan code berikut ini.
1 |
<strong class="markup--strong markup--pre-strong">val</strong> list = ArrayList<String>() |
Variable di atas adalah variable yang benar dan dia memiliki sebuah instance akan tetapi tidak memiliki nilai. Jika kita lakukan akses data seperti ini misalnya :
1 2 3 |
<strong class="markup--strong markup--pre-strong">val</strong> size = list.size() // tidak akan error karna ada instance <strong class="markup--strong markup--pre-strong">val</strong> item = list[0] // akan error karna jumlah data 0 </code>item.substring(1) // akan data Null Pointer Exceptions |
Dan jika kita memasukkan ke variable maka perlu di perhatikan adalah menggunakan tanda ? pada saat kita akan menggunakan variable yang nilanya masih di ragukan.
1 2 |
<strong class="markup--strong markup--pre-strong">val</strong> nullable: String? = item // dibolehkan, selalu bekerja <strong class="markup--strong markup--pre-strong">val</strong> notNull: String = item // dibolehkan, dan bisa error pada saat di jalankan |
Arrays
Arrays adalah sebuah class yang biasa kita gunakan untuk membuat sebuah data array yang simple secara cepat.
1 2 |
//Pada java List<Integer> data = Arrays.<em class="markup--em markup--pre-em">asList</em>(1,2,3); |
1 2 |
//Dengan Kotlin val data = intArrayOf(1,2,3) |
Dan masih banyak hal yang lainya dan jika temen — temen ingin membaca lebih detailnya silahkan buka tautan ini
Calling Java from Kotlin — Kotlin Programming Language
Kotlin is a statically typed programming language for the JVM, Android and the browser, 100% interoperable with Java