fun main(args : Array<String>){
/*
when expression dapat mengembalikan nilai dan
dapat disimpan di dalam sebuah variabel seperti berikut:
*/
val value = 7
val anyType : Any = 100L
// val stringOfValue = when(value)
// {
// 6 -> println("value is 6")
// 7 -> println("value is 7")
// 8 -> println("values is 8")
// else -> println("value cannot be reached")
/*
else adalah hal wajib jika kita menggunakan when expression
untuk mengembalikan nilai. Bagaimana jika kita melewatkannya? Akan tampil eror berikut:
*/
/*
Jika kita memiliki dua atau lebih baris kode yang akan kita
jalankan di setiap branch, kita bisa memindahkannya ke dalam curly braces seperti berikut:
*/
val stringOfValue = when (value) {
6 -> {
println("Six")
"value is 6"
}
7 -> {
println("Seven")
"value is 7"
}
8 -> {
println("Eight")
"value is 8"
}
else -> {
println("undefined")
"value cannot be reached"
}
}
/*
when juga memungkinkan kita untuk memeriksa instance dengan tipe
tertentu dari sebuah objek menggunakan is atau !is
*/
when (anyType) {
is Long -> println("the value has a long type")
!is String -> println("the value has a string type")
else -> println("underfined")
}
println(stringOfValue)
println(anyType)
val values = 100
val ranges = 10..50
/*
Selain itu, when expression juga bisa kita gunakan
untuk memeriksa nilai yang terdapat pada sebuah Range atau Collection.
*/
when(values)
{
in ranges -> println("value is in the range")
!in ranges -> println("value is outside the range")
else -> println("value undefined")
}
println(values)
/*
Sejak Kotlin 1.3, kita dapat menangkap subjek dari
when expression di dalam sebuah variabel.
*/
val registerNumber = when(val regis = getRegisterNumber()){
in 1..50 -> 50 * regis
in 51..100 -> 100 * regis
else -> regis
}
/*
Jika kita melihat penjelasan dan contoh penggunaan dari when expression di atas,
ia memiliki kesamaan dengan if expression. Lantas disituasi seperti apa kita menggunakannya?
if expression sebaiknya digunakan ketika kondisi yang diberikan tidak lebih dari 2 (dua) dan kondisi
yang diberikan tidak terlalu rumit.
Berbeda dengan when expression, ia bisa digunakan ketika kondisi yang diberikan lebih dari 2 (dua)
*/
}
fun getRegisterNumber() = Random.nextInt(100)