Bài 4/7
if/else và switch
5 phút đọc
Đơn trên 500.000đ thì miễn phí ship, khách VIP được giảm giá, mỗi phương thức
thanh toán xử lý một kiểu. Chương trình cần chọn làm việc này hay việc kia tuỳ
điều kiện. Đó là việc của if và switch.
Khái niệm
🔀 if/else: chạy một khối code khi điều kiện đúng, và khối khác khi điều kiện sai.
🎛️ switch: chọn một nhánh để chạy dựa trên giá trị cụ thể của một biến.
Điều kiện trong if phải là một giá trị bool, thường là kết quả của phép so
sánh như total > 500000.
Ví dụ
decimal total = 350000m;
decimal shippingFee;
if (total >= 500000)
{
shippingFee = 0;
}
else if (total >= 200000)
{
shippingFee = 15000;
}
else
{
shippingFee = 30000;
}
Console.WriteLine(shippingFee); // 15000- C# xét từng điều kiện từ trên xuống, gặp điều kiện đúng đầu tiên thì chạy khối đó rồi bỏ qua phần còn lại.
else ifthêm điều kiện tiếp theo,elselà trường hợp còn lại.- Code bên trong mỗi nhánh đặt trong cặp ngoặc
{ }.
switch
Khi so một biến với nhiều giá trị cụ thể, switch gọn hơn một chuỗi
else if:
string payment = "card";
switch (payment)
{
case "cash":
Console.WriteLine("Thu tiền khi giao");
break;
case "card":
Console.WriteLine("Trừ tiền qua thẻ");
break;
default:
Console.WriteLine("Không hỗ trợ");
break;
}- Mỗi
caselà một giá trị cần so, kết thúc bằngbreak. defaultchạy khi khôngcasenào khớp.
Thử ngay
Dán vào Program.cs, đổi giá trị total vài lần rồi chạy dotnet run:
decimal total = 500000m;
if (total > 500000)
{
Console.WriteLine("Miễn phí ship");
}
else
{
Console.WriteLine("Phí ship 30000");
}Đoán trước khi chạy: với total bằng đúng 500000, dòng nào được in?
Xem kết quả
Phí ship 30000500000 > 500000 là sai, nên chương trình chạy nhánh else. Muốn tính cả
mốc 500000 thì phải dùng >=.
Lỗi hay gặp
Dùng = thay cho ==. = là gán, không phải so sánh.
// SAI — lỗi compile: điều kiện phải là bool
int quantity = 0;
if (quantity = 0)
{
Console.WriteLine("Hết hàng");
}// ĐÚNG
int quantity = 0;
if (quantity == 0)
{
Console.WriteLine("Hết hàng");
}Quên break trong switch. C# không cho chạy tràn sang case kế tiếp.
// SAI — lỗi compile: thiếu break
string status = "new";
switch (status)
{
case "new":
Console.WriteLine("Đơn mới");
case "paid":
Console.WriteLine("Đã thanh toán");
break;
}// ĐÚNG
string status = "new";
switch (status)
{
case "new":
Console.WriteLine("Đơn mới");
break;
case "paid":
Console.WriteLine("Đã thanh toán");
break;
}Tóm tắt
if/else if/elsexét điều kiện từ trên xuống, chỉ chạy nhánh đúng đầu tiên.- Điều kiện phải là
bool. So sánh dùng==, không dùng=. switchgọn hơn khi so một biến với nhiều giá trị cụ thể.- Mỗi
casekết thúc bằngbreak,defaultbắt mọi trường hợp còn lại.
Tự kiểm tra
0/3 câuint stock = 3; if (stock > 10) {...} else if (stock > 0) {...} else {...}. Nhánh nào chạy?
Trong switch, không case nào khớp với giá trị của biến. Chuyện gì xảy ra?
Bạn cần phân loại khách theo 4 hạng cố định: "silver", "gold", "platinum", "diamond". Cách viết nào gọn nhất?