פישוט תנאים מקוננים
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C# של Coddy. שיעור 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);
}
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מערכים רב־ממדיים
יסודות מערכים דו־ממדייםהכרזה ואתחול של מערכים דו־ממדייםגישה לאיברי מערך דו־ממדילולאות מקוננות עם מערכים דו־ממדייםמערכים משונניםפעולות מטריצה נפוצותחזרה – מערכים רב־ממדיים7אופרטורים לוגיים מתקדמים
הערכה בקיצור דרךאופרטורים לוגיים מותניםקדימות אופרטוריםסיכום – אופרטורים מתקדמים2קבלת החלטות מתקדמת
תנאים מרוביםלוגיקה בוליאנית מורכבתהשוואה בין If ל-Switchהצהרות Switch מקוננותסיכום — קבלת החלטות מתקדמת5טיפול בחריגות
יסודות try-catchסוגי חריגותבלוקי catch מרוביםעבודה עם קבציםבלוק finallyשימוש ב-using לעומת try-finallyחריגות מותאמות אישיתסיכום – טיפול בשגיאות3שיפורים בלולאות
ביצועי לולאותאיטרציה במבנים מורכביםכל אחד מסוגי הלולאותרפקטורינג של לולאותסיכום – לולאות שעברו אופטימיזציה6טיפול בערכי Null
יסודות הפניה ל-Nullטיפוסי ערכים שניתנים ל-Nullדפוסי בדיקת Nullתכנות הגנתיסיכום – בטיחות מול Nullתרגלו בעצמכם: קומפיילר C# אונליין