ארכיון יומי: 6 נובמבר, 2010

class var

FPC מיישם כל מיני תוספות לשפה אשר Embarcadero הוסיפו לדלפי כמה מהתוספות מכניסות את שפת פסקל מונחת העצמים להיות קרובה יותר לשפת ג'אווה ואפילו תוספות שאני מכיר רק ברובי (אולי יש בעוד שפות) מאשר השפה שהתרגלנו אליה.

למשל אפשר בתוך מחלקה (class) ליצור קבועים (const), שימוש בהגדרות טיפוס (type) ובכלל זה גם הגדרות של טיפוס מסוג רשומה ואפילו מחלקות בנים. בנוסף אפשר ליצור גם class var, שזה בעצם משתנה במחלקה אשר הערך שלו נשאר אצל כל ה instance והבנים, ואם אחד מהם משנה אותו, אז הוא משתנה אצל כולם באותה מידה. אני מכיר את זה רק בשפת רובי, אבל לא אתפלא אם עוד שפות תומכות בזה.

בניגוד למשל לשפת ג'אווה ואפילו ++C, בפסקל אני יוצר איזור (section) אשר משפיע על השאר, כלומר כאשר אני מגדיר const או type או אפילו class var, עד שאני לא יוצר איזור חדש של משהו אחר (private, public, published, const, הגדרת מתודות וכו') או סוגר לגמרי את המחלקה (עם end), תמיד הקוד שיהיה בתוך האיזור יהיה שייך לאיזור הזה. בגלל זה גם נוסף הגדרה של var בשביל ליצור שדות שיצאו מחוץ לאיזור קיים. וגם var עצמו יוצר איזור משל עצמו.

כמו כן, כבר הרבה מאוד זמן יש תמיכה במילה השמורה deprecated אשר המטרה שלה הוא להגיד שהגדרת קוד/בלוק מסויים הוא כמובן deprecated מה שיוביל לאזהרה מהמדר.

כלומר מחלקות בפסקל מונחה עצמים יכולים להראות ככה:

type
 generic TAClass<T> = class
   constructor Create(const AParam : T);
 end;

  TTest = class
  private
    type
      TIntegerAClass = specialize TAClass<Integer> deprecated;
    var
     FAClassInt : TIntegerAClass;
  public
    property AClassInt : TIntegerAClass read FAClassInt; // read only property ...
  end;

אל תגידו שלא הזהרתי אותכם מראש 🙂