Flatten Nested Conditionals
Coddy C# 여정의 논리 및 흐름 섹션에 포함된 레슨 — 66개 중 22번째.
중첩된 조건문은 코드를 읽기 어렵고 유지보수하기 어렵게 만들 수 있습니다. 평탄화는 들여쓰기 수준을 줄여 가독성을 향상시킵니다.
다음은 깊게 중첩된 조건문의 예입니다:
if (userLoggedIn)
{
if (userHasPermission)
{
if (fileExists)
{
// Process the file
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;
}
// Process the file
ProcessFile();
평탄화된 코드가 들여쓰기가 적고 따라가기 쉬운 점을 주목하세요.
챌린지
쉬움장학금 자격 확인에서 깊게 중첩된 조건문은 코드를 읽기 어렵고 유지보수하기 어렵게 만듭니다. 이 챌린지에서는 가드 절을 사용하여 지저분한 중첩 조건문 구조를 깔끔하고 읽기 쉬운 코드로 변환합니다.
가드 절은 특정 조건을 즉시 처리하는 조기 반환 문으로, 함수의 나머지 부분이 "happy path"에 집중할 수 있게 합니다.
이 규칙에 따라 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"를 반환하세요
치트 시트
중첩된 조건문은 코드를 읽기 어렵고 유지보수하기 어렵게 만듭니다. 평탄화는 들여쓰기 수준을 줄여 가독성을 향상시킵니다.
깊게 중첩된 조건문 대신:
if (userLoggedIn)
{
if (userHasPermission)
{
if (fileExists)
{
// Process the file
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;
}
// Process the file
ProcessFile();
가드 절은 특정 조건을 즉시 처리하는 조기 반환 문장으로, 함수의 나머지 부분이 "happy path"에 집중할 수 있게 합니다.
직접 해보기
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);
}
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리 및 흐름의 모든 레슨
1Multi-dimensional Arrays
2D Arrays BasicsDeclaring and Initializing 2DAccessing 2D Array ElementsNested Loops with 2D ArraysJagged ArraysCommon Matrix OperationsRecap - Multi-dimensional4Flow Control Techniques
Early ReturnsGuard ClausesJump Statements (goto)Break and ContinueFlatten Nested Conditionals7Logical Operators Advanced
Short-Circuit EvaluationConditional Logical OperatorsOperator PrecedenceRecap - Advanced Operators2Advanced Decision Making
Multiple ConditionsComplex Boolean LogicIf vs. Switch ComparisonNested Switch StatementsRecap - Advanced Decisions5Exception Handling
Try-Catch BasicsException TypesMultiple Catch BlocksWorking with FilesFinally BlockUsing vs. Try-FinallyCustom ExceptionsRecap - Error Handling3Loop Enhancements
Loop PerformanceIterating ComplexEach Loop TypeRefactoring LoopsRecap - Optimized Loops6Null Handling
Null Reference BasicsNullable Value TypesNull Checking PatternsDefensive ProgrammingRecap - Null Safety