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
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí