ארכיון יומי: 2 אוגוסט, 2011

עם או בלי ?

אחד התחבירים שאני הכי שונא בשפת פסקל הוא התחביר של with. למעשה הבעיה שלי היא עצם השימוש בו.

למראית עין הוא כלי מאוד יעיל בלחסוך קוד. כלומר אם יש לנו קוד כזה:

Object1.Property1 := 'Hello';
Object1.Property2 := 12;
...
Object1.method11(1, 2, Object1.Width, Object1,Height -2);

אם נכתב את אותו הדבר רק עם with הוא יראה ככה:

with Object1 do
  begin
    Property1 := 'Hello';
    Property2 := 12;
    ...
    method1(1,2,width, height -2);
  end;

ובכן with חוסך לנו לכתוב את Object כל פעם מחדש. נשמע נחמד נכון ? ובכן יש עם זה הרבה בעיות. בפסקל צריך לזכור כי מה שמגיע מצד שמאל חזק יותר מצד ימין, ומה שקרוב יותר אלייך חזק יותר ממה שרחוק יותר ממך. כלומר אם יש לי נגיד 2 סמלים שנקראים Width, אחד שייך למתודה שאני כותב בה את הקוד והשנייה ל 1‏Object, אני לא בהכרח ידע עם מי הוא משתמש, אבל הבעיה יותר חמורה. with מאפשר לי להשתמש עם יותר ממשתנה אחד שיש לו עוד אלמנטים בתוכו, ובנוסף אפשר גם להשתמש ב with מקונן:

  with Object1, Object2 do
    begin
      Height := 24;

      with Rec1 do
        Width := 18;
...
    end;

תיאורטית Height יהיה שייך ל Object1 נכון ? אבל אתם באמת יכולים להיות בטוחים שזה המצב ? אולי הוא משתמש בזה של Object2 בכלל ?

עדיף במקרה הזה למרות שכביכול אנחנו כותבים יותר (אפשר לטפל גם בזה באמצעות IDE טוב, או סתם עורך טקסט טוב כמו vim) לכתוב יותר קוד כי הקוד ברור יותר, ואין הפתעות של מה יקפוץ לנו ומאיפה. כך אנחנו למעשה שומרים על namespace במקום לחלל אותו.

אז בבקשה תפסיקו להשתמש ב with. תודה !