משפטי switch case בג'אווה סקריפט
כאשר אנו מעוניינים לבחון ערך של ביטוי כלשהו ולבצע פעולות בהתאם לערך, נעזר במשפטי switch case.
להלן התחביר הבסיסי שבו נשתמש:
<script>
switch(expression) {
case a:
// do something
break;
case b:
// do something
break;
case c:
// do something
break;
default:
// do something
}
</script>
ערך הביטוי expression מחושב פעם אחת בלבד ואז מתחילים להשוותו לערכים השונים שמופיעים במקטעי ה-case.
תחילה, הערך מושווה ל-a. אם הוא שווה לו, יבוצע קטע הקוד שמתחיל מיד לאחר case a ועד פקודת ה-break הראשונה שנראית.
אם הוא אינו שווה ל-a, אז הוא מושווה ל-b. אם הוא שווה ל-b, אז יבוצע קטע הקוד שמתחיל מיד לאחר case b ועד פקודת ה-break הראשונה שנראית.
אם הוא אינו שווה ל-b, אז הוא מושווה ל-c. אם הוא שווה ל-c, אז יבוצע קטע הקוד שמתחיל מיד לאחר case c ועד פקודת ה-break הראשונה שנראית.
אם הוא לא שווה ל-c, יבוצע קטע הקוד שמתחיל מיד לאחר default ועד פקודת ה-break הראשונה שנראית.
מספר נקודות חשובות:
1. ערך הביטוי expression מחושב פעם אחת בלבד, ולא בכל case מחדש.
2. מותר להשתמש בכמה שורות case שרוצים.
3. הקוד שירוץ הוא זה שמיד אחרי ה-case הראשון שנמצא מתאים (אם יהיו כמה מקטעי case מתאימים, יופעל רק הקוד של ה-case הראשון מביניהם).
4. הקוד נעצר רק כשמגיעים לפקודת break או עד שמסתיים כל הקוד ב-switch כולו.
דוגמאות לשימוש במשפטי switch-case
דוגמה לשימוש ב- Switch-Case:
<script>
var name = "Daniel";
switch(name) {
case "Uri":
document.write("1st case");
break;
case "Moshe":
document.write("2nd case");
case "Yaakov":
document.write("3rd case");
break;
case "Smadar":
document.write("4th case");
break;
default:
document.write("I don't know");
}
</script>
הערך name נבדק ומושווה תחילה למחרוזת "Uri", ואז למחרוזת "Moshe" ואז למחרוזת "Yaakov" ואז למחרוזת "Smadar". במקרה שלנו, הוא אינו שווה לאף ערך, ולכן, הקוד שיופעל יהיה של שורת ה-default ועל המסך יכתב I don't know.
נשים לב: אם נשנה את ההשמה של name למחרוזת "Moshe" ירשם על המסך 2nd case3rd case, ככל הנראה לא מה שציפינו שיקרה. הסיבה לכך, היא ש"שכחנו" לשים פקודת break בסיום הבלוק שמשוייך ל-"Moshe" ולכן הקוד ממשיך לרוץ עד שתימצא שורת break או עד סוף ה-switch כולו.
זוהי שגיאה נפוצה וכדאי לשים אליה לב.
דוגמה נוספת:
<script>
var name = "Daniel";
switch(name[0]) {
case "A":
case "B":
case "C":
case "D":
document.write("name starts with A or B or C or D");
break;
case "E":
case "F":
case "G":
document.write("name starts with E or F or G");
break;
default:
document.write("name doesn't start with one of the letters A-G");
}
</script>
בדוגמה זו השמטנו במכוון את ה-break. באופן הזה, על מנת שהמחרוזת "name starts with A or B or C or D" תודפס על המסך, צריך שהערך של name[0] (כלומר התו הראשון במחרוזת name) יהיה שווה לאות "A" או "B" או "C" או "D".
באופן דומה, המחרוזת "name starts with E or F or G" תודפס על המסך אם name[0] יהיה שווה לאות "E" או "F" או "G".
בכל מקרה אחר, תודפס על המסך המחרוזת "name doesn't start with one of the letters A-G".