Java תומך בשלושה אופרטורים קפיצה - שימוש במפעיל
האופרטור השתמש
בנוסף לשימוש בהצהרות מתג ולולאות, שימוש במפעיל
לפעמים כדאי להתחיל את האיטרציה הבאה של לולאה מוקדם. כלומר, עליך להמשיך לבצע את הלולאה, אך להפסיק לעבד את שאר הקוד בגוף שלו עבור איטרציה מסוימת זו. למעשה, זהו מַפעִיל
הצהרת הבקרה האחרונה היא
break
, continue
ו return
. הם מעבירים את השליטה לחלק אחר של התוכנית שלך. בואו נשקול כל אחד מהמפעילים בפירוט.
שימוש במפעילbreak
האופרטור break
ב-Java משמש בשלושה מקרים. ראשית, כפי שכבר ראית, זה מסיים את רצף ההצהרות בסניפי הצהרה switch
. שנית, ניתן להשתמש בו כדי לצאת מלולאה. שלישית, זה יכול לשמש כצורה "מתורבתת" של אופרטור הקפיצה ללא תנאי goto
. סעיף זה מסביר את שני המקרים האחרונים. השתמש break
כדי לצאת מלולאה על ידי שימוש ב- break
, אתה יכול לאלץ את הלולאה להסתיים מיד, תוך עקיפת הביטוי המותנה וכל קוד שנותר בגוף הלולאה. כאשר נתקלים במשפט break
בתוך לולאה, השני מסתיים והשליטה בתוכנית מועברת להצהרה שאחריה. דוגמה פשוטה:
// Использование break для выхода из цикла.
public class BreakLoop {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
if (i == 4) {
break; // завершить цикл, если i = 4
}
System.out.println("i: " + i);
}
System.out.println("Цикл завершен.");
}
}
תוכנית זו מייצרת את הפלט הבא:
i: 0
i: 1
i: 2
i: 3
Цикл завершен.
למרות שהלולאה for
מתוכננת כאן לבצע את ההצהרות שלה מ-0 עד 99 פעמים, האופרטור break
גורם לה להסתיים מוקדם כאשר i הוא 4. break
ניתן להשתמש באופרטור עם כל אחת מהלולאות של Java, כולל לולאות אינסופיות בכוונה. לדוגמה, להלן התוכנית הקודמת מקודדת באמצעות לולאה while
. הפלט של תוכנית זו זהה לקודמתה.
// Использование break для выхода из while-цикла.
public class BreakLoop2 {
public static void main(String[] args) {
int i = 0;
while (i < 100) {
if (i == 4) {
break; // закончить цикл, если i = 4
}
System.out.println("i: " + i);
i++;
}
System.out.println("Цикл завершен.");
}
}
בשימוש בתוך קבוצה של לולאות מקוננות, ההצהרה break
תצא רק מהלולאה הפנימית ביותר. לדוגמה:
// Использование break во вложенных циклах.
public class BreakLoop3 {
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
System.out.print("Итерация " + i + ": ");
for (int j = 0; j < 10; j++) {
if (j == 4) {
break; // закончить цикл, если j = 4
}
System.out.print(j + " ");
}
System.out.println();
}
System.out.println("Цикл завершен.");
}
}
תוכנית זו מייצרת את הפלט הבא:
Итерация 0: 0 1 2 3
Итерация 1: 0 1 2 3
Итерация 2: 0 1 2 3
Цикл завершен.
כפי שאתה יכול לראות, ההצהרה break
בלולאה הפנימית גורמת רק ללולאה זו להסתיים. הלולאה החיצונית אינה מושפעת. הרשו לנו להעיר שתי הערות נוספות לגבי break
. ראשית, הצהרות מרובות עשויות להופיע בלולאה break
. עם זאת, היזהר. יותר מדי מהם נוטים לפרק את הקוד שלך. שנית, ה- break
, שמסיים את האופרטור- switch
, משפיע רק על switch
האופרטור הנתון (ולא על הלולאות שכוללות אותו). תגובה: Break
לא תוכנן כאמצעי רגיל לסיום לולאה. מטרה זו מוגשת על ידי הביטוי המותנה של כותרת הלולאה. break
יש להשתמש במפעיל רק כדי לשבור את הלולאה כאשר מתעוררים מצבים מיוחדים מסוימים.
השתמש break
כטופסgoto
בנוסף לשימוש בהצהרות מתג ולולאות, break
ניתן להשתמש בו גם לבד כצורה "מתורבתת" של ה- goto
. Java לא מכילה את האופרטור goto
מכיוון שהיא מבצעת את הסניף בצורה שרירותית ולא מובנית. goto
בדרך כלל קשה להבין ולתחזק קוד שמשתמש ב- . זה גם עוקף כמה אופטימיזציות מהדר. עם זאת, ישנם מספר מקומות בתוכנית שבהם goto
זרימת הבקרה היא מבנה בעל ערך ולגיטימי. לדוגמה, goto
זה יכול להיות שימושי כאשר אתה פורץ מתוך קבוצה מקוננת עמוקה של לולאות. כדי לטפל במצבים כאלה, Java מגדירה צורה מורחבת של האופרטור break
. באמצעותו, תוכל לצאת מגוש קוד אחד או יותר. בלוקים אלה אינם צריכים להיות חלק מלולאה או הצהרה switch
. זה יכול להיות כל בלוק. לאחר מכן, תוכל לקבוע היכן בדיוק ימשיך הביצוע מכיוון שטופס זה break
עובד עם הסימן ומספק את היתרונות של goto
, עוקף את הבעיות שלו. להצהרה break
מסומנת יש את הצורה הכללית הבאה: break label;
הנה label
השם של תווית המזהה גוש קוד כלשהו. כאשר טופס זה break
מבוצע, השליטה מועברת מבלוק הקוד הנקרא (שהתווית שלו מצוינת במשפט break
) להצהרה שאחרי אותו בלוק. גוש קוד מסומן חייב לכלול משפט זה break
, אך אין צורך שההכללה הזו תהיה ישירה (כלומר, break
ניתן לכלול אותה לא ישירות בבלוק עם תווית משלו, אלא בבלוק המקנן בתוכו, אולי גם מסומן) . זה אומר שאתה יכול להשתמש באופרטור מסומן break
כדי לברוח מקבוצה של בלוקים מקוננים. אבל אתה לא יכול להשתמש break
בגוש קוד שאינו כולל break
. כדי לתת שם לבלוק, הצב תווית בתחילת הבלוק (לפני הסד המתולתל הפותח). תווית היא כל מזהה Java חוקי ואחריו נקודתיים. לאחר תיוג בלוק, התווית שלו יכולה לשמש כארגומנט לאופרטור break
. זה יגרום לביצוע המשך מסוף הבלוק המסומן. לדוגמה, התוכנית הבאה מכילה שלושה בלוקים מקוננים, כל אחד עם תווית משלו. המפעיל break
נע קדימה, מעבר לקצה הבלוק המסומן בתווית second
, ומדלג על שני מפעילים println()
.
// Использование break How цивorзованной формы goto.
public class Break {
public static void main(String[] args) {
boolean t = true;
first:
{
second:
{
third:
{
System.out.println("Перед оператором break.");
if (t) {
break second; // выход из блока second
}
System.out.println("Данный оператор никогда не выполнится");
}
System.out.println("Данный оператор никогда не выполнится ");
}
System.out.println("Данный оператор размещен после блока second.");
}
}
}
הפעלת תוכנית זו מייצרת את הפלט הבא:
Перед оператором break.
Данный оператор размещен после блока second.
אחד השימושים הנפוצים ביותר של האופרטור המסומן break
הוא לברוח מלולאות מקוננות. לדוגמה, בתוכנית הבאה הלולאה החיצונית מבוצעת פעם אחת בלבד:
// Использование break для выхода из вложенных циклов.
public class BreakLoop4 {
public static void main(String[] args) {
outer:
for (int i = 0; i < 3; i++) {
System.out.print("Итерация " + i + ": ");
for (int j = 0; j < 100; j++) {
if (j == 10) {
break outer; // выйти из обоих циклов
}
System.out.print(j + " ");
}
System.out.println("Эта строка никогда не будет выведена");
}
System.out.println("Цикл завершен.");
}
}
התוכנית מייצרת את הפלט הבא:
Итерация 0: 0 1 2 3 4 5 6 7 8 9 Цикл завершен.
קל לראות שכאשר הלולאה הפנימית נקטעת לפני הקצה של החיצונית, שתי הלולאות מסתיימות. זכור שאינך יכול לבצע break
-קפיצה לכל תווית שאינה מוגדרת עבור הבלוק המקיף. לדוגמה, התוכנית הבאה אינה חוקית ולא תעשה קומפילציה:
// Эта программа содержит ошибку.
public class BreakErr {
public static void main(String[] args) {
one:
for (int i = 0; i < 3; i++) {
System.out.print("Итерация " + i + ": ");
}
for (int j = 0; j < 100; j++) {
if (j == 10) {
break one; //He верно!
}
System.out.print(j + " ");
}
}
}
מכיוון שלולאה המסומנת כאחת אינה כוללת משפט break
, לא ניתן להעביר שליטה לבלוק זה.
שימוש במפעילcontinue
לפעמים כדאי להתחיל את האיטרציה הבאה של לולאה מוקדם. כלומר, עליך להמשיך לבצע את הלולאה, אך להפסיק לעבד את שאר הקוד בגוף שלו עבור איטרציה מסוימת זו. למעשה, זהו goto
מעבר מעבר לפעולות הגוף הבאות לסוף בלוק הלולאה. פעולה זו מבוצעת על ידי המפעיל continue
. בלולאות, האופרטור while
and גורם להעברת השליטה ישירות לביטוי המותנה השולט בלולאה. בלולאה, הפקד עובר תחילה לחלק האיטרטיבי של ההצהרה ולאחר מכן לביטוי המותנה. עבור כל שלוש הלולאות, כל קוד ביניים עוקף. תוכנית לדוגמה שמשתמשת להדפיס שני מספרים על כל שורה ניתנת להלן: do while
continue
for
for
continue
// Демонстрирует continue.
public class Continue {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.print(i + " ");
if (i % 2 == 0) {
continue;
}
System.out.println("");
}
}
}
הקוד הזה משתמש בפעולה %
(מודולו) כדי לבדוק אם משהו i
שווה. אם כן, הלולאה ממשיכה ללא הדפסת תו חדש. פלט תוכנית:
0 1
2 3
4 5
6 7
8 9
בדומה לאופרטור break
, continue
ניתן להגדיר תווית המציינת איזו לולאה מקיפה להמשיך. תוכנית לדוגמה שמשתמשת continue
בהדפסת לוח כפל משולש מ-0 עד 9.
// Использование continue с меткой.
public class ContinueLabel {
public static void main(String[] args) {
outer:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (j > i) {
System.out.println();
continue outer;
}
System.out.print(" " + (i * j));
}
}
System.out.println();
}
}
ההצהרה continue
בדוגמה זו מסיימת את הערכת הלולאה j
, וממשיכה עם האיטרציה הבאה של הלולאה המונעת על ידי i
. פלט מתוכנית זו:
0
0 1
0 2 4
0 3 6 9
0 4 8 12 16
0 5 10 15 20 25
0 6 12 18 24 30 36
0 7 14 21 28 35 42 49
0 8 16 24 32 40 48 56 64
0 9 18 27 36 45 54 63 72 81
זה שימושי לעתים נדירות ביותר continue
. אחת הסיבות לכך היא ש-Java מספקת קבוצה עשירה של הצהרות לולאה שמתאימות לרוב היישומים. עם זאת, עבור אותם מצבים מיוחדים שבהם יש צורך לסיים את האיטרציה מוקדם, ההצהרה continue
מספקת דרך מובנית לביצוע משימה זו.
מַפעִילreturn
הצהרת הבקרה האחרונה היא return
. הוא משמש כדי לחזור באופן מפורש משיטה, כלומר, הוא מעביר את בקרת התוכנית חזרה לתוכנית המתקשרת. המפעיל return
מסווג כמפעיל מעבר. למרות שהדיון המלא בו חייב להמתין עד לדיון בשיטות, סקירה קצרה ניתנת כאן return
. ניתן להשתמש באופרטור return
בכל מקום בשיטה כדי לחזור לתוכנית הקוראת לשיטה. ההצהרה return
מסיימת מיד את הביצוע של השיטה שבה היא נמצאת. הדוגמה הבאה ממחישה זאת:
// Демонстрирует return.
public class Return {
public static void main(String[] args) {
boolean t = true;
System.out.println("Перед оператором return.");
if (t) {
return; // возврат в вызывающую программу
}
System.out.println("Этот оператор никогда не выполнится.");
}
}
זה return
חוזר למערכת Java בזמן ריצה, מכיוון שזו המערכת שקוראת ל- main()
. פלט מתוכנית זו:
Перед оператором return.
ייתכן שתבחין שההצהרה הסופית println()
לא מבוצעת. בזמן הביצוע, return
השליטה מועברת חזרה לתוכנית הקוראים. הערה אחת אחרונה. בתוכנית הקודמת, if
יש צורך באופרטור (t). בלעדיו, מהדר ג'אווה יזרוק שגיאת "קוד בלתי ניתן להשגה" מכיוון שהוא ידע שהמשפט האחרון println()
לעולם לא יבוצע. כדי למנוע שגיאה זו, נעשה שימוש באופרטור (t) if
; הוא מרמה את המהדר למען ההדגמה הזו. קישור למקור המקורי: מפעילי מעבר
GO TO FULL VERSION