Bài 11-Biểu thức when trong Kotlin


Với Kotlin, biểu thức switch đã được thay thế bởi biểu thức when. When hoạt động rất mạnh mẽ, đa năng, đáp ứng được nhiều trường hợp xử lý cho lập trình viên. Hi vọng với 6 ví dụ chi tiết trong bài này sẽ giúp các bạn nắm chắc về cách thức hoạt động của when, có thể áp dụng nhuần nhuyễn vào các bài thực tế khác phức tạp hơn.

Cú pháp tổng quát của when:

when(<expression>){

<value 1> ->   <statement 1>

<value 2> ->   <statement 2>

 else           ->   <statement else>

}

when lấy giá trị trong <expression>, đem so sánh với các <value> bên trong , nếu trùng khớp với value nào thì <statement> đó sẽ được thực thi. Nếu tất cả <value> đều không khớp với <expression> thì else sẽ được thực hiện.

Lưu đồ của when có thể được hoạt động như hình dưới đây:

Ví dụ 1:


fun main(args: Array<String>) {
var value:Int=2
when(value)
{
1->println("Hello Obama")
2->println("Hello Putin")
3->println("Hello Kim Jong Un")
else-> println("Hello Everyone!")
}
}

Khi chạy đoạn coding trên thì dòng “Helo Putin” sẽ được xuất ra màn hình.

Ví dụ 2: Viết chương trình cho phép nhập vào 2 số a , b và 1 phép toán +,-,*,/. Xuất kết quả tương ứng với phép toán


fun main(args: Array<String>) {
var a:Double=0.0;
var b:Double=0.0;
var pheptoan:String?
println("Nhập a:")
var sa=readLine()
if(sa!=null)
a= sa.toDouble()
println("Nhập b:")
var sb=readLine()
if(sb!=null)
b= sb.toDouble()
println("Nhập phép toán(+,-,*,/):")
pheptoan= readLine()
when(pheptoan)
{
"+"-> println(a.toString()+" + "+b.toString()+"="+(a+b))
"-"-> println(a.toString()+" - "+b.toString()+"="+(a-b))
"*"-> println(a.toString()+" * "+b.toString()+"="+(a*b))
"/"->
if(b==0.0)
println("mẫu số phải khác 0")
else
println(a.toString()+"/"+b.toString()+"="+(a/b))
else-> println("bạn nhập lụi")
}
}

Kotlin cũng cho phép ta gom nhóm nhiều điều kiện trong biểu thức when nếu như các giá trị này cùng giải quyết một vấn đề nào đó bằng cách dùng dấu phẩy , để ngăn cách các giá trị:

Ví dụ 3: Nhập vào một tháng bất kỳ, hỏi tháng này thuộc quý mấy trong năm. Biết rằng tháng 1,2,3 là quý 1; tháng 4,5,6 là quý 2; tháng 7,8,9 là quý 3; tháng 10,11,12 là quý 4.


fun main(args: Array<String>) {
var month:Int=0
println("Nhập tháng:")
var s:String?= readLine()
if(s!=null)
month=s.toInt()
when(month)
{
1,2,3-> println("Tháng "+month+" thuộc quý 1")
4,5,6-> println("Tháng "+month+" thuộc quý 2")
7,8,9->println("Tháng "+month+" thuộc quý 3")
10,11,12->println("Tháng "+month+" thuộc quý 4")
else-> println("Tháng "+month+" ko hợp lệ")
}
}

Cấu trúc when của Kotlin rất mạnh mẽ, nó còn cho phép ta kiểm tra theo vùng dữ liệu liên tục:

Ví dụ 4:


fun main(args: Array<String>) {
var tuoi:Int=0
println("Nhập tuoi:")
var s:String?= readLine()
if(s!=null)
tuoi=s.toInt()
when(tuoi)
{
in 1..5-> println("Tuổi thiếu nhi")
in 6..9-> println("Tuổi nhi đồng")
in 10..15-> println("Tuổi thiếu niên")
in 16..28-> println("Tuổi thanh niên")
!in 1..100-> println("Ko biết tuổi gì")
else->println("Tuổi già khú đế")
}
}

ở trên bạn thấy Tui để in 1..5 là cú pháp mà tuoi nằm trong đoạn từ 1 tới 5

!in 1..100 là cú pháp nếu tuoi không nằm trong đoạn 1 tới 100

Như vậy nếu các bạn muốn kiểm tra biến thuộc một vùng dữ liệu liên tục nào đó thì có thể dùng cú pháp ở trên, Tui thấy nó rất hay trong trường hợp này. Ta có thể áp dụng tốt vào các giải thuật so khớp.

Ngoài ra when còn là một biểu thức trả về kết quả, cách viết linh động như sau:

Ví  dụ 5:


fun main(args: Array<String>) {
var x:Int=8
var kq=when(x)
{
in 1..10->x+100
in 20..30->x-1000
else -> x
}
println(kq)
}

Chạy lên ta sẽ có kq=108. Vì cách viết trên sẽ gán kết quả vào cho biến kq, khi x=8 thì thủa vùng 1..10 suy ra kết quả kq=8+100=108

Cuối cùng when có thể hoạt động như chuỗi biểu thức if-else if:

Ví dụ 6:


fun main(args: Array<String>) {
var x:Int=100
when
{
x%2==0-> println("X là số chẵn")
x%2!=0->println("X là số lẻ")
}
}

Lệnh trên chính là if else, chạy lên sẽ xuất X là số chẵn. Ta có thể viế when như trên để thay thế cho các if else.

Với biến x ở ví dụ trên(hoặc biến bất kỳ), nếu bạn muốn xuất giá trị của biến cùng với chuỗi thì nên dùng ký tự Đô La đằng trước biến, ví dụ: $x thì Kotlin sẽ tự tìm tới tên biến để xuất giá trị của nó ra, ta có thể viết lại lệnh trên như sau:


fun main(args: Array<String>) {
var x:Int=100
when
{
x%2==0-> println("$x là số chẵn")
x%2!=0->println("$x là số lẻ")
}
}

Khi chạy ta sẽ có kết quả: 100 là số chẵn

Như vậy tới đây Tui đã hướng dẫn xong cấu trúc when trong Kotlin, các bạn chú ý học kỹ và hiểu được nó thông qua các ví dụ ở trên nhé. Đặc biệt nắm được lưu đồ hoạt động, cách viết theo dạng when khác nhau.

Các bạn có thể tải source code bài này ở đây: http://www.mediafire.com/file/6mxazxl8726t1df/HocWhen.rar

Hẹn gặp các bạn ở những bài tiếp theo

Chúc các bạn thành công!

Trần Duy Thanh (http://ssoftinc.com/)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: