4 minute read

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

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

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

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

תגובה של שורה אחת (single-line comment)

תגובה של שורה אחת מתחילה בשני סלאשים רצופים (//) ונמשך עד ירידת השורה הבאה:

System.out.println(1+1); // single line comment, ends on line break.
System.out.println(1+2);

שימו לב שיש שני סוגי סלאש - כאן מדובר בסלאש הזה - /. הוא נקרא גם סלאש קדמי (forward slash), להבדיל מסלאש אחורי (\ - backward slash). ברוב המקלדות, כאשר המקלדת על אנגלית, מקש הסלאש הקדמי / נמצא על אותו מקש שבו בעברית נמצאת הנקודה (.). למי שסקרנית לגבי הסלאש האחורי (הוא משמש לדברים אחרים), המקש שלו לרוב נמצא ליד או מעל מקש ה-Enter. בנוסף, אם מקישים על המקש הזה בזמן שה-Shift לחוץ, זה מקליד את התו |, שלא רלוונטי כאן, אבל יהיה שימושי בהמשך.

תגובה מרובת שורות (multi-line comment)

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

תגובה מרובת שורות מתחילה ב-/* (סלאש ואז כוכבית) ומסתיימת ב-*/ (כוכבית ואז סלאש). עד עד ה-*/ הסוגר, התגובה ממשיכה גם אם יש ירידות שורה:

System.out.println(3 * 3); /* this is
a multi line
comment */ System.out.println(4 * 9);

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

טכנית, תגובה שמתחילה ב-/* (סלאש ואז כוכבית) ונגמרת ב-*/ (כוכבית ואז סלאש) יכולה להתחיל ולהיגמר באותה שורה, וטכנית גם זו multi-line comment (תגובה מרובת שורות) מבחינת השם שלה. הנה דוגמה אפשרית (אבל גם היא לא בהכרח פרקטית):

System.out.println("Hello world" /* <- this is the text that will be printed */);

כאן אנחנו רואים שוב את פקודת ההדפסה שמדפיסה “Hello world”, והפעם הוספנו תגובה שהיא טכנית תגובה מרובת-שורות, אבל כזו שמתחילה ונגמרת באותה שורה. שימו לב שאחרי סיום התגובה (*/ - כוכבית ואז סלאש) הקוד הוא שוב קוד Java שהוא חלק ממה שהקומפיילר כן מסתכל עליו - בפרט, הסוגר הסוגר ()) שסוגר את זה שנפתח אחרי המילה println, וסימן הנקודה-פסיק (;) שכל פקודה ב-Java צריכה להסתיים בו.

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

System.out.println("Hello world");

Javadoc

יש תת-קטגוריה של multi-line comment שנקרא Javadoc. הוא מתחיל ב-/** (סלאש ואז שתי כוכביות) ונגמר ב-*/ (כוכבית ואז סלאש) - שימו לב שזה, ממש בהגדרה, תת-קטגוריה של multi-line comment (כלומר עומד בתנאים). יש לזה שימוש מסוים, אבל נגיע אליו בהמשך. כרגע רציתי רק להגיד שזה קיים - אסביר את זה בהמשך.

/**
Javadoc
*/

באיזו שפה לכתוב תגובות

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

נקודות עיקריות

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

Comments