Trong bài viết tiếp theo này, chúng tôi xin giới thiệu về các câu lệnh điều kiện – rẻ nhánh trong Ruby. Cụ thể sẽ có những câu lệnh sau:
- if
- if…. else
- if…. elsif …. else
- unless
- case…..
IF
Câu lệnh if trong Ruby cũng khá giống câu lệnh if trong hầu hết các ngôn ngữ lập trình khác, cụ thể ta có cú pháp của lệnh if như sau:
if (biểu thức điều kiện)
# lệnh hoặc khối lệnh
end
Nếu như biểu thức điều kiện cho giá trị true (đúng) thì khối lệnh bên trong if sẽ được thực hiện và ngược lại nếu biểu thức điều kiện cho giá trị false (sai) thì khối lệnh sẽ không được thực hiện. Ta lấy một ví dụ đơn giản sau:
if (1<2)
puts "Biểu thức điều kiện đúng"
end
# kết quả hiển thị sẽ là :
==> Biểu thức điều kiện đúng.
IF … ELSE
Else … là một phần mở rộng của câu lệnh if. Ở câu lệnh if, nếu như biểu thức điều kiện cho giá trị false (sai), thì câu lệnh if sẽ không thực hiện gì. Để thực hiện một khối lệnh trong trường hợp biểu thức điều kiện sai, ta sử dụng if…else, nó có cú pháp như sau:
if (biểu thức điều kiện)
# khối lệnh 1
else
#khối lệnh 2
end
Hoạt động của if … else như sau: Nếu biểu thức điều kiện cho giá trị true (đúng) thì Khối lệnh 1 sẽ được thực hiện, ngược lại nếu biểu thức điều kiện cho giá trị false (sai) thì khối lệnh 2 sẽ được thực hiện. Để hiểu rõ hơn, ta có ví dụ sau:
if 1 > 2
print "Điều kiện đúng, sau if được thực hiện."
else
print "Điều kiện sai, sau else được thực hiện."
end
#Kết quả sau khi chạy đoạn code trên :
==> Điều kiện sai, sau else được thực hiện.
Vì 1 > 2 cho giá trị false, nên câu lên sau else sẽ được thực hiện.
If … elsif … else ….
Bạn sẽ làm gì nếu như bạn muốn có nhiều hơn 2 lựa chọn trong câu lệnh if của mình ? Khí đó, cấu trúc elsif sẽ giúp bạn giải quyết vấn đề. Nó có cú pháp như sau:
if (biểu thức điều kiện 1)
# khối lệnh 1
elsif (biểu thức điều kiện 2)
#khối lệnh 2
else
#khối lệnh 3
Cách làm việc của cú pháp trên như sau: Khi vào lệnh if, biểu thức điều kiện 1 sẽ được kiểm tra, nếu cho giá trị true (đúng) thì khối lệnh 1 sẽ được thực hiện, ngược lại thì biểu thức điều kiện 2 được kiểm tra, nếu trả về giá trị true (đúng) thì khối lệnh 2 sẽ được thực hiện và ngược lại thì khối lệnh 3 sẽ được thực hiện. Để hiểu thêm, bạn xem ví dụ sau:
if x < y
puts "x nhỏ hơn y!"
elsif x > y
puts "x lớn hơn y!"
else
puts "x bằng y!"
end
-----------------
Đây là ví dụ về so sánh 2 số. Ta thấy có sử dụng câu lệnh điều kiện if.. elsif .. else .. tạo ra 3 trường hợp cho các điều kiện.
Như vậy, với cấu trúc if … elsif …, bạn có thể mở rộng ra được thêm nhiều lựa chọn, thêm nhiều điều kiện cho biểu thức if của mình. Xem cú pháp sau:
if (biểu thức điều kiện 1)
# khối lệnh 1
elsif (biểu thức điều kiện 2)
#khối lệnh 2
…….
elsif (biểu thức điều kiện n-1)
# Khối lệnh n -1
else
#khối lệnh n
Unless
Thỉnh thoảng bạn muốn sử dụng câu lệnh điều kiện để kiểm tra một điều kiện sai, thay vì kiểm tra tính đúng của điều kiện. Bạn hoàn toàn có thể sử dụng câu lệnh if/else để làm việc đó, nhưng trong Ruby, bạn có thể sử dụng một thứ tốt hơn, đó chính là câu lệnh unless.
Ngược lại với câu lệnh if/else, câu lệnh unless có cú pháp như sau:
unless (điều kiện)
# khối lệnh 1
else
#khối lệnh 2
end
Câu lệnh unless sẽ thực hiện như sau, nó sẽ kiểm tra điều kiện, nếu điều kiện là false (sai) thì khối lệnh 1 sẽ được thực hiện và ngược lại, nếu điều kiện là true (đúng) thì khối lệnh 2 sẽ được thực hiện. Như vậy là nó hoàn toàn trái ngược với câu lệnh if/else.
Ta có ví dụ sau:
hungry = true
unless hungry
puts "Tôi chưa đói, tôi không ăn."
else
puts "Tôi đói, tối muốn ăn!"
end
---------
Kết quả trả về sẽ là : "Tôi đói, tối muốn ăn!"
Vì giá trị của biến hungry là true, nên câu lệnh sau else sẽ được thực hiện.
Case
Khi bạn phải thực hiện các hành động khác nhau dựa trên giá trị của một biến duy nhất, nếu như sử dụng if..elsif thì sẽ khá là dài dòng và sẽ lặp đi lặp lại các đoạn code. Để tránh điều này, Ruby cung cấp cho chúng ta câu lệnh case. Câu lệnh case bắt đầu với từ khóa case cùng với tên biến mà nó cần kiểm tra. Cú pháp của case như sau:
case (Biến_kiểm_tra)
when giá_trị_1 : khối lệnh 1
when giá_trị_2 : khối lệnh 2
....
when giá_trị_n: khối lệnh n
else khối lệnh
end
Câu lệnh case sẽ kiểm tra giá trị của Biến_kiểm_tra nếu giá trị của Biến_kiểm_tra bằng với giá trị nào đó trong các trường hợp when, thì khối lệnh của trường hợp đó được thực hiện, nếu không có giá trị nào của các trường hợp when đúng với giá trị của Biến_kiểm_tra thì khối lệnh sau else được thực hiện.
Biến kiểm tra không bắt buộc là một biến đơn, nó có thể là một biểu thức, ví dụ: case (i+1) . Kiểu dữ liệu của biến kiểm tra và giá trị của mỗi when có thể là số nguyên hoặc chuỗi. Ví dụ: when 1, ‘Monday’, ‘Mon’ then puts( “Yup, ‘#{i}’ is Monday” )
Ta có thể thay thế dấu hai chấm (:) trong các trường hợp when bằng từ khóa then. Ví dụ: when giá_trị_1 then khối lệnh 1
Bạn có thể thêm vào nhiều dòng lệnh sau câu lệnh điều kiện when và bạn có thể thêm vào nhiều giá trị so sánh cho mỗi trường hợp when bằng cách sử dụng dấu phẩy(,) để phân các giá trị. Ví dụ :
....
when 2, 3, 4, 5, 6 :
puts("Thứ 2, 3, 4, 5,6 là ngày làm việc" )
puts("Chúc bạn làm việc hiểu quả.")
when 7,8 : puts("Chúc bạn cuối tuần vui vẻ! ")
...