ארכיון יומי: 22 אוקטובר, 2011

פונקציות אנונימיות בתכנות פרוצדורלי

מאז שנות ה70 בערך, לא נוצרה שום טכנולוגיה חדשה בנושא עולם התכנות. אפילו תכנות מקביל (parallel programming) אינו המצאה חדשה. למרות שכיום הטרנד (מה המילה העברית לזה ?) הוא להשתמש בעיקר בשפות דינאמיות ופונקציונאליות, או סתם שפות מתפרשות בזמן ריצה (כדוגמת ג'אווה), אין שום דבר חדש כאן. החידוש נעשה בשנות ה60 וה70, ששם הם הרעיונות הומצאו בעצם

אז בגלל שרק הטרנדים מתחלפים, אבל לא הטכנולוגיה באמת, יש שפות פרוצדורליות אשר מנסות לקחת דברים בעיקר משפות פונקציונאליות ולפעמים אפילו דינאמיות (אשר גם מעתיקות משפות פונקציונאליות) אליהן חזרה

לאחרונה קם (שוב) דיון בנושא של להוסיף פונקציות אנונימיות לFPC (אחרי שיש אותם כבר בדלפי). פונקציות אנונימיות, הם בעצם סוג של closure הלקוח משפה פונקציונאלית, אבל הרבה לא חושבים שיש לה מקום בפסקל, כי אפשר להשיג תוצאה ממש דומה כבר הרבה מאוד שנים ללא השימוש בה. יותר מזה, על מנת לשמור על התחביר, יש הרואים כי התחביר אינו באמת קריא מספיק.התחביר הפשוט ביותר  נראה ככה:

...
type
  TMyProc = reference to procedure(x: Integer);
...
 procedure call(const proc: TProc);
  begin
    proc(42);
  end;

  var
    proc: TProc;
  begin
    proc := procedure(a: Integer)
    begin
      Button1.Caption := IntToStr(a)
    end;
    call(proc)
  end;
...

העניין הוא שזה לא באמת נחוץ בפסקל בגלל שיש לשפה מספר פיטצ'רים שמספקים המון כוח, כדוגמת פונקציות מקוננות, משתנים פרוצדורליים ואפילו עבודה מאוד גמישה עם מצביעים, אשר גם איתם אפשר לעשות "משחקים". כך שלמרות שכל אלו לא זהים לפונקציות אנונימיות אשר נוצרות בזמן ריצה ומתאימות רק לבלוק שהן נוצרו עבורו, עדיין אפשר להשיג קוד שמתאים לבלוק מסויים, ושיתאים רק למשהו ספציפי.
זה מאוד נחמד להעתיק טכנולוגיות, אבל צריך לשאול תמיד האם זה מספק ערך מוסף, והאם באמת צריך פיטצ'ר מסויים או שזה רק נחמד שיהיה.
מה אתם חושבים ?