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

תוכן שנמחק תוכן שנוסף
אין תקציר עריכה
מאין תקציר עריכה
שורה 1:
'''פקודת goto''' ({{כ}}"go to", ב[[עברית]]: "לך אל...") היא [[פקודה (מחשב)|פקודה]] בסיסית ב[[שפת תכנות|שפות תכנות]]. הפקודה שייכת לקבוצת הפקודות העוסקות ב[[בקרת זרימה]] של [[תוכנית מחשב|תוכנית המחשב]]. פקודות בקרת זרימה מאפשרות להורות למחשב לשנות את סדר קריאת שורות הפקודה: ברירת המחדל של המחשב היא לבצע את הפקודות באופן סדרתי לפי סדר הופעתן, ופקודות בקרת זרימה מאפשרות ל[[מתכנת]] להתנות ביצוע של חלק מהתוכנית, לבצע [[לולאה (תכנות)|לולאות]], לדלג וכו'. משמעות הפקודה goto למחשב: עבור לפקודה הנמצאת במקום אחר בתוכנית.
 
זיהוי המקום שאליו תתבצע הקפיצה נעשה בדרך כלל באמצעות מתן תגית (label) למקום זה. בשפת [[BASIC]] ניתן מספר (בסדר עולה) לכל שורת פקודה, והקפיצה נעשית באמצעות ציון מספר השורה בפקודת ה־goto. בשפת [[פסקל (שפת תכנות)|פסקל]] יש להגדיר את התווית באמצעות פקודת <code>label</code> לפני שניתן להשתמש בה.
 
==ירידת קרנה של פקודת goto==
 
בשנת [[1968]] פרסם [[אדסחר דייקסטרה]] מאמר מפורסם בשם "[http://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf פקודת GOTO נחשבת מזיקה]", ובו שלל את השימוש בפקודת goto. לטענת דייקסטרה ורבים אחרים, ניתן לכתוב כל תוכנית מחשב ללא שימוש בפקודת goto. גישתו של דייקסטרה הפכה למקובלת ביותר בעולם התכנות, אך אל מול שלילה מוחלטת של הפקודה הציב [[דונלד קנות']] גישה המתירה שימוש בפקודה במקרים מסוימים, במאמרו [http://pplab.snu.ac.kr/courses/adv_pl05/papers/p261-knuth.pdf תכנות מובנה הכולל שימוש ב GOTO].
 
שורה 11 ⟵ 10:
ברוב השפות שתומכות ב[[תכנות פרוצדורלי]] ומאפשרות שימוש בפקודת goto לא ניתן לקפוץ מחוץ לשגרה הנוכחית. בשפת C ישנו צמד פונקציות (<code>setjmp</code> ו־<code>longjmp</code>) שנועד לביצוע goto שאינו מקומי על ידי שמירת מצב ה[[מחסנית (מבנה נתונים)|מחסנית]] לפני הקפיצה ושחזורה לאחריה.
 
בשפות חדשות יותר כמו [[Java]] לא ניתן להשתמש בפקודה זו - ב־Java, למשל, ישנה מילת מפתח בשם goto שכל מטרתה היא "נעילת" מילת המפתח, כדי למנוע חזרה לשימוש בה.
 
==דוגמאות שימוש==
שורה 29 ⟵ 28:
 
==ראו גם==
* [[בקרת זרימה]]
* [[קוד ספגטי]]