מחילת הארנב - היכרות עם JavaScript Destructuring

כמפתחי Front End אנחנו נדרשים לעמוד בקצב המשוגע של השנים האחרונות. JavaScript מתפוצצת מחידושים מכל הכיוונים: הסטנדרט עצמו קיבל בוסט ב 3 שנים האחרונות מאז שוחררה ECMAScript 2015 או בשמה הסקסי es6 (והמהדרין ירשמו 6ES), כששנים לפני כן נוצרו מלאנתלפים ספריות וסביבות עבודה כמו פיטריות אחרי הגשם, כשהפיטריה הגדולה שבהן היא כמובן Nodejs הגאונית, עליה יושב הזחל-מלך, מעלה עשן מהנרגילה בטעם npm. והעשן הזה ממלא כמעט את כל החלל בממלכת JavaScript, בואכה es9.

אתמול היה יום קשוח במשרד. מיכאל, הר"צ התותח שלי (אני מכנה אותו יוסיין… כי הוא ר"צ… לא משנה) השפריץ קוד כאילו אין מחר כדי להספיק פיצ'ר נחמד לקראת הסופ"ש שהלקוח ביקש כבר לפני חודש, אבל כמו תמיד זה נדחה כי יש דברים אחרים בקנה.

היום אני לא מפתח שומדבר, אלא מתרכז בלבצע סוג של code review ולהריץ sanity checks כשלב ראשון.

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

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

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

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

ניגש אלי איש קטן ואמר: "ברוך הבא לתמ"א-38! בדיוק מתחיל הסיור"

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

פה חשדתי! אמא אמרה לי לא לקחת טרמפים עם אנשים קטנים ומוזרים, אבל הוא החזיק ספל קפה ביד, אז אם את קוראת את זה אמא'לה שלי – לעזאזל עם החוקים האלה, חיים פעם אחת!

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

כולי מרוכז (ביד שלו) שאלתי את השאלה המתבקשת: האם אפשר את הקפה.

התזזית העביר לי את הספל והמשיך: "בא נגיד שאתה צריך להתעסק עם 3 התכונות שלו"

(מחשבות רצות): "עד כאן לא משהו חדש, די שגרתי. משעמם. תדפדף… יש איזו עוגייה ככה ליד הקפה?!"

"אוה!!" הוא קפץ "מלכתנו הבינה שהגב שלנו נשבר ומעתה מאפשרת לנו לקצר את התהליך. קבל את Object Destructuring"

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

"זה נראה כאילו יצרנו אובייקט חדש בצד שמאל?" שאלתי

 

סטיב ג'ובס

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

"הממ… לא רע" שמתי יד על הסנטר בתנוחת סטיב

 "ואם אני רוצה לשנות את המשתנים כמו בדוגמא הראשונה?"

"נו פרובלמוס" התחכם איתי הגמד

"יותר מזה" המשיך להתלהב הקטן "Destructuring נחשבת בטוחה. אם אתה מנסה לפרק חלק לא קיים פשוט תקבל undefined! זה נקרא Fail Soft. קח דוגמא" 

"ואם אתה ממש רוצה לדעת למה ECMA היא מלכה, אפשר גם לתת ערך ברירת מחדל. לכל משתנה"

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

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

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

"המלכה טיפלה גם בזה נשמה" ירה הטאז

"איזה מגניף!" התמוגגתי, ואז היקשתי "תגיד מיסטר, ביום יום אני מעביר אובייקטים כפרמטרים לפונקציות, יש אפשרות לפירוק גם שם?"

"נו ברור, אצלנו בתמ"א-38 מפרקים המון בפונקציות אצל הקבלן. הנה דוגמא למצב הקודם, ולשימוש ב destructuring כפרמטר"

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

יא! איזו אחלה הפסקה אירגנתי לעצמי.

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

"תשמע" אמר לי האישון " כאן יש גם פינוי בינוי".

צחקנו.

סה"כ כיף בסיור, אין מה להגיד.

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

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

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

הוא הסדיר נשימה ומייד המשיך:

"ועם destructuring החיים דבש"

"רק שים לב לשוני בצורת הפירוק: עם אובייקטים השתמשנו בסוגריים של אובייקט { }, ועם מערכים השימוש בסוגרי מערך [ ]. קונוטציה פשוטה"

"אתה גם יכול לדלג על תאים, וגם כאן לסמוך על מנגנון ה Fail Safe"

"ואם כבר להשוויץ, אז השילוב עם rest operator מעיף רעפים מדי פעם"

"אתה זוכר איך למדת פעם כשהיית תינוק איך מחליפים ערכים בין x ל y בעזרת temp? אז behold!"

"וכמו עם פירוק אובייקטים, גם עם מערכים ניתן לפרק כפרמטרים לפונקציות"

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