0

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

  1. 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.

  2. Sử dụng linh hoạt switch-case truyền thống và cú pháp switch expression siêu gọn gàng trong C# hiện đại.

  3. 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

  1. Dùng if - else cho các điều kiện phức tạp, có khoảng giá trị (>, <, &&, ||).

  2. Dùng toán tử 3 ngôi (điều kiện) ? true : false để gán giá trị nhanh gọn.

  3. 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:

  1. Nhập vào tuổi của khách hàng (int age).

  2. Nếu dưới 6 tuổi: Miễn phí vé (0 VNĐ).

  3. Từ 6 đến 18 tuổi: Vé học sinh/sinh viên (50.000 VNĐ).

  4. Từ 19 đến 60 tuổi: Vé người lớn (100.000 VNĐ).

  5. Trên 60 tuổi: Vé người cao tuổi (40.000 VNĐ).

  6. In ra mức giá vé tương ứng.


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.