מדריך מהיר לשפות JVM

1. הקדמה

מלבד Java, שפות אחרות יכולות לפעול במכונה הווירטואלית של Java כמו Scala, Kotlin, Groovy, Clojure.

בחלקים הבאים נבחן ברמה גבוהה את שפות ה- JVM הפופולריות ביותר.

כמובן שנתחיל במבשלה של שפות JVM - Java.

2. ג'אווה

2.1. סקירה כללית

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

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

הוראות קוד ה- Java bytecode אנלוגיות לקוד המחשב, אך הן מתפרשות על ידי מכונת Java Virtual Java (JVM) הספציפית למערכת ההפעלה המארחת ולשילוב החומרה.

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

בואו נסתכל במהירות על כמה מהתכונות העיקריות של Java:

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

2.2. דוגמאות

בואו נראה איך פשוט "שלום עולם!" דוגמה נראית כמו:

מחלקה ציבורית HelloWorld {public public static void main (String [] args) {System.out.println ("שלום, עולם!"); }}

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

הַבָּא, נשתמש ב- ג'אוואק פקודה ליצור קוד bytecode שניתן לבצע ב- JVM:

javac HelloWorld.java

סוף כל סוף, ה ג'אווה הפקודה מבצעת את ה- bytecode שנוצר ב- JVM:

java HelloWorld

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

3. סקאלה

3.1. סקירה כללית

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

מקור השפה בשנת 2004 אך הפך פופולרי יותר בשנים האחרונות.

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

כמה מאפיינים חשובים של Scala הם:

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

3.2. דוגמאות

ראשית, בואו נסתכל על אותו "שלום עולם!" דוגמה כמו בעבר, הפעם בסקאלה:

אובייקט HelloWorld {def main (טוען: Array [String]): Unit = println ("שלום, עולם!")}

בדוגמה זו, יצרנו אובייקט סינגלטון בשם שלום עולם וה רָאשִׁי שיטה.

לאחר מכן, כדי להרכיב זאת, נוכל להשתמש סקלק:

scalac HelloWorld.scala

ה סקאלה הפקודה מבצעת את ה- bytecode שנוצר ב- JVM:

סקאלה HelloWorld

4. קוטלין

4.1. סקירה כללית

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

המוקד העיקרי בעת פיתוח קוטלין היה יכולת פעולה הדדית של Java, בטיחות (טיפול בחריגים), תמציתיות ותמיכה טובה יותר בכלים.

מאז שחרורו של Android Studio 3.0, Kotlin היא שפת תכנות נתמכת במלואה על ידי גוגל בפלטפורמת Android. זה נכלל גם בחבילת Android Studio IDE כחלופה למהדר Java הרגיל.

כמה תכונות חשובות של קוטלין:

  • מונחה עצמים + פונקציונלית
  • הוקלד באופן סטטי חזק
  • תַמצִיתִי
  • יכולת פעולה הדדית עם Java

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

4.2. דוגמאות

בואו נראה את "שלום עולם!" דוגמה בקוטלין:

main main (טענות: Array) {println ("שלום עולם!")}

אנו יכולים לכתוב את הקוד לעיל בקובץ חדש בשם helloWorld.kt.

לאחר מכן, נשתמש ב- קוטלינק פקודה להרכיב זאת ומייצר bytecode שניתן לבצע ב- JVM:

kotlinc helloWorld.kt -include-runtime -d helloWorld.jar

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

אז ה ג'אווה הפקודה מבצעת את ה- bytecode שנוצר ב- JVM:

java -jar helloWorld.jar

בואו ונראה דוגמה נוספת להדפסת רשימת פריטים באמצעות a ל לוּלָאָה:

main main (טענות: Array) {פריטים val = listOf (1, 2, 3, 4) עבור (i בפריטים) println (i)}

5. גרובי

5.1. סקירה כללית

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

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

בואו נדגיש כמה תכונות חשובות:

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

5.2. דוגמאות

ראשית, בואו נראה את "שלום, עולם!" דוגמה בגרובי:

println ("שלום עולם")

כתבנו את הקוד הנ"ל בקובץ חדש בשם HelloWorld.groovy. עַכשָׁיו אנו יכולים להריץ את הקוד הזה בשתי דרכים: על ידי קומפילציה ואז ביצוע או על ידי פשוט הפעלת קוד לא מהול.

אנחנו יכולים לקמפל א .קִצבִּי קובץ באמצעות groovyc פקודה כדלקמן:

groovyc HelloWorld.groovy

ואז נשתמש ב- ג'אווה פקודה לביצוע הקוד הגרובי:

java -cp \ embeddable \ groovy-all-.jar ;. שלום עולם

לדוגמה, הפקודה לעיל יכולה להיראות כך:

java -cp C: \ utils \ groovy-1.8.1 \ embeddable \ groovy-all-1.8.1.jar ;. שלום עולם

בואו נראה גם כיצד אנו יכולים להשתמש ב- קִצבִּי פקודה לבצע את .קִצבִּי קובץ ללא הידור:

HelloWorld.groovy גרובי

לסיום, הנה דוגמה נוספת להדפסת רשימת פריטים עם האינדקס:

list = [1, 2, 3, 4, 5, 6, 7, 8, 9] list.eachWithIndex {it, i -> println "$ i: $ it"}

עיין בדוגמאות גרוביות נוספות במאמר ההקדמה שלנו.

6. Clojure

6.1. סקירה כללית

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

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

כמה תכונות חשובות של Clojure:

  • פוּנקצִיוֹנָלִי
  • הקלדה - דינמית, חזקה, החלה לאחרונה לתמוך בהקלדה הדרגתית
  • מיועד למקביליות
  • פולימורפיזם זמן ריצה

6.2. דוגמאות

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

נשתמש בכלי ליינינגן להפעלת הדוגמה שלנו.

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

לין עולם שלום חדש

הפרויקט ייווצר עם מבנה הקבצים הבא:

./project.clj ./src ./src/hello-world ./src/hello-world/core.clj

עכשיו אנחנו צריכים לעדכן את ./project.ctj קובץ עם התוכן הבא להגדרת קובץ המקור הראשי:

(defproject hello-world "0.1.0-SNAPSHOT": שלום-world.core ראשי: תלות [[org.clojure / clojure "1.5.1"]])

עכשיו אנו עומדים לעדכן את הקוד שלנו להדפסת "שלום עולם!" בתוך ה ./src/hello-world/core.קובץ clj:

(ns hello-world.core) (defn -main [& args] (println "Hello, World!"))

לבסוף נשתמש ב- lein פקודה לבצע את הקוד לעיל, לאחר המעבר לספריית הבסיס של הפרויקט:

תקליטור שלום שלום עולם רץ

7. שפות JVM אחרות

7.1. ג'יתון

ג'יתון הוא יישום פלטפורמת Java של Python הפועל ב- JVM.

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

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

בואו נראה מהיר "שלום עולם!" דוגמא:

להדפיס "שלום עולם!"

7.2. ג'ובי

JRuby היא יישום של שפת התכנות Ruby להפעלה במכונה הווירטואלית של Java.

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

בואו נדפיס "שלום עולם!" ב- JRuby:

דרוש "java" stringHello = "שלום עולם" מציב "# {stringHello.to_s}"

8. מסקנה

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

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


$config[zx-auto] not found$config[zx-overlay] not found