האם אי פעם מצאת את עצמך כותב שוב ושוב את אותו הקוד כדי לבצע משימה נפוצה בתוכך מטפלים באירועים? כן! הגיע הזמן שתלמדו על תוכניות בתוכנית. בואו נקרא לשאלות משנה של מיני-תוכניות אלה.
מבוא לתת-שמות
תת-רוטינות הן חלק חשוב מכל שפת תכנות, ודלפי ללא יוצא מן הכלל. בדלפי ישנם בדרך כלל שני סוגים של תת-רוטינים: פונקציה והליך. ההבדל הרגיל בין פונקציה לפרוצדורה הוא שפונקציה יכולה להחזיר ערך, והליך בדרך כלל לא יעשה זאת. פונקציה נקראת בדרך כלל כחלק מהביטוי.
התבונן בדוגמאות הבאות:
תהליך תגיד שלום(const מה:מחרוזת); התחל
ShowMessage ('שלום' + sWhat); סוף; פונקציה שנים(const שנת לידה: מספר שלם): מספר שלם; var
שנה, חודש, יום: מילה; התחל
DecodeDate (תאריך, שנה, חודש, יום); תוצאה: = שנה - לידה שנת; סוף;
לאחר שהוגדרו תת-שמות, נוכל לקרוא להם פעם אחת או יותר:
תהליך TForm1.Button1Click (שולח: TObject); התחל
SayHello ('משתמש דלפי'); סוף; תהליך TForm1.Button2Click (שולח: TObject); התחל
SayHello ('זרקו גאג'יץ'); ShowMessage ('אתה' + IntToStr (YearsOld (1973)) + 'שנים!'); סוף;
פונקציות ונהלים
כפי שאנו רואים, הפונקציות והנהלים פועלים כמו תוכניות מיני. בפרט יכולים להיות להם סוג משלהם, קבועים והצהרות משתנות בתוכם.
עיין מקרוב בפונקציה (שונות) של SomeCalc:
פונקציה SomeCalc. (const sStr: מחרוזת; const iYear, iMonth: מספר שלם; var iDay: מספר שלם): בוליאני; התחל...סוף;
כל הליך או פונקציה מתחילים עם א כותרת שמזהה את הנוהל או הפונקציה ומפרט את פרמטרים השימוש בשגרה אם קיים. הפרמטרים מופיעים בסוגריים. לכל פרמטר יש שם מזהה ובדרך כלל יש סוג. פסיק מפריד בין פרמטרים ברשימת פרמטרים זה לזה.
sStr, iYear ו- iMonth נקראים פרמטרים קבועים. לא ניתן לשנות פרמטרים קבועים על ידי הפונקציה (או ההליך). ה- iDay מועבר כ- פרמטר var, ואנחנו יכולים לבצע בו שינויים, בתוך תת הכוח.
פונקציות, מכיוון שהן מחזירות ערכים, חייבות להיות א סוג חזרה הכריז בסוף הכותרת. ערך ההחזרה של פונקציה ניתן על ידי המשימה (הסופית) לשמה. מכיוון שלכל פונקציה באופן מרומז יש משתנה מקומי תוצאה מאותו סוג של ערך ההחזרה של הפונקציות, להקצאה לתוצאה יש השפעה זהה להקצאת לשם הפונקציה.
מיקום וקריאות משנה
תת-סמכות ממוקמת תמיד בחלק היישום של היחידה. תת-רוטינות מסוג זה יכול להיקרא (בשימוש) על ידי מטפל אירועים או תת-רוטינה באותה יחידה שמוגדרת אחריה.
הערה: סעיף השימושים של יחידה אומר לך אילו יחידות היא יכולה להתקשר. אם ברצוננו שמשנה-משנה ספציפית ביחידה 1 תהיה שימושית על ידי מטפלי האירועים או תת-רוטינות ביחידה אחרת (נניח יחידה 2), עלינו:
- הוסף את Unit1 לסעיף השימושים של Unit2
- הנח עותק של הכותרת של תת-השערה בחלק הממשק של היחידה 1.
משמעות הדבר היא ששניות משנה אשר הכותרות שלהן ניתנות במקטע הממשק הן גלובלית בהיקפה.
כאשר אנו מכנים פונקציה (או פרוצדורה) בתוך היחידה שלה, אנו משתמשים בשמה עם כל דבר אחר פרמטרים דרושים. מצד אחר, אם נקרא תת-רחוב עולמי (המוגדר ביחידה אחרת, למשל MyUnit) אנו משתמשים בשם היחידה ואחריה תקופה.
... // הליך SayHello מוגדר בתוך יחידה זו
SayHello ('משתמש דלפי'); // פונקצית YearsOld מוגדרת בתוך יחידת MyUnit
דמה: = MyUnit. YearsOld (1973);...
הערה: בפונקציות או בפרוצדורות יכולות להיות מוטבעות בתוכם תת-רוטינים משלהם. תשתית משובצת היא מקומית לתת-מיכל המכולה ולא ניתן להשתמש בה בחלקים אחרים של התוכנית. משהו כמו:
תהליך TForm1.Button1Click (שולח: TObject); פונקציה קטן(const sStr:מחרוזת): בוליאני; התחל// IsSmall מחזיר נכון אם sStr הוא אותיות קטנות, לא נכון
תוצאה: = LowerCase (sStr) = sStr; סוף; התחל// ניתן להשתמש ב- IsSmall רק בתוך אירוע OnClick של כפתור 1אם IsSmall (Edit1.Text) לאחר מכן
ShowMessage ('כל הכובעים הקטנים ב- Edit1.Text')
אחר
ShowMessage ('לא כל הכובעים הקטנים ב- Edit1.Text'); סוף;