Dev-Time

Module pattern – מודולריות זה שם המשחק

הקדמה

ג’אווה סקריפט היא שפת פיתוח מאוד מיוחדת, רוב התכנתים שמגיעים משפות תכנות כמו Java ,C++ ,.Net פשוט מקבלים שוק!, לדוגמא המושג loosely typed – ג’אווה סקריפט אינה מצריכה הגדרה של סוג המשתנה, המשתנים הם דינמיים ויכולים לשנות את סוגם בזמן ריצה. יתרון או חסרון מי אנחנו שנתווכח. עוד דוגמא תכנות מונחה עצמים אפשרי, אבל לא בדרך המקובלת של הגדרת מחלקה שאיננה קיימת בשפה, אלא באמצעות יצירת אובייקט והצמדת מאפיינים אליו. כל מאפיין באובייקט יכול לתפקד כמשתנה או פונקציה. ישנם שלשה סוגי אובייקטים: אובייקטים של השפה כמו משתנים (כמו אובייקט תאריכי Date ואובייקט מחרוזתי), אובייקטים של הדפדפן (כמו אובייקטי window ו-document), ואובייקטים שיוצר המשתמש. השפה תומכת בהרחבת מתודות של אובייקטים טבעיים בשפה כמו למשל מחרוזות או Date באמצעות Prototyping.

בשנים האחרונות JavaScript מתקדמת בצעדי ענק כשפת מיינסטרים, כמות הקוד שנכתוב באפליקציית JavaScript גודלת  ל200k+, מה שאומר שהקוד חייב להיות חזק יותר, קריא יותר, נוח לתחזוקה וכדומה. יש המון דרכים לפתור את המכשולים שהזכרנו אבל השם הנפוץ לפתרונות האלה הוא – תבניות עיצוב – Design Pattern. אנחנו נבין היום למה התכוון המשורר, ונכיר אפילו תבנית מאוד נפוצה Module Pattern.

קצת היסטוריה, Design Pattern הגיעו מעולם הארכיטקטורה, בשנת 1977, כריסטופר אלכסנדר, ארכיטקט במקצועו, הוציא ספר ובו הגדיר באופן פורמלי 253 בעיות מוכרות מעולם האכיטקטורה ולהן פתרונות אבסטרקטים. בעצם לפי האידאולוגיה שלו לכל בעיה אפשר לבנות פתרון קבוע(יכול להיות גמיש) וכל אחד יכול לממש אותו לפי הצורך.

לדוגמא: בעיה – סללנו כביש ממקום A למקום B, אך רק מכוניות יכולות לעבור במקטע הזה. פתרון: מדרכה לאורך המסלול בשני צידי הדרך יאפשר להולכי הרגל להשתמש באותו הדרך.

Module Pattern

לאחר שיעור ההיסטרויה הגיע הזמן להבין מה ה”בעיה” שהיינו רוצים להתמודד איתה באמצעות תבנית.

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

בדוגמא הזאת ניתן לראות שהמשתנה myVar “חיי” בסביבה הגלובלית, הצהרה נוספת של myVar בתוך פונקציה לא השפיעה על הסביבה הגלובלית. בעצם כשאנחנו מדברים על Global Scope אנחנו מדברים על הגישה למשתנים. זאת אומרת שאם נרצה לגשת למשתנה otherVar מחוץ לפונקציה לא נוכל לגשת אליו. אפשר להרחיב עוד על הנושא הזה אבל אני מניח שאת הידע הזה רכשתם לפני שאתם קוראים על Module Pattern. ולסיום בצורה יותר עממית, Global Scope זה כל הקוד שמחוץ לפונקציות!.( במידה ונצהיר משתנה בתוך בפונקציה ללא var, אנחנו נשנה את המשתנה הגלובלי).

הבנתם נכון, בגדול כתיבה של Module זה בעצם כתיבת כל הקוד שלנו בתוך פונקציה\אובייקט!

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

הסיבה לשימוש בתבנית:

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

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

 

 בדוגמא הזאת קראנו למודול שלנו testModule, הפעלנו פונקציה שמחזירה אובייקט זה שיהיה בסוף תחת המשתנה testModule.

כל הקסם קורא בגלל בזכות ה JavaScript כאשר אנחנו מפעילים פונקציה כל המשתנים שהצרנו עליהם חיים ואפשר לגשת אליהם רק בתוך הפונקציה, פונקציה מחזירה לעולם undefiend, אלא אם החזרנו אחרת.

בגלל ההסבר הזה אפשר להבין שהאובייקט שחוזר זוכר את הפונקציה שבו הוא נוצר לכן יש לו גישה למשתנים שנוצרו בפונקציה שהם בעצם הפרטיים, Counter חיי בפונקציה בלבד, האובייקט שחוזר מהפנקציה בדוגמא שלנו מחזיר 2 פונקציות, incrementCounter ו showCounter, הם מכירות את counter בגלל שהם נוצרו באותו הפונקציה, זה נקרא closures.

לסיכום

זהו הבסיס לModule Pattern, אבל הכי חשוב להבין את הגישה של תבניות, בעיות, ופתרונות. השתדלו לכתוב את כל הקוד שלכם במודולים, נסו להבין את הבעיות שModule pattern פותר.

לידור אביטן – FullStack Developer

ליצירת קשר שלחו הודעה פרטית בלינקדאין

לידור אביטן

מפתח FullStack בחברת Intel-Security

1 comment

  • תודה על המאמרים! אתר חדש?

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

    פנקו בעוד תוכן איכותי

Follow

Get every new post delivered to your Inbox

Join other followers