Bài 4: Cấu trúc rẽ nhánh (if-else, switch-case thế hệ mới)
🎯 Mục tiêu bài học
-
Hiểu cách điều khiển luồng chương trình bằng câu lệnh điều kiện
if-else. -
Sử dụng linh hoạt
switch-casetruyền thống và cú phápswitch expressionsiêu gọn gàng trong C# hiện đại. -
Biết cách ứng dụng cấu trúc rẽ nhánh vào các bài toán thực tế (ví dụ: phân quyền, xử lý mã HTTP status).
📖 Phần 1: Cấu trúc điều kiện if - else
Giống như ngoài đời, chương trình thường xuyên phải đứng trước các ngã rẽ: "Nếu điều kiện này đúng thì làm việc A, ngược lại thì làm việc B".
1. Cú pháp cơ bản
C#
int score = 8;
if (score >= 8)
{
Console.WriteLine("Hoc sinh Gioi!");
}
else if (score >= 5)
{
Console.WriteLine("Hoc sinh Kha!");
}
else
{
Console.WriteLine("Can co gang hon!");
}
2. Toán tử điều kiện 3 ngôi (Ternary Operator)
Khi bạn chỉ muốn gán giá trị cho một biến dựa trên một điều kiện ngắn gọn, thay vì viết cả khối if-else dài dòng, hãy dùng toán tử ? :.
Cú pháp: [Biến] = (Điều_kiện) ? [Giá_trị_nếu_đúng] : [Giá_trị_nếu_sai];
C#
int age = 20;
// Nếu age >= 18 thì status = "Adult", ngược lại là "Minor"
string status = (age >= 18) ? "Adult" : "Minor";
📖 Phần 2: switch - case và Switch Expression hiện đại
Khi bạn có quá nhiều nhánh kiểm tra một biến (ví dụ: các mã lỗi API, các ngày trong tuần, hay các quyền hạn người dùng), dùng if-else liên tục sẽ làm code rất rối. Lúc này switch-case là vị cứu tinh.
1. Switch-case truyền thống
C#
int roleId = 1; // 1: Admin, 2: Staff, 3: Customer
switch (roleId)
{
case 1:
Console.WriteLine("Quyen Quan tri vien (Admin)");
break; // Bắt buộc phải có break để thoát khỏi switch
case 2:
Console.WriteLine("Quyen Nhan vien (Staff)");
break;
default: // Trường hợp còn lại (giống else)
Console.WriteLine("Quyen Khach hang (Customer)");
break;
}
2. "Vũ khí tối thượng": Switch Expression (C# hiện đại)
Từ các phiên bản C# gần đây, Microsoft đã cải tiến cú pháp switch cực kỳ gọn gàng và thanh lịch, gọi là Switch Expression. Rất hợp để viết các logic ánh xạ dữ liệu.
C#
int roleId = 1;
string roleName = roleId switch
{
1 => "Admin",
2 => "Staff",
_ => "Customer" // Ký tự '_' đại diện cho default
};
Console.WriteLine($"Vai tro: {roleName}");
Ưu điểm: Không cần từ khóa case, không cần break, code ngắn gọn như toán học và trực quan hơn hẳn.
💻 Phần 3: Thực hành
Viết chương trình kiểm tra quyền truy cập dựa trên mã lỗi HTTP (HTTP Status Code) thường gặp khi làm Backend:
C#
using System;
namespace Lesson4
{
class Program
{
static void Main(string[] args)
{
Console.Write("Moi nhap ma HTTP Status (vd: 200, 400, 404, 500): ");
int statusCode = int.Parse(Console.ReadLine());
// Sử dụng Switch Expression hiện đại để giải mã HTTP Status
string description = statusCode switch
{
200 => "OK - Thanh cong",
400 => "Bad Request - Yeu cau khong hop le",
401 => "Unauthorized - Chua xac thực",
403 => "Forbidden - Khong co quyền truy cap",
404 => "Not Found - Khong tìm thay tai nguyen",
500 => "Internal Server Error - Loi may chu",
_ => "Ma loi khong xac dinh"
};
Console.WriteLine($"Ket qua: {description}");
Console.ReadLine();
}
}
}
📝 Tóm tắt bài học
-
Dùng
if - elsecho các điều kiện phức tạp, có khoảng giá trị (>,<,&&,||). -
Dùng toán tử 3 ngôi
(điều kiện) ? true : falseđể gán giá trị nhanh gọn. -
Dùng Switch Expression (
=>) để ánh xạ giá trị một cách cực kỳ gọn gàng, sạch sẽ trong C# hiện đại.
🛠 Bài tập thực hành
Yêu cầu: Viết ứng dụng tính giá vé xem phim dựa vào độ tuổi của khách hàng:
-
Nhập vào tuổi của khách hàng (
int age). -
Nếu dưới 6 tuổi: Miễn phí vé (
0 VNĐ). -
Từ 6 đến 18 tuổi: Vé học sinh/sinh viên (
50.000 VNĐ). -
Từ 19 đến 60 tuổi: Vé người lớn (
100.000 VNĐ). -
Trên 60 tuổi: Vé người cao tuổi (
40.000 VNĐ). -
In ra mức giá vé tương ứng.
All Rights Reserved