קוד ספגטי

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

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

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

מאפיין טיפוסי של קוד הספגטי הוא שימוש נרחב בפקודת goto (לפני שתכנות מובנה הפך לנורמה מקובלת), המורה למעבד המחשב "לקפוץ" לפקודה הנמצאת בשורה מסוימת, שלא לפי סדר השורות בקוד. ה"קפיצה" הזו עשויה ליצור לולאות תכנותיות - לרוב מותנות, על ידי פקודת if - או שגרות (רוטינות) מלאכותיות, באופן שייקשה לזהותן. אם ממשיכים לעשות שימוש בשיטה הזו לאורך זמן, במהלך תחזוקת אותו קוד, הולכים ונוצרים בו טלאים רבים של פקודות goto, ה"מקפיצים" את המעבד הלוך ושוב ברחבי הקוד, אשר נעשה מסובך ומפותל. בשנת 1968, פרסם אדסחר דייקסטרה את מאמרו המפורסם "Go To Statement Considered Harmful", בו שלל את השימוש בפקודה זו, ובעקבותיו המושג תכנות מובנה הלך ותפס מאז תאוצה. כיום, השימוש בפקודת goto נחשב לבעייתי בהנדסת התוכנה, ומשתמשים בה רק במקרים חריגים (כגון יציאה מלולאה מקוננת).

הקשר שבו מקובל ואף יעיל להשתמש בקוד ספגטי, הוא במקרה שבו הבלגן הוא חלק מהמטרה: קוד המכונה של וירוסים נפוצים רווי בדרך כלל בפקודות קפיצה אקראיות למראה, או אפילו אקראיות ממש. טכניקה זו מקשה על איתור הווירוס ועל הניתוח של דרך פעולתו. בנוסף, ישנן תחרויות כתיבת קוד בלתי קריא (למשל Obfuscated C Code); גם כאן, פקודות GOTO מעלות את מידת האי-קריאות של הקוד.

דוגמה לקוד ספגטי[עריכת קוד מקור | עריכה]

דוגמה למקטע קוד ספגטי "קלאסי" בשפת פורטרן[1]:

10 IF (X.GT. 0.000001) GO TO 20
X = -X
11 Y = X*X - SIN(Y)/(X+1)
IF (X .LT. 0.000001) GO TO 50
20 IF (X*Y .LT. 0.000001) GO TO 30
X = X-Y-Y
30 X = X+Y
...
50 CONTINUE
X = A
Y = B-A + C*C
GO TO 11
...

כאשר עוברים על הקוד מלמעלה למטה, ניתן לקבל את הרושם שהשורות בין 10 ל-20 מבצעות יחד פעולה בעלת משמעות. אולם בהמשך ניתן לראות כי ישנה פקודות קפיצה אל פקודה 11, הנמצאת באמצע הקבוצה הזאת.

ראו גם[עריכת קוד מקור | עריכה]

קישורים חיצוניים[עריכת קוד מקור | עריכה]

הערות שוליים[עריכת קוד מקור | עריכה]

  1. ^ מתוך הספר Concepts In Programming Lanuages מאת John C. Mitchell
Crystal kpackage.png ערך זה הוא קצרמר בנושא תוכנה. אתם מוזמנים לתרום לוויקיפדיה ולהרחיב אותו.