Advertisement
  1. Code
  2. Kotlin

Kotlin dari awal: Nullability, Perulangan dan Pengkondisian

Scroll to top
Read Time: 9 min
This post is part of a series called Kotlin From Scratch.
Kotlin From Scratch: Variables, Basic Types, and Arrays
Kotlin From Scratch: Ranges and Collections

() translation by (you can also view the original English article)

Kotlin adalah bahasa pemrograman modern yang mengkompilasi Java ke bytecode. Kotlin adalah bahasa pemrograman yang bebas dan open source, dan dijanjikan akan membuat koding Android bakal lebih menyenangkan.

Dalam artikel sebelumnya, Kamu belajar tentang variabel, tipe data simpel, array, komentar dan type inference di Kotlin. Dalam tutorial ini, kita akan melanjutkan belajar bahasa kotlin dengan melihat nullability, perulangan dan pengkondisian di Kotlin.

1. Nullability

Jika kamu seorang Android programmer, Pasti kamu pernah menemukan error yang terkenal yaitu NullPointerException di aplikasimu. Ini terjadi setiap kali ketika mencoba untuk memanggil metode atau membaca sebuah properti dari referensi obyek yang dimana nilainya null. Kabar baiknya adalah bahwa Kotlin bisa membantu kita menghindari jenis error tersebut dikarenakan bahasa pemrograman yang aman dari null. Itu berarti variabel tidak bisa memiliki nilai null kecuali kamu secara eksplisit menyatakan jenis mereka menjadi nullable. Dengan kata lain, secara default, jenis tidak dapat null. Mari kita lihat bagaimana fitur ini Kotlin dapat membantu kita menghindari kesalahan dalam kode kita.

1
val name: String = null // will not compile

Seperti yang kamu lihat di atas, jika kita menetapkan null ke nama variabel, kompilator akan mengeluh. Untuk kompilator untuk memungkinkan penetapan, menyatakan nama sebagai nullable dengan menambahkan ? setelah tipe data.

1
val name: String? = null // will compile

2
name = "Chike" // new value is "Chike"

Perhatikan bahwa jika tanda ? dimasukkan setelah nama tipe data, kita secara eksplisit telah memerintahkan kompilator bahwa nilai tipe dapat menyimpan referensi obyek atau dapat menjadi null — itu yang dimaksud nullable. Di sini kita melakukannya dengan tipe data String, juga sama halnya dengan Int?, Byte?, Long?, MyClass?, dan seterusnya.

Pemanggikan operator yang aman: ?.

Mari kita pelajari lebih lanjut bagaimana null-safety bekerja di Kotlin dengan operator yang disebut operator panggilan aman ?.

1
var name: String? = null
2
print(name.length) // will not compile

Kode di atas tidak akan mengkompilasi karena Kotlin adalah bahasa null-safe. Variable name diberikan nilai null. Sekarang, menerapkan properti length pada variabel yang akan memicu error NullPointerException di Java. Tetapi Kotlin kompiler tidak akan mengizinkan untuk meng-invoke karena variabelnya tidak dapat null. Kompilator tidak akan membiarkan kita untuk melakukan sesuatu yang bisa menghasilkan NullPointerException!

1
val v: String? = null
2
print(v?.length) // will compile and print "null"

Sekarang dengan menambahkan operator panggilan aman?. ke variabel sebelum menerapkan properti, kita telah secara eksplisit memerintahkan kompilator untuk memohon properti hanya jika nilai bukan nol. Jika nilai null, kompilator akan menggunakan string "null" sebagai nilai bagi kita. Ini bekerja juga untuk metode dan properti yang tidak hanya.

Ketika kamu memanggil metode nullable, tipe data yang kembali juga akan nullable. Jadi, misalnya jika tipe data kembalian  v?.length ekspresi ketika v nullable akan menjadi Int?.

1
val v: String? = null
2
val len: Int? = v?.length
3
print(len) // will compile and print "null"

Untuk mem-bypass nullability cek kompilator Kotlin, kita dapat menggantikan ? operator dengan!!. Ini tidak dianjurkan, karena probabilitas tinggi untuk mendapatkan NullPointerException kesalahan jika digunakan.

1
val v: String? = null
2
val len: Int? = v!!.length
3
print(len) // triggers a NullPointerException error

Elvis operator: ?:

Operator ini ?: disebut Elvis operator (karena bentuknya terlihat seperti kepala Elvis). Hal ini digunakan untuk memberikan nilai alternatif untuk variabel Apakah bernilai null.

