למה JavaScript? למה לא?

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

הכתבה הזו התבשלה אצלי בראש למעלה מחצי שנה ובגלגוליה השונים חוותה ניסיונות כושלים לכתוב על Node.js וממשקי תכנות ב-HTML5. כשניסיתי לזקק את המניע לפרץ ההגיגים הקודח שלי, הבנתי שלמעשה מה שאני מנסה "למכור" לקוראים הוא אוסף תובנות לגבי מערכת היחסים הסבוכה והנוירוטית שלי עם ג'אווהסקריפט.

ולכן, הרי לפניכם, אוסף הגיגים וסיבות לחיבה העזה שיש לי ל'ילד הכאפות' של עולם התוכנה האינטרנטית.

1. שפה טעונת-טיפוח

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

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

ולכן, הסיבה הראשונה שאביא היא שג'אווהסקריפט היא לא C, ג'אווה, PHP או דוט.נט ואף פעם לא תתיימר להיות כזו. הדרך לליבה של ג'אווהסקריפט לא עוברת בפקולטה למדמ"ח אלא בנבכי הדפדפן וחוויית המשתמש, שמתוקף לימודי באוניברסיטה, יותר קרובים לליבי.

2. חזון העצמים היבשים

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

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

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

3. תכנות מונחה-ארועים

מקור: flickr, cc-by Dmitry Baranovskiy

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

סגנון כתיבה מבוסס אירועים עולה בקנה אחד עם גישות מודרניות לכתיבת תוכנה שאמורה להתמודד עם עומסים גבוהים (למשל nginx, eventmachine, twisted) ומעודד לדעתי שילוב עקרונות ודפוסי פיתוח המבוססים על מה ש"קורה" ולא מה ש"אמור לקרות". הגישה הזו כמובן מאד נכונה בפיתוח ממשקי משתמש, אבל מתאימה גם לקידוד בצד השרת.

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

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

4. תחביר

שתיים מהתכונות האהובות עלי ביותר בג'אווהסקריפט הן תחביר העצמים (Object Literals) וסגנון הכתיבה הנקרא array notation המשלים אותו.

השימוש ב-Object Literals לכתיבת מודולים, מאפשר להגדיר בקלות ובנוחות אוסף תכונות קשורות תחת קורת-גג אחת, מתוחמת-שם (name-spaced), ללא צורך ביצירת מחלקות שהיא לפעמים פשוט מיותרת. כמובן, בגלל ש Object הוא אזרח מהמעלה הראשונה בג'אווהסקריפט, אין הגבלה לסוגי מידע בסיסים, וניתן להוסיף למבנה הנתונים פונקציות ואובייקטים תוך שימוש בתחביר מוכר וקריא. בקיצור, תענוג.

השימוש ב array notation משלים את חיבתי ל Object Literals בכך שהוא מאפשר לי לבדוק הימצאות של תכונות ושיטות באובייקטים קיימים, תוך כתיבת קוד תמציתי ויעיל, עם פגיעה מינימלית בקריאות. למשל, כדי לבדוק אם לדפדפן יש תמיכה ב WebSockets אוכל לכתוב:

if(window['MozWebSocket' || 'WebSocket']){....}

ולכן, סיבה רביעית תהיה תחביר קריא, גמיש, מובנה ומודולרי, תודות ל Object Literals ול array notation.

5. קהילה וקידמה

ג'אווהסקריפט היא שפת הפיתוח הנפוצה ביותר לווב. פשוט בגלל שכל דפדפן תומך בה (סליחה לינוקס).

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

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

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

6. לקוחות ושרתים

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

מה שמגניב ביותר הוא שלמעשה כל הכיף של כתיבת ג'אווהסקריפט (כמו JSON, array notation, תכנות מונחה-אירועים) עבר כמו שהוא לשרת, עם תוספות טעימות ונעימות שמאפשרות ליצור יישומים מודרניים לאינטרנט. אתם מוזמנים לקרוא כתבה של מתכנת פייתון שמספר על חוויותיו הראשונות עם Node.js וכמובן להתרשם בעצמכם.

אם יש היום סיבה ללמוד ג'אווהסקריפט, היא לדעתי Node.js שנראה שכובש את העולם בסערה, ולכן סיבה שישית היא שאני לא צריך ללמוד שפות תכנות חדשות כדי לכתוב קוד בצד-השרת או שאני יכול לכתוב קוד צד שרת בג'אווהסקריפט במקום ברובי ועדיין להיות סופר cool.

7. אתגרי הדפדפן

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

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

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

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

הגיגי סיכום

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

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

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

וידאו: Google I/O 2011: Learning to Love JavaScript

זהר ארד

