Menu
CoddyTech

Làm phẳng các câu lệnh điều kiện lồng nhau

Thuộc phần Logic và luồng chương trình trong hành trình C# của Coddy. Bài học 22 trên 66.

Các câu lệnh điều kiện lồng nhau có thể khiến code của bạn khó đọc và bảo trì. Làm phẳng chúng giúp code dễ đọc hơn nhờ giảm mức thụt lề.

Đây là ví dụ về các câu lệnh điều kiện lồng nhau nhiều cấp:

if (userLoggedIn)
{
    if (userHasPermission)
    {
        if (fileExists)
        {
            // Xử lý tệp
            ProcessFile();
        }
        else
        {
            Console.WriteLine("File not found");
        }
    }
    else
    {
        Console.WriteLine("No permission");
    }
}
else
{
    Console.WriteLine("Not logged in");
}

Ta có thể làm phẳng đoạn này bằng cách trả về sớm hoặc dùng các câu lệnh bảo vệ:

if (!userLoggedIn)
{
    Console.WriteLine("Not logged in");
    return;
}

if (!userHasPermission)
{
    Console.WriteLine("No permission");
    return;
}

if (!fileExists)
{
    Console.WriteLine("File not found");
    return;
}

// Xử lý tệp
ProcessFile();

Hãy chú ý rằng code đã làm phẳng có ít thụt lề hơn và dễ theo dõi hơn.

challenge icon

Thử thách

Dễ

Khi kiểm tra điều kiện nhận học bổng, các câu lệnh điều kiện lồng nhau sâu khiến code khó đọc và bảo trì. Trong thử thách này, bạn sẽ chuyển cấu trúc câu lệnh điều kiện lồng nhau rối rắm thành code gọn gàng, dễ đọc bằng cách sử dụng mệnh đề bảo vệ.

Mệnh đề bảo vệ là câu lệnh return sớm để xử lý ngay một điều kiện cụ thể, nhờ đó phần còn lại của hàm tập trung vào “trường hợp thuận lợi”.

Nhiệm vụ của bạn là hoàn thiện các mệnh đề bảo vệ được triển khai một phần trong phương thức CheckScholarshipEligibility theo các quy tắc sau:

  1. Nếu tuổi nhỏ hơn 17, trả về "Not eligible due to age requirement" ngay lập tức
  2. Nếu GPA ≥ 3.5 VÀ học sinh có thư giới thiệu, cấp học bổng toàn phần
  3. Nếu GPA ≥ 3.8, cấp học bổng toàn phần, kể cả khi không có thư giới thiệu
  4. Nếu GPA ≥ 3.0 VÀ học sinh có thư giới thiệu, cấp học bổng một phần
  5. Nếu GPA nằm trong khoảng từ 3.5 đến 3.8, cấp học bổng một phần
  6. Với mọi trường hợp khác, trả về "Not eligible for scholarship"

Tự làm thử

using System;

class Program
{
    public static void CheckScholarshipEligibility(int age, double gpa, bool hasRecommendation)
    {
        // Điều kiện kiểm tra sớm về độ tuổi
        if (age < 17)
        {
            Console.WriteLine("Not eligible due to age requirement.");
            return;
        }
        
        // Điều kiện kiểm tra sớm cho học bổng toàn phần khi có thư giới thiệu
        if (/* Hoàn thành điều kiện này */)
        {
            Console.WriteLine("Full scholarship granted!");
            return;
        }
        
        // Điều kiện kiểm tra sớm cho học bổng toàn phần khi GPA xuất sắc
        if (/* Hoàn thành điều kiện này */)
        {
            Console.WriteLine("Full scholarship granted!");
            return;
        }
        
        // Điều kiện kiểm tra sớm cho học bổng bán phần khi có thư giới thiệu
        if (/* Hoàn thành điều kiện này */)
        {
            Console.WriteLine("Partial scholarship granted.");
            return;
        }
        
        // Điều kiện kiểm tra sớm cho học bổng bán phần khi GPA tốt
        if (/* Hoàn thành điều kiện này */)
        {
            Console.WriteLine("Partial scholarship granted.");
            return;
        }
        
        // Trường hợp mặc định: không đủ điều kiện
        Console.WriteLine("Not eligible for scholarship.");
    }
    
    static void Main(string[] args)
    {
        // Các test case để nhận phản hồi ngay
        Console.WriteLine("Test Case 1: Age 16, GPA 4.0, Has Recommendation: True");
        CheckScholarshipEligibility(16, 4.0, true);
        
        Console.WriteLine("\nTest Case 2: Age 18, GPA 3.9, Has Recommendation: False");
        CheckScholarshipEligibility(18, 3.9, false);
        
        Console.WriteLine("\nTest Case 3: Age 17, GPA 3.6, Has Recommendation: True");
        CheckScholarshipEligibility(17, 3.6, true);
        
        Console.WriteLine("\nTest Case 4: Age 19, GPA 3.2, Has Recommendation: True");
        CheckScholarshipEligibility(19, 3.2, true);
        
        Console.WriteLine("\nTest Case 5: Age 18, GPA 2.8, Has Recommendation: False");
        CheckScholarshipEligibility(18, 2.8, false);
    }
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch C# online