תכנות מובנה

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

המעבר מפקודת goto לתכנות המובנה

פקודת goto הייתה פקודת בקרת זרימה יסודית בשפות תכנות פופולריות של שנות ה-60 של המאה ה-20, כגון COBOL ו-BASIC, והייתה בשימוש נרחב גם בשפות תכנות שבהן הייתה פחות חיונית, כגון Fortran ו-PL/I. הפקודה מאפשרת ביצוע קפיצה ברצף הביצוע של התוכנית, לפי שיקולי המתכנת. בדרך זו ניתן לחסוך שכפול קוד, ולהגיע לביצועים אופטימליים. עם זאת, שימוש מופרז בפקודה goto יוצר תוכנית חסרת מבנה ברור, המכונה "קוד ספגטי" (בשל הקושי לעקוב אחר מסלול הבקרה). תוכנית כזו מקשה על כתיבת קוד נטול באגים, וקשה מאוד לתחזק או להרחיב אותה. בנוסף, קוד אשר משתמש ב־goto  עלול ליצור תופעות לוואי שקשה לעקוב אחריהן, ומקשה על הבנה של קוד ירושה.
משפט התכנות המובנה משנת 1966 ומאמרו הנודע משנת 1968 של אדסחר דייקסטרה, "Go To Statement Considered Harmful", הובילו לשלילת השימוש בפקודת goto. לטענת דייקסטרה ורבים אחרים, ניתן לכתוב כל תוכנית מחשב ללא שימוש בפקודת goto. גישתו של דייקסטרה הפכה למקובלת ביותר בעולם התכנות, אך אל מול שלילה מוחלטת של הפקודה הציב דונלד קנות' גישה המתירה שימוש בפקודה במקרים מסוימים, במאמרו "Structured Programming with go to Statements".
מאמרים נוספים, של דייקסטרה, רוברט פלויד, טוני הור, אולה יוהאן דאל ודייוויד גריס, תרמו לביסוסה של פרדיגמת התכנות המובנה, וזו נקלטה בתעשיית התוכנה, תוך פרסום מדריכים למימוש הפרדיגמה בשפות תכנות נפוצות.
מאז שנות ה-70 של המאה ה-20, כחלק ממוסכמות תכנות מקצועי, נחשבת פקודת goto מוקצה מחמת מיאוס, וזאת על מנת להקל על תחזוקה והרחבה של קוד קיים:  מוסכמה זו נאכפת לרוב גם בשפות המאפשרות שימוש ב־goto.
עם זאת, במקרים מיוחדים כגון יציאה מקינון מרובה, שימוש ב־goto עשוי להיות הפתרון הנכון והנקי יותר. בשפות תכנות חדשות מסוימות, כגון Java, לא ניתן להשתמש בפקודת goto.

שגרות

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

בלוקים

בלוק הוא קבוצת פקודות שניתן להתייחס אליהן כאל פקודה אחת. בשפות תכנות התומכות בבלוקים יש תחביר המאפשר לזהות את תחילתו וסופו של בלוק, למשל הצירוף BEGIN..END ב-PL/I, הזחה בפייתון וסוגריים מסולסלים {...} ב-C ובשפות נוספות.

יציאה מוקדמת משגרה או מלולאה

אף שעקרונות התכנות המובנה מומשו בשפות תכנות רבות, חריגה בולטת מעקרונות אלה הן פקודות return או yield, המאפשרות יציאה מוקדמת מתוך שגרה (בניגוד לגישה המחייבת יציאה משגרה רק לאחר הפקודה האחרונה שבה), פקודת break, המאפשרת באופן דומה יציאה מוקדמת מתוך לולאה, ופקודת continue, המציינת להפסיק איטרציה מסוימת בלולאה תוך מעבר לאיטרציה הבאה (אלה בניגוד לגישה המחייבת יציאה מלולאה רק לאחר הפקודה האחרונה שבה). ריבוי נקודות יציאה עלול ליצור באגים, עקב הימנעות אפשרית מביצוע פעולות שחובה לבצען לפני היציאה. יש התומכים בקיום פקודות אלה, המאפשרות קוד פשוט יותר. לעומתם טען ברטראן מייר (Bertrand Meyer) שפקודות אלה הן למעשה פקודת goto בשינוי אדרת, והמליץ בתוקף שלא להשתמש בהן.