Menu
Coddy logo textTech

השוואה בין If ל-Switch

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C# של Coddy. שיעור 10 מתוך 66.

ב-C# יש שתי דרכים עיקריות לטיפול במספר תנאים: פקודות if-else ופקודות switch. לכל אחת מהן יש יתרונות בתרחישים שונים.

הצהרות if-else גמישות ויכולות להתמודד עם כל סוג של תנאי:

string grade = "B";

if (grade == "A")
{
    Console.WriteLine("Excellent");
}
else if (grade == "B")
{
    Console.WriteLine("Good");
}
else if (grade == "C")
{
    Console.WriteLine("Satisfactory");
}
else
{
    Console.WriteLine("Needs improvement");
}

משפטי switch נקיים יותר כשמשווים משתנה יחיד למספר ערכים קבועים:

string grade = "B";

switch (grade)
{
    case "A":
        Console.WriteLine("Excellent");
        break;
    case "B":
        Console.WriteLine("Good");
        break;
    case "C":
        Console.WriteLine("Satisfactory");
        break;
    default:
        Console.WriteLine("Needs improvement");
        break;
}

אפשר לקבץ כמה מקרים יחד ב־Switch (נפילה למקרה הבא), כך שתהיה להם אותה תוצאה. הציבו את תוויות המקרים אחת אחרי השנייה בלי קוד ביניהן, ורק break אחד בסוף:

string grade = "B";

switch (grade)
{
    case "A":
    case "a":
        Console.WriteLine("Excellent - 4 points");
        break;
    case "B":
    case "b":
        Console.WriteLine("Good - 3 points");
        break;
    case "C":
    case "c":
        Console.WriteLine("Satisfactory - 2 points");
        break;
    default:
        Console.WriteLine("Needs improvement");
        break;
}

כאן, גם "B" וגם "b" ממשיכים לאותו בלוק ומדפיסים "Good - 3 points". הדפוס הזה שימושי בכל פעם שרוצים שקלט באותיות גדולות ובאותיות קטנות, או כל קבוצת ערכים, יניבו את אותה תוצאה.

הוראת switch יכולה גם לקבץ מקרים עם תוויות שונות שחולקים אותה תוצאה:

char dayCode = 'M';

switch (dayCode)
{
    case 'M':
        Console.WriteLine("Monday");
        break;
    case 'T':
        Console.WriteLine("Tuesday or Thursday");
        break;
    case 'W':
        Console.WriteLine("Wednesday");
        break;
    case 'F':
        Console.WriteLine("Friday");
        break;
    default:
        Console.WriteLine("Unknown day");
        break;
}
challenge icon

אתגר

בינוני

צרו מתודה בשם convertGradeToPoints ש:

  1. מקבלת ציון באות כפרמטר מסוג מחרוזת
  2. ממירה אותו לציון מספרי באמצעות הן גישת switch והן גישת if-else
  3. המתודה צריכה לממש את שתי הגישות ולהחזיר את התוצאה של מימוש ה-switch
  4. השתמשו בהמרות הציונים האלה:
    • "A" or "a" = 4
    • "B" or "b" = 3
    • "C" or "c" = 2
    • "D" or "d" = 1
    • "F" or "f" = 0
    • כל קלט אחר = -1

נסו בעצמכם

public class ConvertGradeToPoints
{
    // ממשו את המתודה convertGradeToPoints
    public static int convertGradeToPoints(string letterGrade)
    {
        // כתבו את הקוד שלכם כאן
        
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר C# אונליין