扁平化嵌套条件语句
本课属于 Coddy C# 学习旅程的“逻辑与流程”单元。第 22 课,共 66 课。
嵌套的条件语句会让代码难以阅读和维护。扁平化可以减少缩进层级,提高代码的可读性。
下面是一个多层嵌套条件语句的示例:
if (userLoggedIn)
{
if (userHasPermission)
{
if (fileExists)
{
// 处理文件
ProcessFile();
}
else
{
Console.WriteLine("File not found");
}
}
else
{
Console.WriteLine("No permission");
}
}
else
{
Console.WriteLine("Not logged in");
}
我们可以使用提前返回或守卫子句来简化这段代码:
if (!userLoggedIn)
{
Console.WriteLine("Not logged in");
return;
}
if (!userHasPermission)
{
Console.WriteLine("No permission");
return;
}
if (!fileExists)
{
Console.WriteLine("File not found");
return;
}
// 处理文件
ProcessFile();
注意,扁平化后的代码缩进更少,也更容易理解。
挑战
简单检查奖学金资格时,层层嵌套的条件语句会让代码难以阅读和维护。在这个挑战中,你要使用保护子句,将杂乱的嵌套条件结构改写成简洁易读的代码。
保护子句是一条提前返回的语句,可以立即处理特定条件,让函数的其余部分专注于“顺利路径”。
请根据以下规则,完成 CheckScholarshipEligibility 方法中尚未实现的保护子句:
- 如果年龄小于 17,立即返回 "Not eligible due to age requirement"
- 如果 GPA ≥ 3.5 且学生有推荐信,则授予全额奖学金
- 如果 GPA ≥ 3.8,则授予全额奖学金(即使没有推荐信也可以)
- 如果 GPA ≥ 3.0 且学生有推荐信,则授予部分奖学金
- 如果 GPA 在 3.5 到 3.8 之间,则授予部分奖学金
- 其他所有情况都返回 "Not eligible for scholarship"
亲手试试
using System;
class Program
{
public static void CheckScholarshipEligibility(int age, double gpa, bool hasRecommendation)
{
// 年龄要求的卫语句
if (age < 17)
{
Console.WriteLine("Not eligible due to age requirement.");
return;
}
// 有推荐信时全额奖学金的卫语句
if (/* 补全这个条件 */)
{
Console.WriteLine("Full scholarship granted!");
return;
}
// GPA 特别高时全额奖学金的卫语句
if (/* 补全这个条件 */)
{
Console.WriteLine("Full scholarship granted!");
return;
}
// 有推荐信时部分奖学金的卫语句
if (/* 补全这个条件 */)
{
Console.WriteLine("Partial scholarship granted.");
return;
}
// GPA 良好时部分奖学金的卫语句
if (/* 补全这个条件 */)
{
Console.WriteLine("Partial scholarship granted.");
return;
}
// 默认情况:不符合资格
Console.WriteLine("Not eligible for scholarship.");
}
static void Main(string[] args)
{
// 用于即时反馈的测试用例
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);
}
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: C# 在线编译器