1
val username = null
2
val name: String = username ?: "No name"
3
print(name) // will compile and print "No name"

Di sini, kompilator ditugaskan string "No name" untuk variabel name, karena nilai username pertama null. Jika nilai pertama tidak null, maka nilai akan ditempatkan ke variabel sebaliknya.

2. Perulangan

Kotlin mempunyai while, do-while, dan for loops.

Perulangan while

Pengulangan pernyataan memungkinkan kita untuk menentukan bahwa kode yang harus mengulangi tindakan sementara beberapa kondisi tetap benar.

Sehingga dalam Kotlin, menggunakan sementara loop sama seperti bahasa lain seperti Java.

1
while (condition) {
2
    // execute code here

3
}
4
5
while (fuel > 5) {
6
    driveMeAroundLagos()
7
}

Selama kondisi benar, kode dalam kurung kurawal atau badan loop yang akan dijalankan. Jika kondisi false, maka kode tidak akan dijalankan. Dalam contoh di atas, setelah variabel fuel menjadi kurang dari 5 liter, kondisi menjadi false dan kemudian loop akan berakhir. Dengan kata lain, driveMeAroundLagos() method akan berhenti mengeksekusi.

Perulangan do...while

Kotlin juga memiliki do...while.

1
do {
2
    // execute code here

3
} while (condition)

Hal ini mirip dengan while. Di while loop, program tes kondisi perulangan pada awal perulangan sebelum mengeksekusi perualangan bodi. Jika kondisi palsu, tubuh tidak dieksekusi. Tapi jangan-sementara loop tes kondisi setelah mengeksekusi loop tubuh. Ini berarti bahwa tubuh dijalankan setidaknya sekali.

Perualangan for

A untuk loop adalah pengulangan pernyataan yang memungkinkan kita untuk iterate atas objek sementara kondisi tertentu benar.

1
for (value in range) {
2
    // Execute code

3
}   

Di Kotlin, untuk perulangan for membangun bekerja dengan iterasi atas rentang, koleksi, atau iterables lain (saya akan menjelaskan lebih lanjut tentang ini di posting berikutnya). Perulangan for bekerja sama dengan operator di, yang digunakan untuk memastikan apakah nilai yang terdapat dalam berbagai tertentu.

1
for (a in 1..5) {
2
     print("$a ") // will print  1 2 3 4 5

3
}

Pada kode diatas, kita iterasi melalui berbagai tertutup 1 sampai 5 dan mencetak setiap nilai dalam kisaran.

Iterasi atas Array indeks

Kita dapat menggunakan fungsi withIndex()  atau properti indices di array mana kita memerlukan indeks untuk setiap elemen.

Menggunakan fungsi withIndex()

Kita bisa iterate melalui array untuk mengakses setiap elemen indeks dengan memanggil fungsi withIndex() pada array, karena fungsi withIndex() mengembalikan iterable jenis IndexedValue untuk setiap elemen. Hal ini memungkinkan kita mengakses indeks dan nilai untuk setiap elemen dari itu.

1
val numbersArray = intArrayOf(1,2,3,4,5)
2
for ((index, value) in numbersArray.withIndex()) {
3
    print("$index index value is $value\n")
4
}

Kode di atas akan mencetak hasilnya di bawah ini:

1
0 index value is 1
2
1 index value is 2
3
2 index value is 3
4
3 index value is 4
5
4 index value is 5

Menggunakan indices properti

Selain itu, kita dapat menggunakan properti indices pada array. Ini akan kembali hanya macam indeks berlaku untuk array.

1
val numbers1 = intArrayOf(1,2,3,4,5)
2
for (index in numbers1.indices) {
3
    print("$index index value is ${numbers1[index]}\n")
4
}

Kode di atas akan menghasilkan hasil yang sama sebagai contoh sebelumnya. Anda dapat melihat di sini juga bahwa kita dapat menggunakan indeks untuk mengakses elemen array, demikian pula dengan bahasa pemrograman lain seperti Java.

3. Pengkondisian

Kotlin memiliki tiga jenis pernyataan kondisi - if, if..else , dan when.

Pernyataan if

Jika pernyataan if menjalankan beberapa kode jika kondisi yang benar, atau hanya melompat, jika kondisi false. Tidak ada yang istimewa di sini,pernyataan if bekerja sama dengan cara mereka lakukan dalam kebanyakan bahasa pemrograman lain, termasuk Java.

1
val number = 20
2
if (number % 2 == 0) {
3
    print("$number is divisible by 2") // 20 is divisible by 2

4
}

