פקודת goto

מתוך ויקיפדיה, האנציקלופדיה החופשית

ערך זה זקוק לעריכה, על מנת שיתאים לסגנון המקובל בוויקיפדיה.
לצורך זה ייתכנו סיבות אחדות: פגמים טכניים כגון מיעוט קישורים פנימיים, סגנון הטעון שיפור או צורך בהגהה. אם אתם סבורים כי אין בדף בעיה, ניתן לציין זאת בדף השיחה שלו.

פקודת goto היא פקודה בסיסית בשפות תכנות.

פקודת goto שייכת לקבוצת הפקודות העוסקות בבקרת זרימה של תוכנית המחשב - אותן פקודות אשר אומרות למחשב מהי הפקודה הבאה שצריך לבצע. ברירת המחדל של המחשב היא לבצע את הפקודות באופן סדרתי. פקודות בקרת זרימה מאפשרות למתכנת להתנות ביצוע של חלק מהתוכנית, לבצע לולאות, לדלג וכו'. משמעות הפקודה goto למחשב: קפוץ לפקודה הנמצאת במקום אחר בתוכנית.

זיהוי המקום שאליו תתבצע הקפיצה נעשה בדרך כלל באמצעות מתן שם (label) למקום זה. בשפת BASIC ניתן מספר (בסדר עולה) לכל שורת פקודה, והקפיצה נעשית באמצעות ציון מספר השורה בפקודת ה־goto.

בשנת 1968 פרסם אדסחר דייקסטרה מאמר מפורסם בשם "Go To Statement Considered Harmful" ובו שלל את השימוש בפקודת goto. לטענת דייקסטרה ורבים אחרים, ניתן לכתוב כל תוכנית מחשב ללא שימוש בפקודת goto.

שימוש מופרז בפקודה goto עלול להביא לקוד לא מובנה ולא קריא - קוד ספגטי. למרות זאת, מקובל כיום כי במקרים מסוימים, כגון יציאה מקינון מרובה, שימוש ב־goto יכול להיות הפתרון הנכון.
בשפת התכנות Visual C++ ישנו צמד פקודות (setjmp ו-longjmp) שנועד לביצוע goto שאינו מקומי על ידי שמירת מצב המחסנית לפני הקפיצה ושחזורה לאחריה.

למעשה כל פקודות בקרת הזרימה (לולאות, תנאים, קריאה לפונקציות, וכו') ממומשות תוך שימוש ב־goto, מאחר ושפות התכנות מתורגמות לפקודות בשפת מכונה, שבקרת הזרימה בהן נעשית שימוש בפקודות goto בשילוב התניות.

בשפת C תיראה הפקודה כך:

 .
.
goto LABEL;
.
.
.
LABEL:
.
.

כמו כן, בשפות חדשות יותר כמו Java ו C# לא ניתן להשתמש בפקודה זו, ב Java למשל, ישנה מילת מפתח בשם goto שבעצם לא עושה כלום ונועדה למנועה הגדרה / שימוש בשיטת קוד זו.

[עריכה] ראו גם