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

תוכן שנמחק תוכן שנוסף
Matanyabot (שיחה | תרומות)
מ בוט החלפות: לעיתים
מ הוספת קישור למוקצה מחמת מיאוס
שורה 7:
בשנת [[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].
 
שימוש מופרז בפקודה goto עלול להביא לקוד לא מובנה ולא קריא, המכונה לעיתים [[קוד ספגטי]]. כיום, כחלק ממוסכמות תכנות מקצועי, נחשבת פקודת ה־goto [[מוקצה מחמת מיאוס]], וזאת על מנת להקל על תחזוקה והרחבה של קוד קיים: קוד אשר משתמש ב־goto, ולו לעיתים נדירות, עלול ליצור תופעות לוואי שקשה לעקוב אחריהן, ומקשה על הבנה של [[ירושה (תכנות)|קוד ירושה]]. מוסכמה זו נאכפת לרוב גם בשפות המאפשרות שימוש ב־goto. עם זאת, במקרים כגון יציאה מקינון מרובה, שימוש ב־goto עשוי להיות הפתרון הנכון (במקרים כאלו ניתן להשתמש בשפות תכנות חדשות במנגנון ה[[טיפול בשגיאות]] על מנת להשיג תוצאה דומה).
 
ברוב השפות שתומכות ב[[תכנות פרוצדורלי]] ומאפשרות שימוש בפקודת goto לא ניתן לקפוץ מחוץ לשגרה הנוכחית. בשפת C ישנו צמד פונקציות (<code>setjmp</code> ו־<code>longjmp</code>) שנועד לביצוע goto שאינו מקומי על ידי שמירת מצב ה[[מחסנית (מבנה נתונים)|מחסנית]] לפני הקפיצה ושחזורה לאחריה.