פקודת goto – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
זה לגמרי לא נכון
הגהה קלה
שורה 1:
'''פקודת goto''' היא [[פקודה (מחשב)|פקודה]] בסיסית ב[[שפת תכנות|שפות תכנות]]. הפקודה שייכת לקבוצת הפקודות העוסקות ב[[בקרת זרימה]] של [[תוכנית מחשב|תוכנית המחשב]]. פקודות בקרת זרימה מאפשרות להורות למחשב לשנות את סדר קריאת שורות הפקודה: ברירת המחדל של המחשב היא לבצע את הפקודות באופן סדרתי לפי סדר הופעתן, ופקודות בקרת זרימה מאפשרות ל[[מתכנת]] להתנות ביצוע של חלק מהתוכנית, לבצע [[לולאה|לולאות]], לדלג וכו'. משמעות הפקודה goto למחשב: עבור לפקודה הנמצאת במקום אחר בתוכנית.
 
זיהוי המקום שאליו תתבצע הקפיצה נעשה בדרך כלל באמצעות מתן תגית (label) למקום זה. בשפת [[BASIC]] ניתן מספר (בסדר עולה) לכל שורת פקודה, והקפיצה נעשית באמצעות ציון מספר השורה בפקודת ה־goto. בשפת [[פסקל (שפת תכנות)|פסקל]] יש להגדיר את התווית באמצעות פקודת '''<code>label'''</code> לפני שניתן להשתמש בה.
 
==ירידת קרנה של פקודת goto==
שורה 9:
שימוש מופרז בפקודה goto עלול להביא לקוד לא מובנה ולא קריא, המכונה לעתים [[קוד ספגטי]]. כיום, כחלק ממוסכמות תכנות מקצועי, נחשבת פקודת ה־goto מוקצה מחמת מיאוס, וזאת על מנת להקל על תחזוקה והרחבה של קוד קיים: קוד אשר משתמש ב־goto, ולו לעתים נדירות, עלול ליצור תופעות לוואי שקשה לעקוב אחריהן, ומקשה על הבנה של קוד ירושה. מוסכמה זו נאכפת לרוב גם בשפות המאפשרות שימוש ב־goto. עם זאת, במקרים כגון יציאה מקינון מרובה, שימוש ב־goto עשוי להיות הפתרון הנכון (במקרים כאלו ניתן להשתמש בשפות תכנות חדשות במנגנון ה[[טיפול בשגיאות]] על מנת להשיג תוצאה דומה).
 
ברוב השפות שתומכות ב[[תכנות פרוצדורלי]] ומאפשרות שימוש בפקודת goto לא ניתן לקפוץ מחוץ לשגרה הנוכחית. בשפת [[C]] ישנו צמד פנקציות (<code>setjmp</code> ו-ו־<code>longjmp</code>) שנועד לביצוע goto שאינו מקומי על־ידי שמירת מצב ה[[מחסנית (מבנה נתונים)|מחסנית]] לפני הקפיצה ושחזורה לאחריה.
 
בשפות חדשות יותר כמו [[Java]] ו־[[C sharp|#C]] לא ניתן להשתמש בפקודה זו, ב-Java, למשל, ישנה מילת מפתח בשם goto שכל מטרתה היא "נעילת" מילת המפתח, כדי למנוע חזרה לשימוש בה.
שורה 15:
==דוגמאות שימוש==
 
בשפת [[C (שפת תכנות)|C]] תיראה, הפקודהשימוש בפקודה יראה כך:
<source lang="c">
.