פונקציות ונהלים הם חלק חשוב משפת הדלפי. החל מדלפי 4 Delphi מאפשר לנו לעבוד עם פונקציות ונהלים התומכים בפרמטרי ברירת מחדל (ביצוע ה- פרמטרים אופציונליים), ומאפשר לשני שגרות או יותר לקבל שם זהה אך פועלים כשונים לחלוטין שגרות.
בוא נראה כיצד עומס יתר ופרמטרים המוגדרים כברירת מחדל יכולים לעזור לך לבצע קוד טוב יותר.
עומס יתר
במילים פשוטות, עומס יתר מכריז על יותר משגרה אחת עם אותו שם. עומס יתר מאפשר לנו לקבל מספר רב של שגרות החולקות את אותו שם, אך עם מספר שונה של פרמטרים וסוגים.
כדוגמה, הבה נבחן את שתי הפונקציות הבאות:
יש להכריז על שגרת עומס יתר. עם הוראת עומס יתר}פונקציה SumAsStr (א, b: מספר שלם): מחרוזת; להעמיס יותר מדי; התחל תוצאה: = IntToStr (a + b); סוף; פונקציה SumAsStr (א, ב: מורחב; ספרות: מספר שלם): מחרוזת; להעמיס יותר מדי; התחל תוצאה: = FloatToStrF (a + b, ffFixed, 18, ספרות); סוף;
הצהרות אלה יוצרות שתי פונקציות, שתיהן נקראות SumAsStr, שלוקחות מספר פרמטרים שונה והן משני סוגים שונים. כשאנחנו מכנים שגרה עמוסה, על המהדר להיות מסוגל לדעת לאיזו שגרה אנחנו רוצים להתקשר.
לדוגמה, SumAsStr (6, 3) מכנה את הפונקציה הראשונה SumAsStr, מכיוון שהטיעונים שלה מוערכים מספר שלם.
הערה: דלפי תעזור לכם לבחור את היישום הנכון בעזרת השלמת קוד ותובנה לגבי קוד.
מצד שני, שקלו אם אנו מנסים לקרוא לפונקציה SumAsStr באופן הבא:
SomeString: = SumAsStr (6.0,3.0)
נקבל שגיאה שקוראת: "אין גרסה עמוסה של 'SumAsStr' שניתן לקרוא לטענות אלה."המשמעות היא שעלינו לכלול גם את פרמטר הספרות המשמש לציון מספר הספרות אחרי הנקודה העשרונית.
הערה: יש רק כלל אחד בעת כתיבת שגרות עמוסות יתר, וזה ששגרה שעומס יתר חייבת להיות שונה בסוג פרמטר אחד לפחות. במקום זאת, לא ניתן להשתמש בסוג ההחזרה כדי להבחין בין שתי רוטינות.
שתי יחידות - שגרה אחת
נניח שיש לנו שגרה אחת ביחידה A, ויחידה B משתמשת ביחידה A, אך מצהירה על שגרה עם אותו שם. ההכרזה ביחידה ב 'אינה זקוקה להנחיית עומס יתר - עלינו להשתמש בשם של יחידה א' כדי להעפיל לשיחות לגרסת A לשגרה מיחידה B.
שקול משהו כזה:
יחידה ב;... שימושים א;... תהליך שם שגרה; התחל תוצאה: = A.RoutineName; סוף;
אלטרנטיבה לשימוש בשגרה עמוסה היא להשתמש בפרמטרי ברירת מחדל, שבדרך כלל מביאים פחות קוד לכתוב ולתחזוקה.
פרמטרים ברירת מחדל / אופציונליים
על מנת לפשט כמה הצהרות, אנו יכולים לתת ערך ברירת מחדל עבור הפרמטר של פונקציה או הליך, ואנחנו יכולים לקרוא לשגרה עם או בלי הפרמטר, מה שהופך אותו לאופציונאלי. כדי לספק ערך ברירת מחדל, סיים את הצהרת הפרמטר בסמל שווה (=) ואחריו ביטוי קבוע.
לדוגמא, בהתחשב בהכרזה
פונקציה SumAsStr (א, ב: מורחב; ספרות: מספר שלם = 2): מחרוזת;
שיחות הפונקציה הבאות שוות ערך.
SumAsStr (6.0, 3.0)
SumAsStr (6.0, 3.0, 2)
הערה: פרמטרים עם ערכי ברירת מחדל חייבים להופיע בסוף רשימת הפרמטרים, ועליהם לעבור בערך או בתור const. לפרמטר הפניה (var) לא יכול להיות ערך ברירת מחדל.
כאשר מתקשרים לשגרה עם יותר מפרמטר ברירת מחדל, איננו יכולים לדלג על פרמטרים (כמו ב- VB):
פונקציה דלג על DefParams (var מחרוזת; B: מספר שלם = 5, C: בוליאני = שווא): בוליאני;... // קריאה זו יוצרת הודעת שגיאה
CantBe: = SkipDefParams ('דלפי', נכון);
עומס יתר עם פרמטרים ברירת מחדל
כשמשתמשים בעומס יתר על פונקציות או בפרוצדורות וגם בפרמטרי ברירת מחדל, אל תציג הצהרות שגרתיות מעורפלות.
שקול את ההצהרות הבאות:
תהליך DoIt (א: מורחב; B: מספר שלם = 0); להעמיס יותר מדי; תהליך DoIt (א: מורחב); להעמיס יותר מדי;
הקריאה להליך DoIt כמו DoIt (5.0), אינה מורכבת. בגלל פרמטר ברירת המחדל בפרוצדורה הראשונה, הצהרה זו עשויה לקרוא לשני ההליכים, מכיוון שלא ניתן לדעת לאיזה נוהל אמור להתקשר.