האם Java8 באמת מבטלת את הצורך בסקאלה?
תומר גבל, ארכיטקט מערכת ב-Wix Engineering, מסביר למה 3 יכולות חשובות ב-Scala שמות בכיס את כל השדרוגים של Java8, ואיך הן עושות למפתחים את החיים קלים ופרודוקטיביים יותר
מאת תומר גבל, ארכיטקט מערכת ב-Wix Engineering
כבר כמה שנים שתומר גבל, ארכיטקט מערכת ב-Wix Engineering, כמעט לא כותב קוד ב-Java, אבל כשהוא ממש חייב התוצאה היא יותר עבודה ופחות תפוקה. בהרצאתו מסביר תומר כי הסיבה לכך היא של-Scala יש יכולות שמהוות יתרונות מהותיים על פני רוב השפות המודרניות האחרות, כולל Java8, היעילים ורלוונטיים לעבודה היומיומית של כל מתכנת בכל שפה. תומר אף מעיד כי השימוש ב-Java אחרי שמתרגלים ל-Scala זה כמו ללכת אחורה בזמן.
בהרצאתו מציג תומר את הדרכים השונות שבהן Scala מעניקה למפתחים עולם פונקציונלי עשיר יותר, על ידי ניתוח של שלושה הבדלים עיקריים בין Scala לבין Java8.
Boilerplate Logging מול Trait Logging
תומר מתחיל עם הדגמה שמראה כיצד כתיבת קוד סטנדרטית של Logging ב-Java מחייבת אתכם לכתוב בוילרפלייט וכיצד האלטרנטיבות מייצרות לרוב באגים נוספים, שאפילו קשים יותר לזיהוי. וזה רק קצה הקרחון – הבעיה האמיתית היא המגבלות שג׳אווה יוצרת בהיעדר state וללא אפשרות להגדיר logger instance כחלק מהממשק, וזאת עוד לפני שהגענו לבעיית ה-visibility. במלים אחרות, תומר מבקש להראות כי הקוד הנקי ביותר שניתן להגיע אליו ב-Java8 הוא אמנם שיפור משמעותי מ-Java7, אבל רחוק מאוד מלהיות אידיאלי.
כדי להמחיש שבזכות ה-traits של Scala מדובר כבר בסיפור אחר לגמרי, תומר מדגים כיצד ניתן לכתוב את אותה פונקציונליות פשוטה ונקייה בהרבה. אפשר לכנות את ה-traits גם "Partially implemented interfaces", אבל בהרצאתו טוען שזו התייחסות פשטנית למדי למה שהכלי הזה מסוגל לעשות. עם state ו-visibility modifiers הוא מראה כיצד ניתן להשיג תוצאה פשוטה בהרבה ב-Scala וכן מציג כמה יתרונות על פני ה-logging של Java8.
Pattern Matching
ההבדל השני שתומר מדבר עליו הוא Pattern Matching. לאחר מעבר מהיר על המורכבות והמגבלות של מנגנון ה-switch statement ב-Java8 (הנוקשות של הקוד המובנה והמגבלה על arbitrary expressions הם רק חלק מהבעיות שעולות בהרצאה), עובר תומר להציג את האלטרנטיבה של Scala. ניתן להתייחס ל-pattern matching ב-Scala כמעין הרחבה ל-switch statement, אבל יהיה נכון יותר לחשוב עליהן כעל עולם של פיצ'רים בפני עצמו. בין היתרונות הרבים של הכלי הזה ב-Scala מדגיש תומר את היכולת שלו למנוע טעויות הודות למנגנון ה-exhaustiveness check, ואת האופן שבו הוא עומד בסתירה מוחלטת למנגנון המסורבל של Java8, שמשאיר פתחים רבים כל כך לטעויות כך שניתן יהיה למצוא אותן רק ב-runtime. ההדגמה ממחישה אף יותר כמה קשה לבצע extensibility ללא המנגנונים של Scala.
Implicits – הלחם והחמאה החדשים
ההבדל השלישי והאחרון שתומר מדגים בין שתי השפות הוא serialization. מדובר בלחם והחמאה של כל מפתח תוכנה ב-Java, ובהרצאתו מסביר תומר מדוע ה-JSON serialization מנגנון יוצא מן הכלל – אבל לא בגלל שהוא קל לשימוש או מהיר יחסית, אלא משום שהוא מאפשר את הפונקציונליות הזאת למרות שהוא מבוסס על runtime reflection. אמנם התרגלנו כבר למגבלותיו של המנגנון הזה, אבל Scala מציעה אלטרנטיבה טובה בהרבה. את ההבדל המהותי בין שתי היכולות מדגים תומר ומראה כיצד הקומפילר מטפל בכל מה שצריך בצורה אוטומטית – מורכב המבנה ככל שיהיה – ללא reflective access, מבלי לייצר classes ב-runtime, והכל מראש.
המסקנה? זהירות – ספוילר
בהרצאתו ממחיש תומר כי השימוש ב-Scala יכול להגדיל תפוקה באופן משמעותי. היכולות המוצגות בהרצאה הן רק חלק מהכלים הבסיסיים בשפה הפונקציונלית הזו, ואם רק תקדישו מזמנכם ללמוד אותה תוכלו לראות זאת בעצמכם.

