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