ruby.eql? rails # false

אני מתכנת בשפת רובי מסוף 2006, ולאחרונה גיליתי שהיכולות רובי שלי עלו לפחות 4 רמות מהפעם האחרונה שבעצם שמתי לב ליכולות רובי שלי.

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

למשל יש לי בה framework מדהים לעבודה בטלפוניה, שיודע לעבוד עם אסטריסק ומתיימר לדעת לעבוד עם עוד כמה ממשקי טלפוניה שונים. העניין הוא שזה לא מימוש API כמו מרבית הספריות השונות בשוק בתחום האסטריסק, אלא יש לאותו framework ערכים מוספים רבים, אשר חוסכים ממני המון עבודה מצד אחד, ומצד שני אינם דורשים ממני להשתמש רק בגישה המקורית של הframework, אלא זה בנוי בצורה בה אני יכול לקחת כמעט כל רכיב ולהשתמש בו כ stand alone, דבר שמספק לי עוד כוח. ואם מוסיפים לו את העובדה שהוא יודע לדבר עם עוד הרבה סוגי framework אחרים (כולל rails) בנוסף, אפשר להבין מדוע אני בוחר בו מול כלים אחרים.

העניין הוא ברובי אבל, שכאשר אנחנו מחפשים לעשות דברים, אנחנו מוצאים הרבה דוגמאות בrails ולא ברובי פר סה. למשל אם תשאלו מפתחי רובי איך ממירים 150 דקות לשעות, הם יגידו לכם לכתוב :

150.hours

אבל זה לא שייך לרובי, זה שייך ל Active Support של Rails. דוגמא של בעיה כזו שהתחרשה לי לאחרונה היתה לגרום למודול להכיל שדות בפנים שידברו עם כל המחלקות ששיכות לאותו מודול (מודול יכול להכיל בתוכו הרבה מחלקות או עוד מודולים וככה יוצרים namespace בקוד שיכול להיות מבוזר להרבה קבצים). הבעיה היא שמודול לא יכול להכיל משתנים. הוא יכול להכיל קבועים, מחלקות, מתודות ומודולים, אבל לא משתנים. אז הנה טריק נחמד שכן תהיה לו תמיכה בזה:

module VARIABLES
   mattr_accessor :my_var
end

אבל רגע, זה לא שייך לרובי, זה שייך ל Active Support של Rails. המתודה mattr_accessor בעצם יוצרת getter ו setter עם משתנה של מחלקה (ולא משתנה של instance) בשם my_var. כלומר הגישה אליו תהיה:

@@my_var

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

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

אז בפעם הבאה כשאתם מדברים על רובי, והמילה הראשונה שמישהו אומר לכם זה Rails, תזכרו

רובי לא שווה רילז !!!

4 מחשבות על “ruby.eql? rails # false

  1. אלעד

    אין שום סיבה בעולם שלא תשתמש בActiveSupport אם אתה צריך את אחד החלקים שלה. AS היא אמנם ספריה שהיא חלק אינטרגלי מריילס, אבל אינה בשום אופן יחודית לה ואף נמצאת בgem נפרד אם אתה צריך.

  2. ik_5 מאת

    ActiveSupport היא כמו להשתמש בקונגו בשביל לעשות חור לבורג בקיר. כשאתה רוצה לחצוב זה כלי מצויין, אבל כשאתה רק רוצה לשים בורג אתה תשבור את הקיר…

  3. אלעד

    האמת שזו שטות מוחלטת. אין שום סיבה לא לכלול את הספריה גם אתה צריך ממנה משהו אחד קטן, צריך רק לוודא שהיא עמידה ולא זולגת ובמקרה הזה היא בסדר גמור
    עברו הימים שהיית צריך לדאוג אם לטעון לזכרון עוד 10k או לא, ואני מבטיח לך ששום קיר לא יפול עם ActiveSupport.

  4. פינגבק: לימוד שפת רובי | לראות שונה

להשאיר תגובה

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

הלוגו של WordPress.com

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

תמונת Twitter

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

תמונת Facebook

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

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

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

מתחבר ל-%s