אם המאמר לא מובן במלואו אני ממליץ לחזור לקרואו לאחר קורס מבוא לשפת מחשב מסוימת (כגון שפת JavaScript) במכללה אינטרנטית כגון teamtreehouse.com בו לומדים על המושגים פרוצדורה ("פונקציה") ותחום באופן מוחשי ← כלומר עם דוגמאות ותרגילים מוחשיים תוך כדי קידוד וכן ניתן לפנות אלי אם משהו לא ברור
בהגדרה כללית, המונח תחום (באנגלית: Scope) משמש לתאר קטע מוגבל (כלומר מוקף בגבול המסמל אותו).
בפיתוח תוכנה בכלל ושפות התנהגות בפרט, "תחום" הינו קטע קוד מוגבל שבו ניתן לגשת למשתנה רק בתנאי מסוים אם בכלל.
תחום גלובאלי לעומת תחום לוקאלי
בהקשר שפות התנהגות רבות נהוג לחלק תחום לגלובאלי ולוקאלי:
- תחום גלובאלי הינו תחום כללי כגון מסמך קוד מקור שלם או "מיכל" ש"מכיל" את התוכן הפנימי שלו
- תחום לוקאלי או לחלופין תחום ספציפי, הוא תחום פנימי אחד או יותר בתוך מסמך קוד תוכנה (או בתוך מיכל שמכיל את התוכן הפנימי שלו), כגון פרוצדורה
חשיבות ההמנעות משימוש במשתנים גלובאליים
ישנה הסכמה רחבה בין מפתחי תוכנה להימנע ככל הניתן משימוש במשתנים גלובאליים ולהגדיר כמעט תמיד רק משתנים לוקאליים.
קונצנזוס זה משקף גישה מודולרית, ארגון קוד סדור יותר, הבטחת קריאה נוחה יותר ועבודת צוות נוחה יותר ואף יש בכך יתרון אבטחת מידע; אבטחת מידע קשורה בלהבין מה קוד אמור לעשות ומשתנים גלובאליים מקשים על הבנה זו ולכן להבנתי מתאימים כמעט תמיד רק למסמכי קוד בודדים וקצרים (כגון סקריפט) שרק אדם אחד מתחזק כך שהערך שהם יחזירו לא ישונה באופן תדיר (ואז אולי בטעות יחזיר מידע רגיש כשגיאה רחבה).
הורשה
המונחים תחום לקסיקלי ותחום סטטי מתארים מצב בו ייתכנו רמות בתחום לוקאלי; כך למשל, פרוצדורה X תוכל להכיל תת פרוצדורה Y; משתנים שהוגדרו בפרוצדורת-האם X יהיו תקפים גם ברמה העמוקה יותר של פרוצדורת-הבת Y וגם בילדים נוספים אם ישנם; כלומר, הם יהיו תקפים לפרוצדורת האם ולפרוצדורות בנות שלה Y ולבנות אפשריות של פרוצדורות בנות אפשריות כאלה וכן הלאה.
במילים אחרות, פרוצדורה X תוריש משתנים לכלל צאציה.
אקספציה
בשפות שונות יש למקם משתנה בתחום גלובאלי ("משתנה גלובאלי") לפני פרוצדורה שמשתמשת בו אך בשפות שונות כגון שפת JavaScript, טכנית לא משנה היכן נמקם משתנה גלובאלי במסמך ← עדיין נוכל לגשת אליו; זה תלוי באופן בו מחשב מחשב קוד כל שפה בהתאם להוראות שלה כתוכנה בעצמה (כל שפת מחשב היא תוכנה).
משתנה לוקאלי שמוקם ברכיב תוכנה במסמך תוכנה (למשל בתוך פרוצדורה) בדרך כלל יהיה זמין רק לרכיב תוכנה זה; למשל רק בתוך הפרוצדורה ואולי גם לתתי פרוצדורות בתוכה דרך הורשה, אלא אם נצהיר על אקספציה המקנה אפשרות גישה למשתנה גם מתחום אחד או יותר אחר\ים.
פתיחות וסגירות
פתיחות סגירות (באנגלית: Closure) היא ההקשר התחבירי של יצירת תחום (קרי, "תחימה") ← איך יוצרים תחום או לחלופין איך פותחים תחום ואיך סוגרים תחום (בין אם יש לו תתי-תחומים שיורשים ממנו משתנים ובין אם לא).
פתיחה וסגירה של תחום כמו דרך הצהרה על פרוצדורה (עם פתיחה וסגירה שלה) מושגת לרוב על ידי סוגריים כמו סוגריים מעוגלים (()
), מרובעים ([]
), מסולסלים ({}
) או זווייתיים (⟨ ⟩
).
הערות כלליות
- גבול ניתן להגדיר כישות הגורמת להפרדה של ישות אחת מאחרות, לפחות בנפש.
- בפיתוח ווב נהוג להבחין בין document לבין body כאשר document מכיל את body שמכיל את כלל ה HTML שקשור בפלט על מסך אם כי זו כמובן לא ההבחנה היחידה.