Pengertian Kotlin
Pada tahun 2010 JetBrains memulai sebuah proyek open-sources bahasa
pemrograman statically typed, yang menargetkan JVM, Android, JavaScript dan
Native. Kotlin -nama sebuah pulau di Rusia- menjadi inspirasi oleh tim pengembang
untuk ditetapkan sebagai nama bahasa pemrograman tersebut.Bahasa Kotlin pertama
kali dirilis pada bulan Februari 2016..
Untuk kenal lebih tentang bahasa pemrograman, tentu kita harus mengetahui
karakteristik dari bahasa tersebut. Kotlin adalah bahasa pemrograman yang ringkas,
aman, pragmatis dan difokuskan pada interoperabilitas dengan bahasa Java. Kotlin
berjalan lancar dengan semua library dan frameworks Java yang sudah ada.Mari kita
bahas bersama beberapa karakteristik tersebut.
Kotlin dikenal dengan bahasa modern yang ringkas untuk dituliskan. Kotlin mampu
memangkas berbaris-baris kode menjadi hanya beberapa baris saja.Kotlin memiliki
fungsi-fungsi bawaan yang namanya mudah diingat. Bahkan pilihan keyword yang
terkesan sangat sederhana. Mari kita perhatikan perbandingan antara Kotlin dan Java
berikut:
Java:
Kotlin:
1. class SomeClasses{
2. fun main(){
3. println("Hello")
4. }
Kotlin tidak memerlukan semicolon atau tanda titik koma (;).Sederhana, tapi
tak jarang programer dibuat pusing karena lupa menambahkan semicolon di akhir
kode ketika ngoding dengan Java. Kode di atas memiliki kegunaan yang sama
namun dituliskan dengan bahasa pemrograman yang berbeda. Terlihat dengan
sangat jelas bahwa kode yang dituliskan dengan Kotlin lebih ringkas dan lebih
mudah dipahami.
2. Pragmatic
Kotlin dikembangkan berdasarkan permasalahan-permasalahan yang sering dialami
oleh programer di JetBrains. Tanpa mengesampingkan saran dan feedback dari
komunitas, dalam setiap rilisnya Kotlin selalu memperbarui fitur-fitur yang ada demi
solusi praktis bagi programer.
3. Safe
Dengan berjalannya Kotlin di atas JVM, keamanan dari sisi memori lebih terjamin. Di
samping itu Kotlin juga menjamin bahwa tingkat keamanan lebih tinggi dibandingkan
dengan Java. Misalnya, ketika ingin mendeklarasikan sebuah tipe pada Kotlin, baik
tipe data, argumen, ataupun lainnya, Kotlin mampu menyimpulkannya secara
otomatis.
Secara default, Kotlin mengasumsikan nilai dari sebuah properti tidak boleh null.
Oleh karena itu, kode pada baris kedua akan langsung dianggap eror. Kita pun bisa
menetapkan sebuah properti nullable dengan menambahkan tanda (?) pada tipe
datanya.
1. var a : String? = "Kotlin"
2. a = null
Properti a sekarang bisa ditetapkan sebagai nullable, dan untuk mengaksesnya kita
perlu menerapkan sebuah mekanisme untuk menghindari kesalahan kompilasi.
Terdapat beberapa cara yang bisa dilakukan.
4. Statically Typed
Kotlin memungkinkan kita untuk tidak menuliskan tipe variabel secara eksplisit. Ini
akan menghindarkan kita dari kesalahan seperti salah menuliskan tipe data atau yang
lainnya. Sebagai contoh:
Tanpa menuliskan tipe data String secara eksplisit, kompiler secara otomatis akan
mengetahui bahwa variabel company merupakan sebuah String. Sebabnya, variabel
tersebut diisi dengan nilai String. Tentunya ini juga membuat kode yang dituliskan
menjadi lebih ringkas. Fitur tersebut dinamakan dengan type inference, yaitu sebuah
mekanisme yang dijalankan oleh kompiler untuk menyimpulkan tipe dari sebuah
context.
Kotlin mempunyai lisensi Apache 2.0. Anda pun bisa memantau atau berkontribusi
untuk pengembangan Kotlin pada repo-nya di https://github.com/jetbrains/kotlin.
Beberapa IDE yang bisa Anda gunakan seperti IntelliJ IDEA, Android Studio dan
Eclipse juga termasuk ke dalam open-sources software.Saat ini sudah terdapat ratusan
developer yang berkontribusi dengan ribuan commit-nya pada pengembangan Kotlin.
Ekosistem Kotlin
Di Indonesia Kotlin mulai ramai digunakan sejak tahun 2017. Pada tahun Kotlin
ditetapkan sebagai bahasa pemrograman resmi pleh Android.
https://developer.android.com/kotlin
Baik di luar negeri atau pun di Indonesia, setiap harinya komunitas online selalu
ramai dengan diskusi-diskusi seputar Kotlin. Tak jarang juga komunitas yang
mengadakan acara offline secara rutin. Ini pertanda komunitas Kotlin, sangat kuat.
Dengan banyaknya developer expert yang peduli membagikan ilmunya, akan
mempermudah teman-teman developer yang baru untuk mulai belajar Kotlin.
Berikut adalah beberapa kanal komunitas yang bisa Anda ikuti untuk mendapatkan
update rutin seputar Kotlin:
Kotlin Indonesia
Kotlinlang
Antonioleiva.com
Kotlin Weekly
Kotlin.link
The Daily Kotlin
Talking Kotlin
JDK. Meski terlihat sama, masing-masing dari ketiganya, punya peran sendiri-
sendiri. JDK (Java Development Kit) adalah sebuah perangkat lunak yang
menyediakan beberapa tools untuk pengembangan dan berkas binari yang
diperlukan untuk proses kompilasi dari kode Java ke bytecode.
JVM atau Java Virtual Machine bertanggung jawab untuk melakukan konversi
bytecode kedalam bahasa mesin. JVM juga menyediakan fungsi inti dari Java
seperti memory management, garbage collection, security dan sebagainya.
JRE atau Java Runtime Environment, merupakan implementasi dari JVM yang
menyediakan sebuah platform untuk menjalankan program. JRE diperlukan
untuk menjalankan program.
Pada dasarnya setiap JDK yang bisa kita gunakan, punya basis OpenJDK dan bersifat
open-source. Yang membedakannya adalah bagaimana JDK tersebut didistribusikan.
Contoh distribusinya bisa dari Oracle (OracleJDK), OpenJDK Distribution atau Azul
Zulu JDK.
Build Tools
Build tools adalah perangkat lunak yang akan kita gunakan untuk membantu
mengotomatisasi proses. Selain kompiler command line dan IntelliJ IDEA, Anda juga
dapat menggunakan Gradle sebagai build tools-nya. Karena gradle cukup fleksibel
dalam membantu proses kompilasi
Gradle merupakan sebuah perangkat lunak open-sources yang bisa kita gunakan untuk
berbagai macam keperluan dalam pengembangan aplikas. Gradle mendukung proses
pengunduhan dan konfigurasi secara otomatis dari sebuah dependensi atau library
lain. Selain itu, Gradle berfokus pada fleksibilitas dan kinerja sehingga
memungkinkan kita untuk membangun sebuah aplikasi dengan mudah.
Gradle memiliki beberapa fitur yang cukup penting, seperti performa yang cukup
stabil dan sudah didukung oleh beberapa IDE terkenal seperti Eclipse, NetBeans,
Android Studio dan Intellij IDEA. Untuk mengetahui lebih dalam tentang keunggulan
dalam penggunaan Gradle, silakan membacanya pada tautan ini.
Proses pengembangan aplikasi tak lepas dari bantuan IDE. Memang tanpa IDE kita
tetap bisa membuat program dengan text editor. Namun, fitur-fitur yang IDE
tawarkan akan membuat proses pengembangan menjadi jauh lebih mudah dan
efisien.
Pada umumnya IDE menyediakan beberapa fitur seperti text editor yang akan kita
gunakan untuk menulis kode, tools untuk mengotomatisasi proses build dari program
yang kita buat dan sebuah debugger yang akan membantu kita mendeteksi dan
memperbaiki kesalahan yang terdapat pada program. Terdapat berbagai macam IDE
yang mendukung pengembangan dengan bahasa pemrograman Kotlin seperti IntelliJ
IDEA, Android Studio, Eclipse, dan NetBeans. Dari semua IDE tersebut, IntelliJ
IDEA dan Android Studio lah yang paling direkomendasikan. Anda bisa
menggunakan IntelliJ IDEA untuk pengembangan aplikasi secara umum dan Android
Studio untuk pengembangan aplikasi Android.
Instalasi OpenJDK
OpenJDK bisa Anda unduh secara gratis pada situs http://jdk.java.net/12/ dengan
memilih versi dan sistem operasi yang digunakan. Saat ini versi OpenJDK yang
terbaru adalah versi 12.Setelah mengunduh binary OpenJDK untuk. Sekarang ekstrak
berkasnya ke dalam folder C:\Program Files (x86)\Java. Jika tidak ada folder Java,
tambahkanlah secara manual. Selanjutnya, Anda juga perlu mengatur lokasi folder
OpenJDK pada Environment Variable. Ikuti langkah-langkah berikut:
1. Buka Control Panel kemudian masukkan system variable pada kolom
pencarian.
2. Pilih Edit the system environment variables pada hasil pencarian.
3. Pada jendela yang tampil, klik tombol Environment Variables yang berada
di bawah.
4. Fokus pada bagian User variables, klik tombol New.
5. Setelah terbuka, masukkan JAVA_HOME pada kolom variable name dan
lokasi folder Java pada variable value.
6. Setelah itu, klik OK.
7. Masih pada jendela Environment Variables, pilih variable path yang berada
pada bagian System Variable kemudian klik Edit.
8. Setelah jendela baru terbuka, klik tombol New dan
masukkan %JAVA_HOME%\bin lalu klik OK.
9. Klik OK pada jendela Environment Variables.
10. Buka Command Prompt kemudian jalankan perintah echo %JAVA_HOME
%. Pastikan yang tampil adalah lokasi folder Java yang sudah kita atur seperti
berikut:
Untuk memastikan apakah instalasi sudah berhasil, jalankan perintah javac -version
pada Command Prompt. Pastikan versi dari Java telah ditampilkan. Namun jika
yang tampil ternyata adalah pesan javac is not recognized, pastikan kembali lokasi
yang diatur pada Environment Variable sudah benar. Jika dirasa sudah benar tapi
masih menampilkan eror yang sama, Anda bisa coba menuliskan lokasi JDK pada
Environment Variables seperti berikut:
Namun jika masih tetap menampilkan eror , silakan restart komputer Anda.
Instalasi Gradle
Syaratnya menginstal gradle, yaitu komputer yang digunakan wajib terinstal JDK
terlebih dahulu. Instalasi Gradle bisa dilakukan secara manual ataupun menggunakan
SDKMAN. Untuk menginstalnya secara manual, Anda bisa mengikuti langkah-
langkah berikut:
1. Unduh berkas distribusi Gradle pada tautan https://gradle.org/releases/. Anda
bisa memilih binary-only atau complete yang disertai dengan dokumentasi.
2. Setelah selesai, ekstrak ke folder yang diinginkan. Sebaiknya tempatkanlah
pada folder yang mudah dijangkau. Ini akan mempermudah konfigurasi
Environment Variable.
Selesai, klik OK pada jendela yang tampil dan jendela Environment Variable.
Sebelum melakukan instalasi IntelliJ IDEA, ketahui terlebih dahulu beberapa syarat di
masing-masing sistem operasi sebagai berikut:
Pastikan komputer Anda memenuhi syarat di atas. Jika sudah, unduhlah berkas
instalasi IntelliJ IDEA berdasarkan sistem operasi yang digunakan pada tautan
https://www.jetbrains.com/idea/download/. Anda bisa mengunduh versi Community
untuk penggunaan lisensi secara gratis. Selanjutnya ikuti langkah-langkah instalasi
sesuai sistem operasi yang digunakan.
Berbeda dengan Linux, jika menggunakan Windows atau macOS, Anda tidak perlu
mengekstrak hasil unduhan. Anda bisa langsung menjalankan berkas idealC-
2019.3.1.exe (Windows) atau idealC-2019.3.1.dmg (macOS). Lalu ikuti instruksi
pada jendela yang tampil untuk menyelesaikan proses instalasi.
Setelah tampil jendela baru, masuk pada bagian SDKs dan pastikan terdapat
konfigurasi JDK seperti berikut:
Pastikan Anda melihat konfigurasi seperti pada gambar di atas. Karena jika tidak
terdapat konfigurasi JDK maka kita tidak bisa membuat proyek baru. Jika itu terjadi,
Anda bisa menambahkannya secara manual dengan cara:
1. Klik ikon “+” yang berada di sisi kiri pada jendela yang tampil.
2. Pada pilihan yang muncul, klik JDK.
3. Setelah jendela baru terbuka, arahkan pada lokasi instalasi JDK kemudian klik
OK.
4. Pastikan tidak terjadi eror. Klik OK lalu Apply.
Kotlin Fudamental
Sebelum ke topik fundamental tersebut, mari kita awali dengan pembahasan tentang
program Hello Kotlin!.sebuah program sederhana yang digunakan untuk mencetak
sebuah teks “Hello Kotlin!” ke dalam layar atau konsol. Berikut adalah contoh kode
dari program tersebut:
1. // main function
2. fun main() {
3. println("Hello Kotlin!")
4. }
Baris pertama dari kode di atas adalah komentar yang ditandai dengan tanda //.
1. // main function
Komentar bisa kita gunakan untuk mendokumentasikan kode yang kita tulis.Terdapat
dua jenis komentar yang bisa kita gunakan. Pertama adalah single line comment yaitu
komentar satu baris yang diawali dengan tanda // dan berakhir di akhir baris komentar
tersebut.
Yang kedua adalah multi-line comment yang diawali dengan tanda /* dan diakhiri
dengan tanda */.
1. /*
2. multi line comment
3. Hello Kotlin
4. */
Selanjutnya adalah fungsi yang bernama main(), fungsi yang wajib kita definisikan
ketika membuat sebuah program. Fungsi main() merupakan sebuah entry point yang
otomatis akan dipanggil ketika program dijalankan.
Kemudian fungsi println(), fungsi yang akan kita gunakan untuk mencetak teks ke
dalam layar atau konsol. Terdapat juga fungsi print() yang berfungsi sama seperti
fungsi println(). Bedanya, println() akan menambahkan baris baru setelah selesai
mencetak argumen yang diberikan, sementara fungsi print() tidak melakukan apapun
ketika argumen yang diberikan, selesai dicetak. Untuk memahaminya lebih dalam,
coba jalankan kode berikut:
1. fun main() {
2. val name = "Latoe"
3.
4. print("Hello my name is ")
5. println(name)
6. print(if (true) "Always true" else "Always false")
7. }
8.
9. /*
10. output:
11. Hello my name is Latoe
12. Always true
13. */
Data Type
Data types atau tipe data adalah sebuah pengklasifikasian data berdasarkan jenis data
tersebut. Untuk mengembangkan sebuah program, ada beberapa tipe data di antaranya
adalah Character, String, Array, Numbers dan Booleans. namun sebelumnya, ada satu
hal yang kita perlu tahu terlebih dahulu, yaitu Variabel. variabel digunakan untuk
menyimpan informasi atau nilai yang akan dikelola di dalam sebuah program. Sebuah
variabel akan membutuhkan kata kunci var atau val, identifier, type dan initialization.
Kira-kira strukturnya seperti berikut:
var atau val digunakan untuk mengontrol nilai dari sebuah variabel. Dengan kata
kunci var kita bisa mengubah nilai yang sudah kita inisialisasikan. Sebagai contoh:
Variabel nama yang awalnya memiliki nilai “Azlan Rafar” sekarang sudah diubah
menjadi “L Azlan Rafar”. Sedangkan jika kita menggunakan kata kunci val, kita
tidak bisa mengubah nilai yang sebelumnya sudah kita inisialisasi. Jika kita memaksa
untuk mengubahnya, maka akan terjadi eror.
1. Characters
Tipe data Char hanya dapat kita gunakan untuk menyimpan karakter tunggal.
Sebaliknya jika kita memasukkan lebih dari 1 (satu) karakter, akan terjadi eror:
1. fun main() {
2. var vocal = 'A'
3.
4. println(“Vocal “ + vocal++)
5. println("Vocal " + vocal++)
6. println("Vocal " + vocal++)
7. println("Vocal " + vocal--)
8. println("Vocal " + vocal--)
9. println("Vocal " + vocal--)
10. println("Vocal " + vocal--)
11. }
12.
13. /*
14. output:
15. Vocal A
16. Vocal B
17. Vocal C
18. Vocal D
19. Vocal C
20. Vocal B
21. Vocal A
22. */
2. Strings
String direpresentasikan menggunakan tipe String. Nilai yang berada di dalam sebuah
variabel dengan tipe data String merupakan kumpulan dari beberapa karakter. Kita
bisa mendefinisikan variabel tersebut dengan tanda petik ganda (" ") seperti berikut:
Kotlin memiliki dua jenis tipe Literal String, yang pertama adalah Escaped String
yang memungkinkan kita untuk mengurangi ambiguitas nilai yang berada di dalam
sebuah String. Misalnya ketika kita mendefinisikan sebuah String berikut:
Kemudian kita ingin menambahkan tanda petik ganda di dalam sebuah String seperti
berikut:
Maka akan terjadi ambiguitas nilai pada variabel statement karena kompiler tidak
dapat mengetahui akhir dari baris nilai untuk variabel statement. Untuk mengatasinya,
kita bisa melakukan escaped dengan menambahkan karakter backslash (\) sebelum
tanda petik ganda seperti berikut:
Selain \” di atas, terdapat beberapa karakter lain yang dapat digunakan untuk
melakukan escaped didalam sebuah String, antara lain:
Selain itu, kita juga bisa menambahkan sebuah Unicode ke dalam sebuah String
seperti berikut:
1. fun main() {
2. val name = "Unicode test: \u0394"
3. print(name)
4. }
5.
6. /*
7. output: Unicode test : Δ
8. */
Kedua, adalah Raw String yang memungkinkan kita menuliskan multiline dan
arbitrary text. Ketika ingin membuat beberapa baris String biasanya kita melakukan
escaped terhadap String dengan memanfaatkan karakter escape \n seperti berikut:
Dengan Raw String, kita dapat membuatnya dengan cara yang lebih mudah yaitu
seperti berikut:
1. fun main() {
2. val line = """
3. Line 1
4. Line 2
5. Line 3
6. Line 4
7. """.trimIndent()
8.
9. print(line)
10. }
11.
12. /*
13. output:
14. Line 1
15. Line 2
16. Line 3
17. Line 4
18. */
Pada kode di atas, kita mendefinisikan sebuah Raw String menggunakan triple
quote (""" """). Raw String memungkinkan kita untuk membuat beberapa baris
String tanpa penggabungan (concatenation) dan penggunaan karakter escaped.
3. Numbers
Number adalah sebuah tipe data yang khusus digunakan untuk menyimpan nilai
dalam bentuk numerik.Di Kotlin, tipe data Number disimpan dengan cara yang
berbeda. Beberapa tipe bawaan yang merepresentasikan Numbers adalah Double,
Long, Int, Short dan Byte. Setiap tipe data Number memiliki ukuran (satuan Bit)
berbeda-beda, tergantung besaran nilai yang dapat simpan.
Int adalah tipe data yang umumnya digunakan untuk menyimpan nilai
numerik. Int dapat menyimpan data dari range -2^31 sampai +2^31-1. Dengan
ukuran 32 Bit kita bisa menggunakannya untuk menyimpan nilai yang besar. .
Long adalah tipe data yang digunakan untuk menyimpan nilai numerik yang
lebih besar yaitu dari range -2^63 sampai +2^63-1. Long bisa didefinisikan
secara eksplisit:
Short merupakan sebuah bilangan bulat yang hanya dapat menyimpan nilai
yang kecil karena hanya berukuran 16 Bit.
1. val ShortNumber: Short = 10
Byte (8 Bit)
Byte biasa digunakan untuk keperluan proses membaca dan menulis data dari
sebuah stream file atau jaringan.
Untuk mengetahui nilai maksimal yang dapat disimpan oleh suatu tipe Number, kita
bisa menggunakan properti MAX_VALUE. Sementara untuk mengetahui nilai
minimal yang dapat disimpan, gunakan properti MIN_VALUE.
1. fun main() {
2. val maxInt = Int.MAX_VALUE
3. val minInt = Int.MIN_VALUE
4.
5. println(maxInt)
6. println(minInt)
7.
8. /*
9. output :
10. 2147483647
11. -2147483648
12. */
13. }
Jika kita memasukan nilai melebihi nilai maksimal yang dapat disimpan, maka akan
terjadi overflow. Nilai yang akan dikembalikan adalah nilai minimal yang dapat
disimpan.
Terdapat beberapa operator matematika pada tipe data Number seperti penjumlahan
(+), pengurangan (-), perkalian (*) , pembagian (/) dan modulus (%, atau sisa hasil
bagi).
1. // main function
2. fun main() {
3. val numberOne = 1
4. val numberTwo = 2
5.
6. print(numberOne + numberTwo)
7. /*
8. output : 3
9. */
10. }
Di Kotlin kita tidak bisa melakukan konversi secara langsung. Contoh, ketika ingin
melakukan konversi dari tipe data Byte ke tipe data Int.
1. fun main() {
2. val byteNumber: Byte = 1
3. val intNumber: Int = byteNumber // compile error
4. }
Error:(4, 18) Kotlin: Type mismatch: inferred type is Byte but Int was expected
Untuk mengatasinya, lakukan konversi dengan bantuan beberapa fungsi seperti toInt()
berikut:
1. fun main() {
2. val byteNumber: Byte = 10
3. val intNumber: Int = byteNumber.toInt() // ready to go
4. }
Kode d iatas menggunakan fungsi toInt() untuk melakukan konversi secara eksplisit
dari tipe data Byte ke tipe data Int. Adapun beberapa fungsi konversi yang dapat kita
gunakan antara lain:
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char
4. Boolean
Boolean adalah sebuah tipe data yang hanya memiliki dua nilai, yaitu true dan false.
Terdapat 3 (tiga) operator yang dapat digunakan pada Boolean.
Operator AND (&&) akan mengembalikan nilai true jika semua hasil evaluasi
expression yang diberikan bernilai true.
1. fun main() {
2. val officeOpen = 7
3. val officeClosed = 16
4. val now = 20
5.
6. val isOpen = if (now >= officeOpen && now <=
officeClosed){
7. true
8. } else {
9. false
10. }
11.
12. print(“Office is open : $isOpen”)
13.
14. /*
15. Output : Office is open : false
16. */
17. }
Fungsi di atas menguji apakah jam sekarang berada di antara jam waktu buka
kantor dan jam tutup kantor.
Berbeda dengan operator AND (&&), operator OR (||) akan mengembalikan nilai
true jika hasil evaluasi dari salah satu expressions yang diberikan bernilai true.
1. fun main() {
2. val officeOpen = 7
3. val officeClosed = 16
4. val now = 20
5.
6. val isOpen = now < officeOpen || now > officeClosed
7.
8. print("Office is closed : $isOpen")
9. /*
10. Output : Office is closed : true
11. */
12. }
Variabel isOpen di atas bernilai true. Alasannya, hasil evaluasi salah satu
expression yang diberikan, bernilai true, yaitu expression disebelah kanan.
1. fun main() {
2. val officeOpen = 7
3. val now = 10
4. val isOpen = now > officeOpen
5.
6. if (!isOpen) {
7. print(“Office is closed”)
8. } else {
9. print("Office is open")
10. }
11.
12. /*
13. Output : Office is open
14. */
15. }
Hasil evaluasi expression di atas adalah true. Tapi ketika menggunakan operator
NOT maka akan dinegasikan menjadi nilai false. Sehingga statement pada branch
else-lah yang akan dijalankan.
5. Arrays
Array adalah tipe data yang memungkinkan kita untuk menyimpan beberapa objek di
dalam sebuah variabel. Array di Kotlin direpresentasikan oleh kelas Array yang
memiliki fungsi get dan set serta properti size. Untuk membuat sebuah Array kita bisa
memanfaatkan sebuah library function arrayOf() seperti berikut:
Kita juga dapat memasukkan nilai dengan berbagai jenis tipe data ke dalam arrayOf()
misalnya:
Kotlin juga memungkinkan kita untuk membuat Array dengan tipe data primitif
dengan memanfaatkan beberapa fungsi spesifik berikut:
intArrayOf() : IntArray
booleanArrayOf() : BooleanArray
charArrayOf() : CharArray
longArrayOf() : LongArray
shortArrayOf() : ShortArray
byteArrayOf() : ByteArray
Jika kita ingin membuat Array yang hanya bisa dimasukkan nilai dengan tipe data
Int, gunakan intArrayOf(), misalnya:
1. fun main() {
2. val intArray = intArrayOf(1, 3, 5, 7)
3. print(intArray[2])
4. }
5.
6. /*
7. Output: 5
8. */
Nilai 2 pada kode di atas merupakan indeks atau posisi dari nilai tunggal yang ingin
kita dapatkan. Perlu diketahui bahwa sebuah indeks selalu dimulai dari 0. Selain
mendapatkan nilai tunggal, dengan indexing kita juga bisa mengubah nilai tunggal
tersebut. Sebagai contoh:
1. fun main() {
2. val intArray = intArrayOf(1, 3, 5, 7) // [1, 3, 5, 7]
3. intArray[2] = 11 // [1, 3, 11, 7]
4.
5. print(intArray[2])
6. }
7.
8. /*
9. Output: 11
10. */
Selain menggunakan library function arrayOf() dalam pembuatan objek Array, kita
juga bisa menggunakan Array(). Constructor pada Array() membutuhkan 2 argumen
yaitu size dan fungsi lambda. Contoh untuk membuat Array menggunakan Array()
adalah seperti berikut:
Pada kode di atas kita menentukan angka 4 sebagai size Array. Fungsi lambda di atas
ada dua. Pertama, untuk mengambil indeks Array yang akan digunakan sebagai
argumen. Kedua, menentukan elemen Array yang akan dimasukkan ke dalam indeks
tersebut.
Control Flow
Ketika kita mengembangkan sebuah program, tentu kita harus tahu seperti apa
alurnya. Control flow adalah cara kita mengontrol alur dari sebuah program
berdasarkan kondisi saat program tersebut berjalan.
1. If expression
1. val openHours = 7
2. val now = 20
3. if (now > openHours){
4. println(“Office already open”)
5. }
1. val openHours = 7
2. val now = 20
3. val office: String
4. if (now > openHours) {
5. office = “Office already open”
6. } else {
7. office = “Office already open”
8. }
9.
10. print(office)
Else akan dijalankan jika hasil evaluasi pada expression yang diberikan menghasilkan
nilai false. If merupakan sebuah expressions yang dapat mengembalikan nilai,
sehingga kita dapat menyimpan hasilnya ke dalam sebuah variabel.
1. val openHours = 7
2. val now = 20
3. val office: String
4. office = if (now > openHours) {
5. “Office already open”
6. } else {
7. “Office already open”
8. }
9.
10. print(office)
Pada kode di atas, kita hanya menggunakan If untuk menguji 2 (dua) kondisi. Lalu
bagaimana jika kita memiliki beberapa kondisi? Kita bisa menggabungkan else dan if
seperti berikut:
1. val openHours = 7
2. val now = 7
3. val office: String
4. office = if (now > 7) {
5. “Office already open”
6. } else if (now == openHours){
7. "Wait a minute, office will be open"
8. } else {
9. “Office already open”
10. }
11.
12. print(office)
Blok else if akan dijalankan jika hasil evaluasi pada branch sebelumnya bernilai false.
Jika hasil evaluasi pada branch else if juga bernilai nilai false, maka lanjut ke evaluasi
branch selanjutnya.
2. When Expressions
1. fun main() {
2. val value = 7
3.
4. when(value){
5. 6 -> println("value is 6")
6. 7 -> println("value is 7")
7. 8 -> println("value is 8")
8. }
9. }
10.
11. /*
12. output: value is 7
13. */
when akan mencocokan semua argumen yang berada di setiap branch secara
berurutan sampai salah satu kondisi terpenuhi. Di dalam when kita juga bisa
menambahkan branch else seperti berikut:
1. fun main() {
2. val value = 20
3.
4. when(value){
5. 6 -> println("value is 6")
6. 7 -> println("value is 7")
7. 8 -> println("value is 8")
8. else -> println("value cannot be reached")
9. }
10. }
11.
12. /*
13. output: value cannot be reached
14. */
else akan dievaluasi jika tiada satupun kondisi yang terpenuhi pada branch
sebelumnya. Sama halnya seperti if expression, when expression dapat
mengembalikan nilai dan dapat disimpan di dalam sebuah variabel seperti berikut:
1. fun main() {
2. val value = 7
3. val stringOfValue = when (value) {
4. 6 -> "value is 6"
5. 7 -> "value is 7"
6. 8 -> "value is 8"
7. else -> "value cannot be reached"
8. }
9.
10. println(stringOfValue)
11. }
12.
13. /*
14. output : value is 7
15. */
else adalah hal wajib jika kita menggunakan when expression untuk mengembalikan
nilai. Bagaimana jika kita melewatkannya? Akan tampil eror berikut:
'when' expression must be exhaustive, add necessary 'else' branch
Jika kita memiliki dua atau lebih baris kode yang akan kita jalankan di setiap branch,
kita bisa memindahkannya ke dalam curly braces seperti berikut:
1. fun main() {
2. val value = 7
3. val stringOfValue = when (value) {
4. 6 -> {
5. println("Six")
6. "value is 6"
7. }
8. 7 -> {
9. println("Seven")
10. "value is 7"
11. }
12. 8 -> {
13. println("Eight")
14. "value is 8"
15. }
16. else -> {
17. println("undefined")
18. "value cannot be reached"
19. }
20. }
21.
22. println(stringOfValue)
23. }
24.
25. /*
26. output : value is 7
27.
28. */
When expression juga bisa kita gunakan untuk memeriksa nilai yang terdapat pada
sebuah Range atau Collection. Range sendiri merupakan salah satu tipe data yang
unik di mana kita dapat menentukan nilai awal dan nilai akhir. Range dan Collection
akan dibahas terpisah pada modul berikutnya.
Berikut adalah contoh saat kita hendak mengecek apakah sebuah nilai ada di dalam
sebuah Range atau tidak.
1. fun main() {
2. val value = 27
3. val ranges = 10..50
4.
5. when(value){
6. in ranges -> println("value is in the range")
7. !in ranges -> println("value is outside the range")
8. else -> println("value undefined")
9. }
10. }
11.
12. /*
13. output : value is in the range
14. */
Branch pertama pada contoh kode di atas akan memeriksa apakah nilai dari value
terdapat di cakupan nilai ranges. Kemudian untuk branch kedua akan memeriksa
apakah nilai dari value tidak terdapat pada nilai yang dicakup oleh ranges. Sedangkan
branch else akan mengevaluasi jika dua kondisi sebelumnya tidak terpenuhi.
3. Looping
Bayangkan ketika kita ditugaskan untuk mencetak beberapa baris teks yang sama ke
dalam konsol seperti berikut:
1. Hello World
2. Hello World
3. Hello World
4. Hello World
5. Hello World
1. fun main() {
2. println("Hello World")
3. println("Hello World")
4. println("Hello World")
5. println("Hello World")
6. println("Hello World")
7. }
A. While
1. fun main() {
2. var counter = 1
3. while (counter <= 7){
4. println("Hello, World!")
5. counter++
6. }
7. }
8. /*
9. output :
10. Hello, World!
11. Hello, World!
12. Hello, World!
13. Hello, World!
14. Hello, World!
15. Hello, World!
16. Hello, World!
17. */
Perhatikan kondisi dari While di atas, jika nilai dari variabel counter kurang dari
sama dengan 7 maka kondisi tersebut sudah tak terpenuhi dan proses perulangan
akan dihentikan.
While bersifat Entry Controlled Loop. Artinya, kondisi yang diberikan akan
dievaluasi terlebih dahulu. Jika kondisi tersebut terpenuhi maka proses
perulangan akan dijalankan.Jika kondisi yang diberikan tidak terpenuhi sejak
awal maka proses perulangan tidak akan dijalankan.
B. Do While
Selain menggunakan While, kita juga bisa menggunakan Do While untuk
melakukan perulangan seperti berikut:
1. fun main() {
2. var counter = 1
3. do {
4. println("Hello, World!")
5. counter++
6. } while (counter <= 7)
7. }
8.
9. /*
10. output:
11. Hello, World!
12. Hello, World!
13. Hello, World!
14. Hello, World!
15. Hello, World!
16. Hello, World!
17. Hello, World!
18. */
Berbeda dengan While, Do While bersifat Exit Controlled Loop di mana proses
perulangan akan langsung dijalankan di awal. Jika telah selesai, barulah kondisi
yang diberikan akan dievaluasi.Saat menggunakan While dan Do While
perhatikan infinite loop, yaitu kondisi di mana proses perulangan berlangsung
terus menerus sampai aplikasi menjadi crash. Contoh dari infinite loop adalah
seperti berikut:
1. fun main() {
2. var value = 'A'
3. do {
4. print(value)
5. } while (value <= 'Z')
6. }
Infinite loop terjadi jika kondisi yang diberikan selamanya terpenuhi atau bernilai
true.
C. For Loop
For dapat digunakan pada Ranges, Collections, Arrays dan apapun yang
menyediakan iterator. Contoh dari For loop sendiri adalah sebagai berikut:
1. fun main() {
2. val ranges = 1..5
3. for (i in ranges){
4. println("value is $i!")
5. }
6. }
7.
8. /*
9. output :
10. value is 1!
11. value is 2!
12. value is 3!
13. value is 4!
14. value is 5!
15.
16. */
Kode di atas merupakan contoh ketika ketika melakukan perulangan pada Ranges
dengan menggunakan range expression.Selain itu, kita juga dapat menuliskan For
loop menggunakan range expression seperti berikut:
1. fun main() {
2. val ranges = 1.rangeTo(10) step 3
3. for (i in ranges ){
4. println("value is $i!")
5. }
6. }
7.
8. /*
9. output :
10. value is 1!
11. value is 4!
12. value is 7!
13. value is 10!
14. */
Pada kode di atas, kita menambahkan ekstensi step yang akan mengembalikan
nilai baru dengan tipe IntProgression dengan jarak nilai sebelumnya adalah 3.
Kita juga dapat mengakses indeks untuk setiap elemen yang ada pada Ranges
dengan memanfaatkan fungsi withIndex() seperti berikut:
1. fun main() {
2. val ranges = 1.rangeTo(10) step 3
3. for ((index, value) in ranges.withIndex()) {
4. println("value $value with index $index")
5. }
6. }
7. /*
8. output :
9. value 1 with index 0
10. value 4 with index 1
11. value 7 with index 2
12. value 10 with index 3
13. */
Kita menggunakan kata kunci for untuk memulai proses perulangan. Untuk tujuan
yang sama, kita juga bisa memanfaatkan salah satu ekstensi pada Kotlin yaitu
forEach. Contohnya seperti berikut:
1. fun main() {
2. val ranges = 1.rangeTo(10) step 3
3. ranges.forEach { value ->
4. println("value is $value!")
5. }
6. }
7.
8. /*
9. output :
10. value is 1!
11. value is 4!
12. value is 7!
13. value is 10!
14. */
forEach pada kode di atas merupakan sebuah lambda expression yang hanya
memiliki satu argumen yaitu nilai tunggal yang dicakup pada ranges. Jika kita
mendapatkan indeks dari tiap nilai yang dicakup kita bisa menggunakan ekstensi
forEachIndexed seperti berikut:
1. fun main() {
2.
3. val ranges = 1.rangeTo(10) step 3
4. ranges.forEachIndexed { index, value ->
5. println("value $value with index $index")
6. }
7. }
8. /*
9. output :
10. value 1 with index 0
11. value 4 with index 1
12. value 7 with index 2
13. value 10 with index 3
14. */
1. fun main() {
2. val ranges = 1.rangeTo(10) step 3
3. ranges.forEachIndexed { index, _ ->
4. println("index $index")
5. }
6. }
7. /*
8. output :
9. index 0
10. index 1
11. index 2
12. index 3
13. */
Sebenarnya ini merupakan sebuah aturan di mana ketika argumen dari sebuah
lambda expression tidak digunakan, kita disarankan agar mengubahnya menjadi _
untuk menggantikan nama dari argumen tersebut.
Program yang saya buat adalah tentang sebuah formulir pendaftaran dan diakhir
pendaftaran ada program FAQ yang dimana anda bisa memasukan beberapa
pertanyaan dan nanti akan dijawab oleh program.Program ini melibatkan beberapa
function yang hanya berada pada bahasa pemograman kotlin. Berikut adalah kodenya
Penjelasan Kode
1. fun main(args: Array<String>) {
2. proses()
3. val robot = chatbot()
4. robot.help()
5. }
Kode diatas berfungsi untuk memanggil semua function yang ada dibawahnya seperti
yang kita telah ketahui bahwa kotlin merupakan bahasa yang Multiparadigm yang
memungkinkan kita untuk menulis kode menggunakan Functional Programming
6. fun proses(){
7. println("""
8. =================================================
9. SELAMAT DATANG CALON PESERTA DIDIK BARU
10. 2020/2021
11. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
12. ISI FORMULIR PENDAFTARAN DI BAWAH INI
13. |
14. |
15. -
16.
17. """.trimIndent())
18. print("Masukan Nama Anda : ")
19. val nama = readLine()
20. print("""
21. Jenis Kelamin Anda :
22. (1) Laki-Laki
23. (2) Perempuan
24. (3) Transgender
25. (4) Tidak Mau Menyebutkan
26. Pilih :
27. """.trimIndent())
28. var gender = readLine()
29. when(gender){
30. "1" -> gender = "Laki-Laki"
31. "2" -> gender = "Perempuan"
32. "3" -> gender = "Transgender"
33. "4" -> gender = "Tidak Mau Menyebutkan"
34. }
35. print("Masukan Umur Anda : ")
36. val umur = readLine()
37. print("Masukan Asal Sekolah : ")
38. val sekolah = readLine()
39. print("""
40. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
41.
42. --------- Pilih Bidang Yang Anda Minati ---------
43.
44. (1) Web Design
45. (2) Networking Support
46. (3) Software Dev
47. (4) Cyber Securty
48.
49. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
50. Pilih :
51. """.trimIndent())
52. val bidang = readLine()
53. val kosong = nullable(
54. "$nama",
55. "$gender",
56. "$umur",
57. "$sekolah",
58. "$bidang")
59. kosong.check()
60.
61. }
Function Proses() berfunsi untuk input data, data tersebut disimpan sementara di
variable kemudian variable tersebut akan dicheck di class nullable dengan parameter
nama, gender, umur, sekolah, dan bidang
Pada class nullable terdapat function yang bernama check() yang didalamnya terdapat
flow control if expression yang jika dibaca berbunyi jika salah satu atau salah dua
variabel nama, gender, umur, sekolah, dan bidang kosong maka akan mucul
peringatan yang mengatakan “Anda Belum Memasukan Data dengan benar”
kemudian akan dikembalikan ke awal input namun jika tidak ada variabel yang
kosong maka akan memanggil fungsi output() dan konfirmasi()
Class output berfungsi untuk menampilkan semua data yang diinput dan juga
mengkonfersi variable bidang yang sebelumnya berupa integer menjadi string
menggunakan fungsi khusus dari kotlin yang bernama mapOf, kemudian terdapat
function tampil() untuk menampilkan data sebelum dikonfirmasi
Function di atas berfungsi apakah nama yang dimasukan bernar atau tidak, jika salah
maka program akan mengulang kode dari awal dan jika benar maka program akan
meneruskan program
Class chatbot adalah program FAQ, didalamnya terdapat beberapa function. Function
help() berfungsi untuk bertanya apakah pengguna ingin menggunakan program FAQ
atau tidak, jika pengguna menjawab ‘y’ maka program akan meneruskan ke function
quest() untuk memasukan sebuah pertanyaan yang nanti akan dimasukan ke dalam
variabel dan variable tersebut akan dikirim ke function answer() untuk menjawab
pertanyaan tersebut dan untuk keluar dari program FAQ anda tinggal menulskan
command quit.