בקרת זרימה פירושו סך התנאים הלוגיים-פורמליים במסגרת שפת מחשב מסוימת לעיבוד מידע ובעיקר סדר עיבוד המידע בעת הרצת קוד מקור או קומפילציה שלו.
סדר עיבוד מידע שכזה יכול להיות למשל:
- נוקשה: תלוי בכיוון שפה ; בשפות הנכתבות משמאל לימין או מימין לשמאל יהיה לרוב מלמעלה למטה (תאורטית ניתן לדבר גם על מלמטה למעלה אך זה לא פרקטי)
- חופשי:
-
- תכנות פרוצדוראלי (באופן כללי ניתן למקם קריאות לפרוצדורות לפני או אחרי פרוצדורה ומאיפה נקרא לה לא ישנה במאום)
- תכנות מכוון אובייקטים (באופן כללי ניתן לגשת לאובייקט מכל מקום במסמך ומאיפה ניגש לא ישנה במאום)
התניות משחקות תפקיד מהותי בבקרת זרימה ובהתאם לכך מגוון תגובות לאיוונטים (condition-reaction).
סוגי תבניות בקרת זרימה
פרקטית, ניתן לשוח למשל על תבניות אלה:
- תבנית
if-than-else-elseif
- תבנית
switch-case-break-default
- תבנית try...catch אשר דומה לשתי התבניות לעיל אך כוללת מנגנון מובנה לטיפול בשגיאות
תבנית try...catch
תבנית try...catch אני מגדיר כתבנית או לחלופין דפוס בקרת זרימה בשפות התנהגות.
כלל שפות ההתנהגות כוללות תבנית זו בצורתה הכללית (הכוללת לכל הפחות בלוק try ובלוק catch).
try: 〈some-code〉 catch: 〈exception-handling-code〉
הסבר התבנית
מטרת התבנית היא ביצוע פעולה מותנית, אך באופן הבא הכולל מנגנון מובנה של טיפול בשגיאות.
נסה קוד X: אם הצלחת: אל תבצע פעולה מיוחדת אם נכשלת: בצע מה שמופיע בבלוק ה-catch אם יש בלוק finally, אז בין אם הצלחת ובין אם נכשלת: בצע מה שמופיע בבלוק finally
אם היה כישלון אז התרחשה אקספציה שהיא למעשה אזהרה או ארור.
אקספציה (כאמור, אזהרה או ארור) "נזרקת" (thrown) אל המשתמש ← ומכאן הביטוי throw an exception.
הערות כלליות
- בניגוד לאזהרה, ארור ככלל משקף באג תוכנה
- מושג בקרת זרימה הוא לא מושג פורמלי במדעי המחשב אלא מושג פרקטי בפיתוח תוכנה וכך גם תבניות שונות המשמשות לפיתוח תוכנה עימו
- למרות שניתן לשוח על תבנית כללית המשקפת את כלל שפות ההתנהגות או על תבנית רחבה המשקפת את רובן, עדיין, המיקוד אמור להיות בתחביר ובמאפיינים של כל שפה ושפה בנפרד, כך שלפעמים לא יהיה יעיל לבצע אינדוקציה מתבנית כללית אחת לכלל או לרוב שפות ההתנהגות