הכתבה בחסות Wix Engineering
Wix היא פלטפורמה לפיתוח Online Presence באינטרנט, עם למעלה מ-160 מיליון משתמשים ב-190 מדינות. אנחנו ב-Wix Engineering מפתחים אפליקציות ענן מהמתקדמות בעולם, מקדישים זמן להתפתחות מקצועית ולמידה ולוקחים גם את ההנאה שלנו באותה הרצינות. תרבות הפיתוח שלנו מבוססת על חדשנות, יצירתיות ועל הצורך והרצון להמשיך לאתגר את עצמנו ואת גבולות הטכנולוגיה. אנו משתמשים בטכנולוגיות המתקדמות ביותר (Scala, Node, React, and Angular), בפלטפורמות מבוססות ענן (Google, Amazon and Azure) ומיישמים מתודולוגיות כגון Continuous Delivery ו-TDD. ל-Wix שלושה מרכזי פיתוח בישראל - בתל-אביב, חיפה ובבאר-שבע. מוזמנים לעקוב אחרינו גם ב-Twitter וב-Facebook.
הגב
9 תגובות על "האם Java8 באמת מבטלת את הצורך בסקאלה?"
* היי, אנחנו אוהבים תגובות!
תיקונים, תגובות קוטלות וכמובן תגובות מפרגנות - בכיף.
חופש הביטוי הוא ערך עליון, אבל לא נוכל להשלים עם תגובות שכוללות הסתה, הוצאת דיבה, תגובות שכוללות מידע המפר את תנאי השימוש של Geektime, תגובות שחורגות מהטעם הטוב ותגובות שהן בניגוד לדין. תגובות כאלו יימחקו מייד.
הם יודעים שכבר יש Java 9 ?
ואיזה חידושים גרנדיוזיים ב-Java 9 אמורים בדיוק להיות רלוונטיים לנושא הזה…?
בקלוז'ר זה לא היה קורה
נראה שסקלה היא שפה כל כך פיוטית או שנאמר טיבעית כמו הרבה שפות שצצות.
מצטער אבל אני אוהב את המורכבות הטכנית והריסון הלא טיבעי של השפות הוותיקות בשוק, אחרת הייתי בוחר במקצוע יותר טבעי , אולי משורר.
הוידאו די מעניין ומוצג בחן רב.
אף פעם לא עפתי על ג׳אווה אבל אם הייתי צריך לבחור בין השתיים הוידאו שיכנע אותי שלי באופן אישי ג׳אווה מדברת בשפה שלי.
נראה שהרבה מהשפות החדשות מדברות בשפה יותר טיבעית ופונקציונלית וכך מושכות קהל רחב יותר שללא ההתפתחויות האלו האפרוריות של המקצוע הייתה מרחיקה הרבה אנשים טובים מהשוק.
סקלה להמונים, אני בעד!!
שים דאודורנט.. נודף ממך ריח של פלוץ.
וואו, אחת התגובות המושקעות והמקצועיות שקראתי. ניכר שהקדשת זמן רציני לכתיבת הדברים.