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;

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

מחשבה אחת על “class var

  1. יורם

    מה שאתה מתאר קיים בכל שפה הכוללת תכנות מונחה-עצמים מבוסס מחלקות בניגוד לתכנות מונה-עצמים מבוסס פרוטוטייפים, כמו פרל או JS, גם בפרל זה קיים אבל אחרת).
    בC++, ג'אווה ושפות אחרות מה שאתה קורה לו class var מכונה משתנה סטטי של מחלקה (לא לערבב עם משתנה סטטי של מודול\פונקציה ב-C, המשמעות השונה של "סטטי" מבחינת ויזביליתי אכן מעצבנת) ועובד בדיוק כפי שתיארת.

כתיבת תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s