Câu lệnh điều kiện

Câu lệnh if

Câu lệnh if-then

Câu lệnh if-then là câu lệnh cơ bản nhất trong nhóm các câu lệnh xử lý dòng thực thi trong chương trình. Nó sẽ báo chương trình của bạn thực thi đúng đoạn mã lệnh chỉ khi một điều kiện kiểm tra là đúng (true). Minh hoạ sau đây sẽ làm rõ ý nghĩa của lệnh if-then:

Ví dụ, lớp Bicycle có thể cho phép hệ thống phanh giảm tốc độ của xe đạp chỉ khi xe đạp đã chuyển động:

void applyBrakes() {
    // nếu xe đạp chuyển động thì mới được phép giảm tốc độ
    if (isMoving){ 
        currentSpeed--;
    }
    ...
}

Nếu điều kiện ở trên là sai (false), có nghĩa là xe đạp không chuyển động thì không cần giảm tốc độ khi bóp phanh. Khi đó luồng điều khiển chương trình sẽ nhảy tới cuối của if-then và chạy tiếp các câu lệnh sau đó.

Câu lệnh if-then-else

Câu lệnh if-then-else cung cấp một đường rẽ nhánh xử lý thứ 2 tương ứng với trường hợp điều kiện của lệnh if trả về giá trị sai (false). Minh hoạ sau sẽ làm rõ ý nghĩa của câu lệnh này:

Tiếp tục sửa tiếp ví dụ ở trên, bạn có thể sử dụng câu lệnh if-then-else trong phương thức applyBrakes để đưa ra xử lý trong cả trường hợp mà xe không hoạt động. Cụ thể trong trường hợp mà xe không hoạt động mà vẫn bóp phanh thì có thể ra thông báo lỗi như ví dụ sau:

void applyBrakes() {
    if (isMoving) {
        currentSpeed--;
    } else {
        Console.Error.WriteLine("The bicycle has already stopped!");
    } 
}

Câu lệnh if-else-if

Một trường hợp khác của của câu lệnh if-elseif-else-if. Câu lệnh này cho phép chúng ta có thể xử lý nhiều nhánh thực thi với các khoảng điều kiện loại trừ nhau. Trong ví dụ, xếp hạng của sinh viên sẽ dựa trên điểm của bài kiểm tra: hạng A cho điểm lớn hơn 90%, hạng B cho lớn hơn 80% và nhỏ hơn 90%, và tiếp tục như vậy:

Bạn có thể điều chỉnh giá trị của testscore để kiểm tra xem chương trình có chạy đúng xếp hạng theo các khoảng điều kiện đã đưa ra hay không?

Câu lệnh switch

Giới thiệu

Không giống câu lệnh if-thenif-then-else, câu lệnh switch có thể có một số lượng các tình huống thực thi dựa trên những giá trị cụ thể. Câu lệnh switch làm việc với các kiểu dữ liệu nguyên thuỷ byte, short, char, int, kiểu enum, lớp String.

Đoạn mã lệnh sau đây sẽ minh hoạ rõ nét về việc sử dụng câu lệnh switch để xử lý các tình huống cụ thể.

Trong trường hợp này, August sẽ được in ra màn hình dòng lệnh.

Trong cấu trúc lệnh switch, phần thân của lệnh switch còn được gọi là khối switch. Các tình huống xử lý trong switch được gắn tương ứng với 1 hoặc nhiều nhãn case hoặc nhãn default. Câu lệnh switch sẽ đánh giá biểu thức giá trị của nó (nằm trong ngoặc đơn của lệnh switch) rồi thi hành tất cả các câu lệnh phù hợp với case tương ứng. Bạn sử dụng câu lệnh break để xác định là kết thúc phạm vị hiệu lực của case đó và nhiều case có thể chạy và dùng chung một break làm điểm kết thúc chung. Về mặt logic thì đối với trường hợp còn lại default thì không cần phải thêm lệnh break. Tuy nhiên nếu bạn viết thêm cho đầy đủ và tường minh thì cũng không sao.

Bạn cũng có thể dùng lệnh if-else-if để dùng thay thế cho lệnh switch. Tuy nhiên khi bạn dùng switch thì bạn sẽ nhìn thấy cấc tình huống thực thi tương ứng rõ ràng hơn. Đoạn mã lệnh ở trên giờ có thể viết lại như sau:

int month = 8;
if (month == 1) {
    Console.WriteLine("January");
} else if (month == 2) {
    Console.WriteLine("February");
}
...  // and so on

Biểu thức so sánh trong mệnh đề case

Biểu thức đối chiếu so sánh cung cấp giá trị kiểm tra phù hợp với từng case. Trong C# 6, biểu thức đối sánh có thể dùng các loại giá trị sau:

  • 1 ký tự (char)
  • 1 xâu ký tự (string)
  • 1 giá trị bool
  • 1 giá trị số nguyên (long)
  • 1 giá trị enum

Sử dụng string trong câu lệnh switch

Từ phiên bản C# 6 về sau, bạn có thể sử dụng đối tượng xâu ký tự (string) trong câu lệnh switch. Khi đó bạn có thể tạo ra các giá trị của nhãn với nội dung đầy đủ và rõ nghĩa hơn. Ví dụ sau sẽ minh hoạ điều này:

Toán tử ?:

Trong C#, bạn đã làm quen với các toán tử cơ bản như toán học, logic,.. Bây giờ bạn sẽ làm quen thêm một toán tử nữa là ? :. Toán tử này dùng để thay cho việc phải viết cả cầu trúc lệnh if…else dài dòng lệnh. Cụ thể, cú pháp của toán tử này như sau:

Exp1 ? Exp2 : Exp3;

Trong đó Exp1, Exp2, và Exp3 là các biểu thức.

Để xác định được giá trị của cả biểu thức thì ban đầu biểu thứ Exp1 khởi tạo và được dùng làm cơ chế đánh giá:

  • Nếu giá trị của điều kiện exp1 là đúng, thì giá trị của Exp2 sẽ là giá trị của cả biểu thức
  • Nếu giá trị của điều kiện exp1 là sai, thì Exp3 sẽ được đánh giá và giá trị của nó sẽ trở thành giá trị của toàn bộ biểu thức

Ví dụ về toán tử ? ::

int input = Convert.ToInt32(Console.ReadLine());  
string classify;  
// if-else construction.  
if (input > 0)  
    classify = "positive";  
else  
    classify = "negative";  
// ?: conditional operator.

classify = (input > 0) ? "positive" : "negative";

Complete and Continue