האם 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 באינטרנט, עם למעלה מ-130 מיליון משתמשים ב-190 מדינות. אנחנו ב-Wix Engineering מפתחים אפליקציות ענן מהמתקדמות בעולם, מקדישים זמן להתפתחות מקצועית ולמידה ולוקחים גם את ההנאה שלנו באותה הרצינות. תרבות הפיתוח שלנו מבוססת על חדשנות, יצירתיות ועל הצורך והרצון להמשיך לאתגר את עצמנו ואת גבולות הטכנולוגיה. אנו משתמשים בטכנולוגיות המתקדמות ביותר (Scala, Node, React, and Angular), בפלטפורמות מבוססות ענן (Google, Amazon and Azure) ומיישמים מתודולוגיות כגון Continuous Delivery ו-TDD. ל-Wix, שני מרכזי פיתוח בישראל - בתל-אביב ובבאר-שבע. מוזמנים לעקוב אחרינו גם ב-Twitter וב-Facebook.

כתב אורח

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

הגב

9 תגובות על "האם Java8 באמת מבטלת את הצורך בסקאלה?"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 

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

סידור לפי:   חדש | ישן | הכי מדורגים
גלעד
Guest

הם יודעים שכבר יש Java 9 ?

מתן
Guest

ואיזה חידושים גרנדיוזיים ב-Java 9 אמורים בדיוק להיות רלוונטיים לנושא הזה…?

לינוקס
Guest

בקלוז’ר זה לא היה קורה

סקילצ׳י
Guest

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

אני רק אניח את זה פה.
Guest
אני רק אניח את זה פה.

שים דאודורנט.. נודף ממך ריח של פלוץ.

משה
Guest
ייתכן שהדובר יודע סקאלה ברמה טובה – אך ניכר שלא כך הדבר בכל הנוגע לג’אווה. הוויכוח בין ג’אווה לסקאלה לא חדש כלל, וכשסקאלה יצאה דובר רבות על איך היא תכבוש בסערה את השוק ותזרוק את ג’אווה מראש הטבלה (רמז – זה ממש לא קרה ולפי המגמה זה גם לא הולך לקרות בקרוב). לעניין ההשוואה שבוצעה, הייתי מצפה ליותר איזון כשמציגים השוואה – כלל ראשון הוא להציג גם את החסרונות מול היתרונות (לדוגמא: בעיות backward compatibility, זמן קימפול ארוך מאוד, קהילת מפתחים קטנה משמעותית – וזוהי רשימה חלקית בלבד). 1) ההצגה של פיצ’רים של סקאלה אשר לא קיימים או קיימים חלקית… Read more »
משתמש אובונטו
Guest

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

תומר גבל
Guest
שלום משה ותודה על התגובה המושקעת! רציתי להתייחס לכמה מהנקודות שהעלית, בראש ובראשונה לכך שהשוואה אינה מאוזנת: אתה צודק לחלוטין, אבל זו לא הייתה המטרה (בחרתי להתמקד נקודתית בהבדלים בשפה עצמה). בהרצאות כלליות יותר על סקאלה אני מתייחס לנקודות האלה בצורה הרבה יותר מסודרת ושקולה. אתה גם צודק לחלוטין של-Wix ומפתחיה יש עניין מובנה וסקאלה ואינטרס לקדם אותה, אבל זה לא אומר שאנחנו אחידים בדעתנו או פוסלים אלטרנטיבות ראויות (בראש ובראשונה Kotlin). הרשה לי לחלוק עליך על הטענה ש״ככה לא כותבים לוגים״ – הרוב המוחלט של הקוד בג׳אוה, כולל היום וכולל כזה נשכתב מעל log4j 2.0, נראה בדיוק ככה. למעשה,… Read more »
משה
Guest
ראשית מודה לך על הכנות שהבעת – שההשוואה שהוצגה אכן אינה מאוזנת. אבל למה בעצם? האם המטרה היא לעוות מציאות והראות תמונת שחור-לבן ו”להלבין” (תרתי משמע) צד מסוים – כשאתה יודע שלא כל מי שרואה את הוידאו בקיא בהבדלים…? לצערי זה מזכיר לי פעילות של מיסיונרים – האם אתה מיסיונר של סקאלה? לגבי הלוגים אני יכול להרחיב (יקח לי קצת יותר מכמה פסקאות כדי להסביר את הכוונה) אבל לא ענית לשאלה המקורית : “שורה תחתונה לגבי הלוגים – מה באמת* הרווחנו מול ג’אווה 8?” נתפסת למשהו שאתה רואה אותו (והצגת אותו) “כבעיה אמיתית”. אגב, אם תבדוק קצת יותר לעומק –… Read more »
wpDiscuz

תגיות לכתבה: