Anda di halaman 1dari 37

KOTLIN

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..

Kotlin dikembangkan oleh lebih dari 50 developer pimpinan Andrey Breslav.Kotlin


dapat digunakan untuk berbagai macam pengembangan aplikasi, baik itu server atau
backend, website, maupun mobile Android. Bahkan saat ini tengah dikembangkan
Kotlin/Native yang memungkinkan developer untuk menggunakannya sebagai bahasa
pemrograman dalam pengembangan aplikasi di platform lain seperti embedded
system, desktop, macOS, dan iOS. Bahkan kemungkinan Kotlin juga bisa digunakan
untuk data science dan machine learning.

Multiparadigm dan Multiplatform

Menurut Wikipedia, programming paradigm adalah sebuah cara untuk


mengklasifikasikan bahasa pemrograman berdasarkan fitur yang dimilikinya. Lebih
tepatnya, seperti apa struktur kode bisa diterapkan pada bahasa pemrograman
tersebut. Dari sisi konstruksi, Kotlin bisa menggunakan gaya OOP(object-oriented
programming) maupun FP(Functional Programming), bahkan mencampurnya saat
menuliskan sintaks Kotlin

Multiplatform berarti mendukung lebih dari 1 (satu) platform.Platform yang dimaksud


misalnya Android, iOS, Web, Desktop, dsb. Kotlin memiliki tujuan untuk berbagi
kode antar platform. Dengan dukungan untuk JVM, Android, JavaScript, iOS, Linux,
Windows, macOS dan bahkan embedded system seperti STM32, Kotlin mampu
mengatasi komponen apapun yang terdapat pada aplikasi modern.
Karakteristik Kotlin

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.

1. Modern and Concise

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:

1. public class SomeClasses{


2. public static void main(String[] args){
3. System.out.println("Hello");
4. }
5. }

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.

JetBrains menambahkan dukungan Kotlin pada IntelliJ IDEA beserta plugin-plugin


yang disesuaikan dengan setiap fitur yang ada pada Kotlin.Sebagai contoh, kita bisa
mengkonversi kode Java menjadi Kotlin secara otomatis hanya dengan melakukan
copy-paste kode saja pada berkas Kotlin. Dengan begitu, secara tidak langsung kita
bisa belajar seperti apakah jika sebuah kode pada Java dituliskan dengan Kotlin.
Contoh lain, IntelliJ IDEA mampu menampilkan peringatan pada sebuah kode yang
penulisannya kurang tepat. Tak hanya itu, setiap peringatan selalu disertai dengan
saran perbaikan. Tentunya kita akan belajar bagaimana seharusnya sebuah kode
dituliskan pada Kotlin.

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.

Kotlin menghilangkan NullPointerException yang sering disebut sebagai “The billion


dollar mistake” oleh programer Java. Kotlin membedakan antara objek yang boleh
null atau tidak boleh null pada saat objek itu dibuat. Tentunya juga menyediakan
beberapa solusi untuk penulisannya. Fitur tersebut dikenal dengan Null Safety.
Sebagai contoh, kode berikut:

1. var a : String = "Kotlin"

2. a = null //kompilasi error

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 termasuk ke dalam bahasa pemrograman statically typed. Artinya setiap


ekspresi di dalam sebuah program dapat dikenali pada saat kompilasi. Kompiler juga
bisa memastikan bahwa semua fungsi yang ingin diakses terdapat pada objek yang
digunakan. Hal ini berbeda dengan beberapa bahasa pemrograman lain yang juga
berjalan di atas JVM seperti Groovy dan JRuby. Kedua bahasa tersebut termasuk ke
dalam bahasa pemrograman dynamically 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:

1. val company = "dicoding"

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.

5. Free dan Open-Source

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.

Kotlin dikenal sangat melekat dengan Android. Ditunjukkan dengan banyaknya


developer yang berdiskusi di komunitas online maupun offline mayoritas adalah
developer Android. Antusiasme developer Android di Indonesia untuk belajar Kotlin
sangatlah besar. Saat ini, banyak aplikasi yang dikembangkan dengan Kotlin. Mulai
dari startup yang baru mulai dirintis sampai perusahaan yang sudah memiliki title
Unicorn seperti GO-JEK, Tokopedia, dan Bukalapak.

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

Banyaknya komunitas yang berkontribusi untuk Kotlin membuat bahasa tersebut


berkembang sangat pesat. Kotlin dinobatkan sebagai “Fastest growing languages”
oleh GitHub Octoverse 2018 mengalahkan Rust, Go, dll.

GitHub Octoverse 2018

Persiapan dan Instalasi


Pada tahap pertama, tentunya kita perlu menyiapkan beberapa tools yang untuk
membangun program dengan Kotlin. Tools itu bisa kita kategorikan ke dalam SDK,
IDE, dan build tools.

Software Development Kit (SDK)

SDK merupakan seperangkat alat pengembangan perangkat lunak yang digunakan


untuk mempermudah pengembangan aplikasi dalam platform tertentu. Setiap platform
biasanya menyediakan SDK khusus, misalnya Android dengan Android SDK-nya,
iOS dengan iOS SDK-nya, ataupun Java dengan JDK-nya. Dengan SDK tersebut,
developer dapat mengakses fitur khusus dari masing-masing platform.
Karena kotlin berjalan diatas JVM, maka ia sama seperti Java. Kotlin menggunakan
JDK sebagai SDK-nya dan JRE untuk menjalankan program aplikasi.

 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.

Integrated Development Environment (IDE)

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.

Windows mengharuskan kita untuk mengatur Environment Variable secara manual


agar dapat digunakan. Sama seperti konfigurasi OpenJDK, buka kembali pengaturan
Environment Variables. Pada kolom System Variables pilih variable path
kemudian klik Edit. Setelah jendela baru terbuka, Klik tombol New kemudian
tambahkan lokasi berkas distribusi Gradle seperti berikut:

Selesai, klik OK pada jendela yang tampil dan jendela Environment Variable.

Instalasi Intellij IDEA

Sebelum melakukan instalasi IntelliJ IDEA, ketahui terlebih dahulu beberapa syarat di
masing-masing sistem operasi sebagai berikut:

 Microsoft Windows 10/8/7/Vista/2003/XP (64-bit)


 2 GB RAM minimum, 4 GB RAM direkomendasikan
 1.5 GB ruang kosong pada penyimpanan
 1024x768 minimal resolusi layar

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 selesai dengan proses instalasi, lakukanlah konfigurasi IntelliJ IDEA.


Sebelum digunakan untuk membuat proyek, kita perlu memeriksa terlebih dahulu
konfigurasi SDK yang akan digunakan. Caranya dengan mengakses menu Configure
-> Structure for New Projects pada jendela IntelliJ yang tampil.

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.

1. // single line comment

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:

1. var identifier: Type = initialization

Berikut adalah contoh variabel dengan tipe String:

1. var nama: String = "Latoe"

var atau val digunakan untuk mengontrol nilai dari sebuah variabel. Dengan kata
kunci var kita bisa mengubah nilai yang sudah kita inisialisasikan. Sebagai contoh:

1. var nama: String = "Azlan Rafar"


2. Nama = "L Azlan Rafar"

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

Characters direpresentasikan menggunakan tipe Char. Untuk mendefinisikan sebuah


variabel dengan tipe data Char kita bisa menggunakan tanda kutip tunggal (' ') seperti
berikut:

1. val character = 'A'

Tipe data Char hanya dapat kita gunakan untuk menyimpan karakter tunggal.
Sebaliknya jika kita memasukkan lebih dari 1 (satu) karakter, akan terjadi eror:

1. val character: Char = 'ABC' // Incorrect character literal


Yang menarik, kita bisa melakukan operasi increment (++) dan decrement (--) pada
sebuah variabel dengan tipe data Char seperti berikut:

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:

1. val textString = "Kotlin"

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:

1. val statement = "Kotlin is Awesome!"

Kemudian kita ingin menambahkan tanda petik ganda di dalam sebuah String seperti
berikut:

1. val statement = "Kotlin is "Awesome!""

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:

1. val statement = "Kotlin is \"Awesome!\""

Selain \” di atas, terdapat beberapa karakter lain yang dapat digunakan untuk
melakukan escaped didalam sebuah String, antara lain:

 \t: menambah tab ke dalam teks.


 \n: membuat baris baru di dalam teks.
 \b: menghapus satu karakter sebelumnya.
 \r: menghapus semua karakter sebelumnya.
 \’: menambah karakter single quote kedalam teks.
 \”: menambah karakter double quote kedalam teks.
 \\: menambah karakter backslash kedalam teks.

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:

1. val line = "Line 1\n" +


2. "Line 2\n" +
3. "Line 3\n" +
4. "Line 4\n"

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 (32 Bit)

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. .

1. val intNumbers = 100


 Long (64 Bit)

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:

1. val LongNumbers: Long = 100


 Short (16 Bit)

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.

1. val byteNumber = 0b11010010


 Double (64 Bit)

Pada umumnya Double digunakan untuk menyimpan nilai numerik pecahan.

1. val doubleNumbers = 1.3

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. }

Kode akan gagal dikompilasi dengan log eror berikut:

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.

A. Conjunction atau AND (&&)

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.

B. Disjunction atau OR (||)

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.

C. Negation atau NOT (!)

Operator NOT(!) digunakan untuk melakukan negasi pada hasil evaluasi


expression yang diberikan. Contoh, Jika hasil expressions setelah dievaluasi
bernilai true, maka operator NOT akan mengembalikan nilai false.

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:

1. val array = arrayOf(1, 3, 5, 7)

Kita juga dapat memasukkan nilai dengan berbagai jenis tipe data ke dalam arrayOf()
misalnya:

1. val mixArray = arrayOf(1, 3, 5, 7 , "Latoe" , true)

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. val intArray = intArrayOf(1, 3, 5, 7)


Kita juga bisa mendapatkan nilai tunggal dari sekumpulan nilai yang berada di dalam
sebuah Array dengan memanfaatkan indexing seperti berikut:

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:

1. val intArray = Array(4, { i -> i * i }) // [0, 1, 4, 9]

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

If expression direpresentasikan dengan kata kunci if. If akan mengeksekusi sebuah


statement atau expression jika hasil evaluasi dari expressions yang diberikan pada
blok if bernilai true. Sebaliknya, jika bernilai false maka proses yang ditentukan akan
dilewatkan.

1. val openHours = 7
2. val now = 20
3. if (now > openHours){
4. println(“Office already open”)
5. }

Kode di atas adalah contoh sederhana penggunaan if dengan memanfaatkan operator


greater than untuk membandingkan nilai. Jika if digunakan untuk mengembalikan
nilai atau menetapkan nilai dari sebuah variabel maka if wajib memiliki branch else.
Contohnya seperti berikut:

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

When Expression adalah mekanisme yang memungkinkan nilai dari sebuah


variabel/expression, mampu mengubah alur program.Contoh sederhana dalam
penggunaan when expression adalah seperti berikut:

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

Kita pasti langsung terpikir akan menulis programnya seperti berikut:

1. fun main() {
2. println("Hello World")
3. println("Hello World")
4. println("Hello World")
5. println("Hello World")
6. println("Hello World")
7. }

Untuk mengatasinya kita bisa menggunakan perulangan. Perulangan adalah proses


perulangan blok yang sama tanpa henti sampai kondisi yang diberikan tidak terpenuhi
atau bernilai false.

A. While

Untuk menggunakan While, kita membutuhkan kata kunci while, lanjut ke


kondisi di dalam tanda kurung, dan diakhiri oleh blok body dari while itu sendiri.
Berikut adalah contoh dari penggunaan 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. */

forEachIndexed memiliki dua argumen. Pertama adalah index yang merupakan


indeks dari tiap nilai. Kedua adalah value yang merupakan nilai tunggal yang
dicakup oleh ranges itu sendiri. Jika kita hanya ingin menggunakan argumen
index, maka kita bisa mengubah argumen value menjadi _ seperti berikut:

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.

Final Submission Kotlin

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