Kami juga dapat memeriksa apakah variabel tipe tertentu menggunakan kata kunci is.

1
if (number is Int) {
2
    print("$number is an integer")
3
}   

Pernyataan if..else

if..else melakukan salah satu tindakan jika kondisi benar dan melakukan tindakan yang berbeda jika kondisi false.

1
val number = 13
2
if (number % 2 == 0) {
3
    print("$number is divisible by 2")
4
} else {
5
    print("$number is not divisible by 2") // 13 is not divisible by 2

6
}

Salah satu fitur utama yang membedakan if..else  di Kotlin dari bahasa pemrograman lain seperti Java, adalah kemampuan untuk menetapkan variabel dari nilai kembali if.else . Hal ini dimungkinkan karena if..else apat digunakan tidak hanya sebagai suatu pernyataan, tetapi juga sebagai ekspresi Kotlin.

1
val number = 13
2
val result = if (number % 2 == 0) {
3
    "$number is divisible by 2"
4
} else {
5
    "$number is not divisible by 2"
6
}
7
print(result) // 13 is not divisible by 2

ewPada kode diatas, kita ditugaskan variabel result dengan objek String berdasarkan if..else. Menyadari bahwa ini akan kembali hanya terakhir pernyataan dalam kondisi tertentu blok dan juga bahwa Anda tidak dapat menggunakan if jika tanpa else sebagai ekspresi.

1
val result = if (number % 2 == 0) {
2
    "Divisible by 2"
3
    "Number is $number" // only this string is returned if executed

4
} else {
5
    "Not divisible by 2"
6
    "Number is $number"
7
}

when ekspresi

Kotlin memperkenalkan when  sebagai pengganti akrab switch  yang kita miliki dalam bahasa pemrograman yang berbeda seperti C++, Java, dan sebagainya. when lebih singkat dan memiliki fitur yang lebih unggul daripada switch  Anda mungkin akrab mudah memahaminya.

pernyataan when melakukan berbagai tindakan berdasarkan nilai konstan tipe Int, String, Byte atau pendek atau Short lain.

1
fun guessTheNumber(number: Int) {
2
3
    when (number) {
4
        1 -> println("number is 1")
5
        2 -> println("number is 2")
6
        3 -> println("number is 3")
7
        else -> println("number is neither 1, 2 or 3")
8
    }
9
}

Pada kode di atas, kami melewati guessTheNumber() fungsi parameter nomor (kita akan membahas fungsi dalam Kotlin dalam posting berikutnya). when ekspresi kemudian memeriksa jika salah satu cabang sesuai nilai dengan isi number dan kemudian menjalankan tindakan di cabang tersebut. Jika tidak ada cabang pertandingan, else dijalankan.

Varian lain dari ketika ekspresi tidak memerlukan argumen, seperti dalam contoh di bawah ini.

1
fun guessTheNumber(number: Int) {
2
    
3
    when {
4
        number == 1 -> println("number is 1")
5
        number == 2 -> println("number is 2")
6
        number == 3 -> println("number is 3")
7
        else -> println("number is neither 1, 2 or 3")
8
    }
9
}

Jika kita ingin menjalankan lebih dari satu tindakan pada cabang, kita perlu untuk membungkus tindakan dalam kurung kurawal {}.

1
val number = 2
2
when (number) {
3
    1 -> println("number is 1")
4
    2 -> {
5
        // block of code executed

6
        println("number is 2") 
7
        println("it is an even number")
8
    }
9
    3 -> println("number is 3")
10
}

Selain itu, kita dapat menggabungkan nilai-nilai tes dalam satu cabang.

1
val number = 2
2
when (number) {
3
    1, 2 -> println("number is either 1 or 2") // number is either 1 or 2

4
    3 -> println("number is 3")
5
}

Berikut cabang pertama dijalankan karena kami menguji untuk nilai baik 1 atau 2.

Kesimpulan

Dalam tutorial ini, Anda belajar tentang nullability, perulangan dan pengkondisian dalam bahasa pemrograman Kotlin. Dalam tutorial berikutnya dalam seri Kotlin dari awal, Anda akan belajar tentang rentang dan koleksi API di Kotlin. Sampai jumpa lagi!

Untuk mempelajari lebih lanjut tentang bahasa Kotlin, saya sarankan mengunjungi dokumentasi Kotlin. Atau memeriksa beberapa dari kami Kotlin tutorial lain di sini di Envato Tuts +!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.