Codelab ini adalah bagian dari kursus Kotlin Bootcamp for Programmers. Anda akan mendapatkan manfaat maksimal dari kursus ini jika menyelesaikan codelab secara berurutan. Anda mungkin dapat membaca cepat beberapa bagian, bergantung pada pengetahuan Anda. Kursus ini ditujukan bagi programer yang menguasai bahasa berorientasi objek, dan ingin mempelajari Kotlin.
Pengantar
Dalam codelab ini, Anda akan mempelajari dasar-dasar bahasa pemrograman Kotlin: jenis data, operator, variabel, struktur kontrol, dan variabel nullable versus non-nullable. Kursus ini ditujukan bagi programmer yang menguasai bahasa berorientasi objek dan ingin mempelajari Kotlin.
Daripada membuat satu aplikasi contoh, pelajaran dalam kursus ini dirancang untuk membangun pengetahuan Anda, tetapi bersifat semi-independen satu sama lain sehingga Anda dapat membaca sekilas bagian yang sudah Anda kuasai. Untuk mengaitkannya, banyak contoh yang menggunakan tema akuarium. Jika Anda ingin melihat kisah akuarium selengkapnya, lihat kursus Kotlin Bootcamp for Programmers di Udacity.
Yang harus sudah Anda ketahui
- Cara membuat project di IntelliJ IDEA
- Cara membuka dan menjalankan kode di REPL (Read-Eval-Print Loop) Kotlin di IntelliJ IDEA (Tools > Kotlin > Kotlin REPL)
Yang akan Anda pelajari
- Cara menggunakan jenis data, operator, dan variabel Kotlin
- Cara menggunakan boolean dan kondisi
- Perbedaan antara variabel nullable dan non-nullable
- Cara kerja array, daftar, dan loop di Kotlin
Yang akan Anda lakukan
- Menggunakan REPL Kotlin untuk mempelajari dasar-dasar Kotlin
Dalam tugas ini, Anda akan mempelajari operator dan jenis dalam bahasa pemrograman Kotlin.
Langkah 1: Pelajari operator numerik
- Buka IntelliJ IDEA, jika belum terbuka.
- Untuk membuka Kotlin REPL, pilih Tools > Kotlin > Kotlin REPL.
Seperti bahasa lain, Kotlin menggunakan +
, -
, *
, dan /
untuk tambah, kurang, kali, dan bagi. Kotlin juga mendukung berbagai jenis angka, seperti Int
, Long
, Double
, dan Float
.
- Masukkan ekspresi berikut di REPL. Untuk melihat hasilnya, tekan
Control+Enter
(Command+Enter
di Mac) setelah setiap perintah.
1+1 ⇒ res8: kotlin.Int = 2 53-3 ⇒ res9: kotlin.Int = 50 50/10 ⇒ res10: kotlin.Int = 5 1.0/2.0 ⇒ res11: kotlin.Double = 0.5 2.0*3.5 ⇒ res12: kotlin.Double = 7.0
Perhatikan bahwa hasil operasi menyimpan jenis operand, sehingga 1/2 = 0, tetapi 1.0/2.0 = 0.5.
- Coba beberapa ekspresi dengan berbagai kombinasi bilangan bulat dan desimal.
6*50 ⇒ res13: kotlin.Int = 300 6.0*50.0 ⇒ res14: kotlin.Double = 300.0 6.0*50 ⇒ res15: kotlin.Double = 300.0
- Panggil beberapa metode pada angka. Kotlin menyimpan angka sebagai primitif, tetapi memungkinkan Anda memanggil metode pada angka seolah-olah angka tersebut adalah objek.
2.times(3) ⇒ res5: kotlin.Int = 6 3.5.plus(4) ⇒ res8: kotlin.Double = 7.5 2.4.div(2) ⇒ res9: kotlin.Double = 1.2
Langkah 2: Berlatih menggunakan jenis
Kotlin tidak secara implisit mengonversi antar jenis angka, sehingga Anda tidak dapat menetapkan nilai short secara langsung ke variabel long, atau Byte
ke Int
. Hal ini karena konversi angka implisit merupakan sumber error umum dalam program. Anda selalu dapat menetapkan nilai dari berbagai jenis dengan melakukan casting.
- Untuk melihat beberapa kemungkinan konversi, tentukan variabel jenis
Int
di REPL.
val i: Int = 6
- Buat variabel baru, lalu masukkan nama variabel yang ditampilkan di atas, diikuti dengan
.to
.
val b1 = i.to
IntelliJ IDEA akan menampilkan daftar kemungkinan penyelesaian. Pelengkapan otomatis ini berfungsi untuk variabel dan objek dari jenis apa pun.
- Pilih
toByte()
dari daftar, lalu cetak variabel.
val b1 = i.toByte()
println(b1)
⇒ 6
- Tetapkan nilai
Byte
ke variabel dari berbagai jenis.
val b2: Byte = 1 // OK, literals are checked statically
println(b2)
⇒ 1
val i1: Int = b2
⇒ error: type mismatch: inferred type is Byte but Int was expected
val i2: String = b2
⇒ error: type mismatch: inferred type is Byte but String was expected
val i3: Double = b2
⇒ error: type mismatch: inferred type is Byte but Double was expected
- Untuk penetapan yang menampilkan error, coba transmisikan saja.
val i4: Int = b2.toInt() // OK!
println(i4)
⇒ 1
val i5: String = b2.toString()
println(i5)
⇒ 1
val i6: Double = b2.toDouble()
println(i6)
⇒ 1.0
- Agar konstanta numerik yang panjang lebih mudah dibaca, Kotlin memungkinkan Anda menempatkan garis bawah dalam angka, di tempat yang sesuai bagi Anda. Coba masukkan konstanta numerik yang berbeda.
val oneMillion = 1_000_000 val socialSecurityNumber = 999_99_9999L val hexBytes = 0xFF_EC_DE_5E val bytes = 0b11010010_01101001_10010100_10010010
Langkah 3: Pelajari nilai jenis variabel
Kotlin mendukung dua jenis variabel: dapat diubah dan tidak dapat diubah. Dengan val
, Anda dapat menetapkan nilai satu kali. Jika mencoba menetapkan sesuatu lagi, Anda akan menerima error. Dengan var
, Anda dapat menetapkan nilai, lalu mengubah nilai tersebut nanti dalam program.
- Tentukan variabel menggunakan
val
danvar
, lalu tetapkan nilai baru untuk variabel tersebut.
var fish = 1
fish = 2
val aquarium = 1
aquarium = 2
⇒ error: val cannot be reassigned
Anda dapat menetapkan nilai ke fish
, lalu menetapkan nilai baru, karena fish
ditentukan dengan var
. Mencoba menetapkan nilai baru ke aquarium
akan memberikan error karena hal tersebut didefinisikan dengan val
.
Jenis yang Anda simpan di variabel ditentukan saat compiler dapat mengetahuinya dari konteks. Jika Anda mau, Anda selalu dapat menentukan jenis variabel secara eksplisit menggunakan notasi titik dua.
- Tentukan beberapa variabel dan tentukan jenisnya secara eksplisit.
var fish: Int = 12
var lakes: Double = 2.5
Setelah jenis ditetapkan oleh Anda atau compiler, Anda tidak dapat mengubah jenis, atau Anda akan mendapat error.
Langkah 4: Pelajari string
String di Kotlin berfungsi seperti string di bahasa pemrograman lain dengan menggunakan "
untuk string dan '
untuk karakter tunggal, dan Anda dapat menggabungkan string dengan operator +
. Anda dapat membuat template string dengan menggabungkannya dengan nilai; nama $
variable
diganti dengan teks yang merepresentasikan nilai. Hal ini disebut interpolasi variabel.
- Buat template string.
val numberOfFish = 5
val numberOfPlants = 12
"I have $numberOfFish fish" + " and $numberOfPlants plants"
⇒ res20: kotlin.String = I have 5 fish and 12 plants
- Buat template string dengan ekspresi di dalamnya. Seperti pada bahasa lain, nilai dapat menjadi hasil dari ekspresi. Gunakan kurung kurawal
{}
untuk menentukan ekspresi.
"I have ${numberOfFish + numberOfPlants} fish and plants"
⇒ res21: kotlin.String = I have 17 fish and plants
Dalam tugas ini, Anda akan mempelajari boolean dan memeriksa kondisi dalam bahasa pemrograman Kotlin. Seperti bahasa lain, Kotlin memiliki boolean dan operator boolean seperti kurang dari, sama dengan, lebih besar dari, dan sebagainya (<
, ==
, >
, !=
, <=
, >=
).
- Tulis pernyataan
if
/else
.
val numberOfFish = 50
val numberOfPlants = 23
if (numberOfFish > numberOfPlants) {
println("Good ratio!")
} else {
println("Unhealthy ratio")
}
⇒ Good ratio!
- Coba rentang dalam pernyataan
if
. Di Kotlin, Anda juga dapat menguji kondisi menggunakan rentang.
val fish = 50
if (fish in 1..100) {
println(fish)
}
⇒ 50
- Tulis
if
dengan beberapa kasus. Untuk kondisi yang lebih rumit, gunakan logika dan&&
serta logika atau||
. Seperti pada bahasa lain, Anda dapat memiliki banyak kasus dengan menggunakanelse if
.
if (numberOfFish == 0) {
println("Empty tank")
} else if (numberOfFish < 40) {
println("Got fish!")
} else {
println("That's a lot of fish!")
}
⇒ That's a lot of fish!
- Coba pernyataan
when
. Ada cara yang lebih baik untuk menulis serangkaian pernyataanif
/else if
/else
di Kotlin, menggunakan pernyataanwhen
, yang seperti pernyataanswitch
dalam bahasa lain. Kondisi dalam pernyataanwhen
juga dapat menggunakan rentang.
when (numberOfFish) {
0 -> println("Empty tank")
in 1..39 -> println("Got fish!")
else -> println("That's a lot of fish!")
}
⇒ That's a lot of fish!
Dalam tugas ini, Anda akan mempelajari variabel nullable versus non-nullable. Error pemrograman yang melibatkan null telah menjadi sumber bug yang tidak terhitung. Kotlin berusaha mengurangi bug dengan mengenalkan variabel non-nullable.
Langkah 1: Pelajari nullabilitas
Secara default, variabel tidak boleh null
.
- Deklarasikan
Int
dan tetapkannull
.
var rocks: Int = null
⇒ error: null can not be a value of a non-null type Int
- Gunakan operator tanda tanya,
?
, setelah jenis untuk menunjukkan bahwa variabel dapat berupa null. DeklarasikanInt?
dan tetapkannull
.
var marbles: Int? = null
Jika Anda memiliki jenis data yang kompleks, seperti daftar:
- Anda dapat mengizinkan elemen daftar menjadi null.
- Anda dapat mengizinkan daftar menjadi null, tapi jika tidak null, elemennya tidak boleh menjadi null.
- Anda dapat mengizinkan daftar atau elemen menjadi null.
Daftar dan beberapa jenis data kompleks lainnya akan dibahas dalam tugas berikutnya.
Langkah 2: Pelajari ? dan ?: operator
Anda dapat menguji null
dengan operator ?
, sehingga Anda tidak perlu menulis banyak pernyataan if
/else
.
- Tulis beberapa kode dengan cara yang lebih panjang untuk memeriksa apakah variabel
fishFoodTreats
tidaknull
. Kemudian turunkan variabel tersebut.
var fishFoodTreats = 6
if (fishFoodTreats != null) {
fishFoodTreats = fishFoodTreats.dec()
}
- Sekarang lihat cara penulisan Kotlin, menggunakan operator
?
.
var fishFoodTreats = 6
fishFoodTreats = fishFoodTreats?.dec()
- Anda juga dapat merangkai uji null dengan operator
?:
. Lihat contoh berikut:
fishFoodTreats = fishFoodTreats?.dec() ?: 0
Ini adalah singkatan dari "jika fishFoodTreats
bukan null
, kurangi dan gunakan; jika tidak, gunakan nilai setelah ?:
, yaitu 0." Jika fishFoodTreats
adalah null
, evaluasi dihentikan, dan metode dec()
tidak dipanggil.
Poin tentang pointer null
Jika Anda sangat menyukai NullPointerExceptions
, Kotlin akan membiarkan Anda tetap menyimpannya. Operator pernyataan not-null, !!
(double-bang), mengonversi nilai apa pun menjadi jenis non-null dan melempar pengecualian jika nilainya null
.
val len = s!!.length // throws NullPointerException if s is null
Dalam tugas ini, Anda akan mempelajari array dan daftar, serta mempelajari berbagai cara untuk membuat loop dalam bahasa pemrograman Kotlin.
Langkah 1: Buat daftar
Daftar adalah jenis fundamental di Kotlin, dan mirip dengan daftar di bahasa lain.
- Deklarasikan daftar menggunakan
listOf
, lalu cetak daftar tersebut. Daftar ini tidak dapat diubah.
val school = listOf("mackerel", "trout", "halibut")
println(school)
⇒ [mackerel, trout, halibut]
- Deklarasikan daftar yang dapat diubah menggunakan
mutableListOf
. Menghapus item.
val myList = mutableListOf("tuna", "salmon", "shark")
myList.remove("shark")
⇒ res36: kotlin.Boolean = true
Metode remove()
menampilkan true
saat berhasil menghapus item yang dilewati.
Langkah 2: Buat array
Seperti bahasa lain, Kotlin memiliki array. Tidak seperti daftar di Kotlin, yang memiliki versi yang dapat dan tidak dapat diubah, tidak ada versi Array
yang dapat diubah. Saat Anda membuat array, ukuran telah diperbaiki. Anda tidak dapat menambah atau menghapus elemen, kecuali menyalin ke array baru.
Aturan tentang penggunaan val
dan var
sama dengan array seperti pada daftar.
- Mendeklarasikan array string menggunakan
arrayOf
. Gunakan utilitas arrayjava.util.Arrays.toString()
untuk mencetaknya.
val school = arrayOf("shark", "salmon", "minnow")
println(java.util.Arrays.toString(school))
⇒ [shark, salmon, minnow]
- Array yang dideklarasikan dengan
arrayOf
tidak memiliki jenis yang terkait dengan elemen, sehingga Anda dapat mencampur jenis, yang berguna. Mendeklarasikan array dengan berbagai jenis.
val mix = arrayOf("fish", 2)
- Anda juga dapat mendeklarasikan array dengan satu jenis untuk semua elemen. Mendeklarasikan array bilangan bulat menggunakan
intArrayOf()
. Terdapat builder yang sesuai, atau fungsi pembuat instance, untuk array jenis lain.
val numbers = intArrayOf(1,2,3)
- Gabungkan dua array dengan operator
+
.
val numbers = intArrayOf(1,2,3)
val numbers3 = intArrayOf(4,5,6)
val foo2 = numbers3 + numbers
println(foo2[5])
=> 3
- Coba berbagai kombinasi array dan daftar bertingkat. Seperti dalam bahasa lain, Anda dapat menyusun array dan daftar secara bertingkat. Artinya, saat Anda menempatkan array dalam array, Anda akan memiliki array dari array—bukan array yang diratakan dari isi keduanya. Elemen array juga dapat berupa daftar, dan elemen daftar dapat berupa array.
val numbers = intArrayOf(1, 2, 3)
val oceans = listOf("Atlantic", "Pacific")
val oddList = listOf(numbers, oceans, "salmon")
println(oddList)
⇒ [[I@89178b4, [Atlantic, Pacific], salmon]
Elemen pertama, numbers
, adalah Array
. Jika Anda tidak menggunakan utilitas array untuk mencetaknya, Kotlin akan mencetak alamat, bukan konten array.
- Salah satu fitur menarik dari Kotlin adalah Anda dapat menginisialisasi array dengan kode, bukan menginisialisasinya ke 0. Coba contoh ini:
val array = Array (5) { it * 2 }
println(java.util.Arrays.toString(array))
⇒ [0, 2, 4, 6, 8]
Kode inisialisasi berada di antara tanda kurung kurawal, {}
. Dalam kode, it
mengacu pada indeks array, dimulai dengan 0.
Langkah 3: Buat loop
Setelah memiliki daftar dan array, pengulangan elemen akan berfungsi seperti yang Anda harapkan.
- Buat array. Gunakan loop
for
untuk melakukan iterasi melalui array dan mencetak elemen.
val school = arrayOf("shark", "salmon", "minnow")
for (element in school) {
print(element + " ")
}
⇒ shark salmon minnow
- Di Kotlin, Anda dapat membuat loop melalui elemen dan indeks pada waktu yang bersamaan. Coba contoh ini:
for ((index, element) in school.withIndex()) {
println("Item at $index is $element\n")
}
⇒ Item at 0 is shark Item at 1 is salmon Item at 2 is minnow
- Coba berbagai ukuran dan rentang langkah. Anda dapat menentukan rentang angka atau karakter, secara alfabetis. Seperti pada bahasa lain, Anda tidak perlu melangkah maju dengan 1. Anda dapat melakukan langkah mundur menggunakan
downTo
.
for (i in 1..5) print(i)
⇒ 12345
for (i in 5 downTo 1) print(i)
⇒ 54321
for (i in 3..6 step 2) print(i)
⇒ 35
for (i in 'd'..'g') print (i)
⇒ defg
- Coba beberapa loop. Seperti bahasa lain, Kotlin memiliki loop
while
, loopdo...while
, serta operator++
dan--
. Kotlin juga memiliki looprepeat
.
var bubbles = 0
while (bubbles < 50) {
bubbles++
}
println("$bubbles bubbles in the water\n")
do {
bubbles--
} while (bubbles > 50)
println("$bubbles bubbles in the water\n")
repeat(2) {
println("A fish is swimming")
}
⇒ 50 bubbles in the water 49 bubbles in the water A fish is swimmingA fish is swimming
Kotlin sangat mirip dengan bahasa lain dalam hal dasar-dasar seperti operator, daftar, dan loop, tetapi ada beberapa perbedaan penting.
Fitur berikut mungkin berbeda di Kotlin dengan yang biasa Anda gunakan di bahasa lain:
- Jenis Kotlin tidak dapat dikonversi secara implisit—gunakan casting.
- Variabel yang dideklarasikan dengan
val
hanya dapat ditetapkan sekali. - Variabel Kotlin tidak dapat bernilai null secara default. Gunakan
?
untuk membuat variabel nullable. - Dengan Kotlin, Anda dapat membuat loop melalui indeks dan elemen array secara bersamaan dalam loop
for
.
Konstruksi pemrograman Kotlin berikut mirip dengan yang ada di bahasa lain:
- Array dan daftar dapat memiliki satu jenis atau jenis campuran.
- Array dan daftar dapat bertingkat.
- Anda dapat membuat loop dengan
for
,while
,do
/while
, danrepeat
. - Pernyataan
when
adalah pernyataanswitch
versi Kotlin, tetapiwhen
lebih fleksibel.
Dokumentasi Kotlin
Jika Anda ingin mendapatkan informasi lebih lanjut tentang topik apa pun dalam kursus ini, atau jika Anda mengalami masalah, https://kotlinlang.org adalah titik awal terbaik Anda.
- Konversi jenis eksplisit
- Menentukan variabel
- Template string
- Nilai yang dapat berupa null
- Daftar
- Array
if
,when
,for
,while
- Operator
?:
(Elvis) !!
operator
Tutorial Kotlin
Situs https://try.kotlinlang.org menyertakan tutorial lengkap yang disebut Kotlin Koans, interpreter berbasis web, dan serangkaian lengkap dokumentasi referensi dengan contoh.
Kursus Udacity
Untuk melihat kursus Udacity tentang topik ini, lihat Kotlin Bootcamp for Programmers.
IntelliJ IDEA
Dokumentasi untuk IntelliJ IDEA dapat ditemukan di situs JetBrains.
Bagian ini mencantumkan kemungkinan tugas pekerjaan rumah untuk siswa yang mengerjakan codelab ini sebagai bagian dari kursus yang dipimpin oleh instruktur. Instruktur menentukan hal berikut:
- Memberikan pekerjaan rumah jika diperlukan.
- Memberi tahu siswa cara mengirimkan tugas pekerjaan rumah.
- Memberi nilai tugas pekerjaan rumah.
Instruktur bisa menggunakan saran ini sesuai kebutuhan, dan bebas menugaskan pekerjaan rumah lain yang dirasa cocok.
Jika Anda menyelesaikan codelab ini sendiri, gunakan tugas pekerjaan rumah ini untuk menguji pengetahuan Anda.
Jawab pertanyaan-pertanyaan berikut
Pertanyaan 1
Manakah dari berikut ini yang mendeklarasikan daftar string yang tidak dapat diubah?
▢ val school = arrayOf("shark", "salmon", "minnow")
▢ var school = arrayOf("shark", "salmon", "minnow")
▢ val school = listOf("shark", "salmon", "minnow")
▢ val school = mutableListOf("shark", "salmon", "minnow")
Pertanyaan 2
Apa output dari kode berikut?for (i in 3..8 step 2) print(i)
▢ 345678
▢ 468
▢ 38
▢ 357
Pertanyaan 3
Apa tujuan tanda tanya dalam kode ini?var rocks: Int? = 3
▢ Jenis variabel rocks
tidak tetap.
▢ Variabel rocks
dapat ditetapkan ke null.
▢ Variabel rocks
tidak dapat ditetapkan ke null.
▢ Variabel rocks
tidak boleh diinisialisasi secara langsung.
Lanjutkan ke pelajaran berikutnya:
Untuk ringkasan kursus, termasuk link ke codelab lainnya, lihat "Kotlin Bootcamp for Programmers: Welcome to the course".