1. fun main(args: Array<String>) {


2. proses()
3. val robot = chatbot()
4. robot.help()
5. }
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. }
62. class nullable(val nama : String?,
63. val gender : String?,
64. val umur : String?,
65. val sekolah : String?,
66. val bidang : String?){
67. fun check(){
68. if(nama == null ||
69. gender == null ||
70. umur == null ||
71. sekolah == null ||
72. bidang == null){
73. print("Anda Belum Memasukan Data dengan benar")
74. System.exit(-1)
75. }else{
76. val out = output("$nama",
77. "$gender",
78. "$umur",
79. "$sekolah",
80. "$bidang")
81. out.tampil()
82. konfirmasi("$nama")
83. }
84. }
85. }
86. class output(val nama : String,
87. val gender : String,
88. val umur : String,
89. val sekolah : String,
90. val bidang : String){
91. val pilih = mapOf<String,String>(
92. "1" to "Web Design",
93. "2" to "Networking Support",
94. "3" to "Software Development",
95. "4" to "Cyber Securty"
96. )
97. fun tampil(){
98. val fix = pilih.getValue("$bidang")
99. println("""
100. *************************************************
101. Nama : $nama
102. Gender : $gender
103. Umur : $umur
104. Asal Sekolah : $sekolah
105. Bidang : $fix
106. *************************************************
107. """.trimIndent())
108. }
109. }
110. fun konfirmasi(nama : String){
111. print("Apakah data yang dimasukan Benar?(y/n):")
112. val yn = readLine()
113. if(yn == "y" || yn == "Y"){
114. println("Succesfull")
115. finish("$nama")
116. }else{
117. proses()
118. }
119. }
120. fun finish(nama : String){
121. val name : String = nama.toUpperCase()
122. println("""
123. ***************************************************
124. *
125. * $name ,SELAMAT ANDA SUDAH TERDAFTAR
126. *
127. ***************************************************
128. """.trimIndent())
129. }
130. class chatbot(){
131. fun help(){
132. print("Apakah Ada Pertanyaan ?(y/n)")
133. val faq = readLine()
134. if(faq == "y" || faq == "Y"){
135. quest()
136. }else{
137. print("Terima Kasih Telah Berlangganan dengan
kami")
138. }
139. }
140. fun quest(){
141. print("-> ")
142. val anda = readLine()
143. answer("$anda")
144. }
145. fun answer(anda : String){
146. when(anda){
147. "kenapa harus disini" -> println("
148. Karena Disi telah terakreditasi A")
149. "apa keunggulan disini" -> println("
150. lulusan sini dah ke luar negri")
151. "quit" -> quit()
152. else -> println("Pertanyaan tidak ditemukan")
153. }
154. quest()
155. }
156. fun quit(){
157. print("Sayonara")
158. System.exit(-1)
159. }
160. }

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

62. class nullable(val nama : String?,


63. val gender : String?,
64. val umur : String?,
65. val sekolah : String?,
66. val bidang : String?){
67. fun check(){
68. if(nama == null ||
69. gender == null ||
70. umur == null ||
71. sekolah == null ||
72. bidang == null){
73. print("Anda Belum Memasukan Data dengan benar")
74. System.exit(-1)
75. }else{
76. val out = output("$nama",
77. "$gender",
78. "$umur",
79. "$sekolah",
80. "$bidang")
81. out.tampil()
82. konfirmasi("$nama")
83. }
84. }
85. }

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()

86. class output(val nama : String,


87. val gender : String,
88. val umur : String,
89. val sekolah : String,
90. val bidang : String){
91. val pilih = mapOf<String,String>(
92. "1" to "Web Design",
93. "2" to "Networking Support",
94. "3" to "Software Development",
95. "4" to "Cyber Securty"
96. )
97. fun tampil(){
98. val fix = pilih.getValue("$bidang")
99. println("""
100. *************************************************
101. Nama : $nama
102. Gender : $gender
103. Umur : $umur
104. Asal Sekolah : $sekolah
105. Bidang : $fix
106. *************************************************
107. """.trimIndent())
108. }
109. }

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

110. fun konfirmasi(nama : String){


111. print("Apakah data yang dimasukan Benar?(y/n):")
112. val yn = readLine()
113. if(yn == "y" || yn == "Y"){
114. println("Succesfull")
115. finish("$nama")
116. }else{
117. proses()
118. }
119. }

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

120. fun finish(nama : String){


121. val name : String = nama.toUpperCase()
122. println("""
123. ***************************************************
124. *
125. * $name ,SELAMAT ANDA SUDAH TERDAFTAR
126. *
127. ***************************************************
128. """.trimIndent())
129. }
Function finish() berfungsi untuk menampilkan peringatan bahwa anda sudah
terdaftar

130. class chatbot(){


131. fun help(){
132. print("Apakah Ada Pertanyaan ?(y/n)")
133. val faq = readLine()
134. if(faq == "y" || faq == "Y"){
135. quest()
136. }else{
137. print("Terima Kasih Telah Berlangganan dengan
kami")
138. }
139. }
140. fun quest(){
141. print("-> ")
142. val anda = readLine()
143. answer("$anda")
144. }
145. fun answer(anda : String){
146. when(anda){
147. "kenapa harus disini" -> println("
148. Karena Disi telah terakreditasi A")
149. "apa keunggulan disini" -> println("
150. lulusan sini dah ke luar negri")
151. "quit" -> quit()
152. else -> println("Pertanyaan tidak ditemukan")
153. }
154. quest()
155. }
156. fun quit(){
157. print("Sayonara")
158. System.exit(-1)
159. }
160. }

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.

Anda mungkin juga menyukai