בן 35, קיבוצניק שהדרים לעיר הגדולה, מפתח client-side בנשמתו (מטהקפה, קול הקמפוס 106fm ואחרים). משתמש מקינטוש מושבע (שחוטא גם בלינוקס בשעות הפנאי). מעדיף הכל פשוט, מינימליסטי ועובד טוב ומשתדל להמנע מדברים עם הלוגו של מיקרוסופט ונהגי מוניות כעסנים. אוהב הרבה Web, מתובלת בג'אווהסקריפט, HTML, CSS, פייתון ורובי, ספרים, פפאיות ומוזיקה מהחנות (בדיסק המקורי). מתנודד תדיר בין אקזיסטנציאליזם לאינדיבידואליזם ונכון להיום עדיין אוחז ב-fetish לא מוסבר לצבים.

תגיות לכתבה:

להגיב

14 תגובות

  1. מאת ik_5:

    זוהר, כתבה חשובה, עם מספר אי דיוקים. Javascript היא שפת תכנות. יש לה תקן היושב בארגון Emca והשם של השפה שונה גם ל EmcaScrip. התקן האחרון הוא מספר 5.

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

    האובייקטים שאתה מכיר לדפדפן, הם תוספת לשפה, אבל לא חלק מהשפה. אפשר להגיד שכל דפדפן מכיל עוד framework בסיסי כלשהו בשביל לאפשר לשפה לדבר איתו, ובכך הוא הופך את השפה לשפת embedded .

  2. מאת זהר ארד:

    ik – תודה על התגובה. הרשה לי להבהיר:

    1. אני מניח שהקוראים יודעים שג'אווהסקריפט היא שפת תכנות. בחרתי לא להכנס לנבכי תקן EMCAScript כדי לא להכביד.

    2. אני לא אומר שאין בג'אווהסקריפט תכנות מונחה עצמים, אלא מנסה להבדיל בין תכנות מונחה עצמים המוכר משפות אחרות כמו PHP, רובי ושות' לבין המימוש של ג'אווהסקריפט המבוסס על Prototyping. ההבדל הזה הופך לדעתי את השפה לפחות נהירה למי שמורגל ב OOP "סטנדרטי" או לא מבוסס Prototyping

    3. ההתייחסות להעשרה של השפה בממשקי תכנות לדפדפן אכן מדברת על העשרה של השפה בסביבת הדפדפן ולא במבנה הבסיסי שלה – תודה על חידוד ההבדל.

  3. מאת יוראי:

    חפירות (במובן החיובי של המילה). אני מתכנת הרבה בJS ועדיין מרגיש ילד בה :)

  4. מאת אלון:

    סקירה קלילה אבל טובה!
    גם לדעתי לא היה פה מקום להיכנס לקטנות בענייני ECMA. אולי בכתבת המשך?

    לגבי node.js: אני כותב בזה הרבה קוד (ביטורמה – https://bitorama.com – כולו node), ואני חושב שמדובר בפתרון מצוין להרבה דברים שרצים על השרת – בייחוד לשרתי רשת.
    אין שפה אידיאלית (אע"פ שיש שאומרים שגו היא כזו…) וגם ל-Node יש צדדים יותר חלשים. ספציפית, מי שמתכנן להריץ חישובים כבדים, יתכן וימצא פתרונות עדיפים מ-Node.

  5. מאת oren:

    כתבה מעולה!
    +1 ליתרונות שציינת :-)

  6. מאת יואכים:

    אני משתמש בגאווה סקריפט כמו כולם, לנקודות קטנות שקשורות בעיקר לנושאים ויזואלים
    אבל רוב הפעמים מנסה להימנע ולא בצדק.
    אני חושב שמה שמרחיק אותי מהשפה זה:
    א. אני ממש מסתמך על intellisense (אני כותב בעיקר ב-vs) וקשה לי לכתוב קוד מורכב, מודולרי וכזה שמקושר להרבה משאבים כשאני צריך לזכור מהם האובייקטים והפונקציות העומדות לרשותי. לא מצאתי עדיין IDE שעוזר לי בקטע הזה
    ב. קשה לי עם ארגון הקוד והלוגיקה בפרוייקט. כלומר, אני מרגיש שאני כותב פונקציות וזורק את כולן לדף js אחד ונותן לדפדפן להתעסק עם למצוא אותן. אחר כך כשאני בא לתחזק את הקוד, אני מסתבך בלמצוא איזו פונקציה קשורה לאיזה פקד או תהליך
    ג. אין ספק שאחד הדברים המגבילים בשפה זה היעדר קשר מפותח בין השרת ובין הרכיבים בצד הלקוח וזה אומר שצריך לפתח תמיכה מלאה שלא קשורה לפרוייקט עצמו שמסדירה את ההתרחשות שבשרת עם הדפים

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

  7. מאת רם:

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

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

    גם ניתוח תחבירי סטאטי (JAVASCRIPTLINT או JSLINT) לא יגלה לך יותר מידי במקומות הכואבים.

    לא מצאתי IDE מספיק טוב, ואני עובד עם ECLIPSE אבל עדיין זה לא זה.

    צעד רציני אחורה!

    • מאת זהר ארד:

      רם, כנראה שאתה ויואכים משתמשים בשפה הלא נכונה או מצפים ממנה למה שהיא לא.
      יש את WebStorm שהוא IDE מצויין אם חסר לך.

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

  8. מאת עוזי:

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

    ג'אוהסקריפט היא שפה מונחת עצמים לכ דבר. אין בה ירוש קלאסית (מלשון class) אלא ירושה של Prototype ומומלץ להשתמש בה כשפה מונחת עצמים לכל דבר.

    תכנות "מונחה אירועים" קיים בכל שפה שקולתת נתונים מהמשתמש. אין אפשרות אחרת לרבל קלט מהמשתמש חוץ מ"להקשיב" ללחיצת עכבר. השימוש האסינכרוני מתכוון בעיקר לקריאות XHR כאשר לא ידוע מתי תגיע התשובה עם בכלל, וממומש ע"י callbacks. הסיבה שזה הכרחי היא כי ג'אוהסקריפט רצה ע thread”" אחד על הדפדפן וכל פעולה סנכרונית בעצם מקפיאה את הדפדפן עד שהיא נגמרת.

    תחביר – JSON הוא לא חלק מהשפה אלא פורמט להעברת מיידע המבוסס על מבנה האובייקט ה קרוי object literals. נכון שכשאתה כותב object literals זה "נראה כמו JSON " אבל כדאי לדייק.

    הדוגמא שנתת עם התנאי if(window['WebSocket' || 'MozWebSocket']){….} מטעה ולא נכונה כי 'WebSocket' || 'MozWebSocket' תמיד יחזיר 'WebSocket' שהוא לא "שקרי". ולכן התנאי שם מיותר ולא במקום.

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

    • מאת זהר ארד:

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

      תכנות מונחה אירועים ו XHR הם שני דברים נפרדים. העבודה האסינכרונית והשימוש ב callbacks, שמתחייבת כאשר עובדים עם אירועים היא הנקודה שאני מנסה להדגיש, בלי קשר למקור והסיבה לכך. אפשר לעבוד בצורה מונחת אירועים גם מחוץ ל XHR .

      JSON – תודה על התיקון

      הדוגמה עם WS היא דוגמת תחביר, אכן יש שם שגיאה לוגית, אבל היא רק אמורה להמחיש נקודה. תודה על ההערה

    • מאת oren:

      היי עוזי.
      "רשמת שאין אפשרות אחרת לקבל קלט מהמשתמש חוץ מ"להקשיב" ללחיצת עכבר. " – אמירה זו אינה נכונה חלקית:
      אתה יכול לקבל קלט מהמשתמש (בצד שרת) ע"י שליחת טופס (SUBMIT) בסיסי.
      גירסאות מתקדמות של דפדפנים ברמת A GRADE, מתחילים לממש multi thread, ולמעשה אחד המימושים שכבר ניתן להשתמש בהם בדפדפנים אילו הם: WebWorker (http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html).

  9. מאת עוזי:

    אורן, WebWorkers אכן קיימים בדפדפנים מודרניים, אך לצערנו לפחות חצי מהגולשים משתמשים בדפדפנים שאינם מודרניים, לכן, גם אתה בוחר לעבוד עם workers אתה חייב לממש את האפשרות שלא סומכת אליהם.
    התכוונתי לומר שהדרך היחידה "לתפוס" קלט מהמשתמש בצד לקוח הוא "להקשיב" לאירוע.

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

    אם אתה באמת רוצה לכתוב על פלאי השפה ופלאי תכנות מוחה אירועים, במערכות MVC כמו Backbone.js הכל מונחה אירועים וכשאתה מתחיל לעשות BIND של מודל ל VIEWS שונים, אתה יכול לחולל נסים ונפלאות, אבל זה כבר באמת לפוסט אחר (שאשמח אם תכתוב אותו).

    • מאת oren:

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

    • מאת זהר ארד:

      עוזי, אתה מתעכב על קטנות וקורא את הכתבה וההערות שלי מחוץ להקשר. תקרא שוב את הכתבה. אני לא אומר ש JS היא לא מונחת עצמים אלא שיש לה מודע עצמים שונה. אני לא אומר בתגובה ש XHR אינו אסינכרוני אלא שהוא דוגמה אחת ולא בהכרח הדוגמה היחידה או הכי רלבנטית.

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

הרשם לאתר

רק גיקים יכולים ליצור דיון חדש! כדי להפוך לגיק מדופלם, הרשם לאתר.