Java/משתנים

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי

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

מה זה משתנים?[עריכה]

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

אופן השימוש[עריכה]

כאן נעסוק רק בסוגי המשתנים הפשוטים. קיימים סוגים מתקדמים יותר, הנקראים אובייקטים, אותם לא נזכיר כאן. ב-Java, כדי להשתמש במשתנים, יש להקצות להם מקום תחילה - לקבוע את סוגם ולתת להם שם. לדוגמה: int x היא פקודה שמורה למחשב להקצות משתנה מסוג int, כלומר - משתנה המכיל מספר שלם כלשהו, ושמו יהיה x. שם המשתנה משמש אותנו בכל הפעולות בהן נרצה לקרוא לו, כמו למשל System.out.println(x); פקודה שתגרום להדפסת הערך שמכיל כרגע x על המסך.

סוגים בסיסיים[עריכה]

  • int - מספרים שלמים, בעל טווח מוגבל. לדוגמה: 3232
  • char - אותיות. לדוגמה: 'א'
  • String - מחרוזת, רצף של תווים (גם משפטים). לדוגמא: "i learn Java"
  • float - מספרים עם נקודה עשרונית. לדוגמה: 32.24, 1.0, 23232.454
  • boolean - אופרטור בוליאני, כלומר - משתנה המסוגל להכיל "אמת" או "שקר" בלבד
  • long - דומה ל-int, אך בעל טווח גדול הרבה יותר (כ-10 ספרות משמאל לנקודה העשרונית).
  • double - דומה ל-float, אך בעל טווח ודיוק גדולים יותר
  • byte ו-short - שני סוגים שימושיים פחות, הדומים ל-int אך בעלי טווח קטן יותר. מועילים בדרך כלל במצבים בהם יש צורך לחסוך בזיכרון.

הערות[עריכה]

  • סוגים אלה (למעט String) מכונים "primitives", והם אכן מתקדמים פחות מהמשתנים שנכיר בהמשך, הנקראים "אובייקטים". בשלב זה נתעסק רק איתם.
  • יש לשים לב כי ברגע שמגדירים משתנה, Java לא תאפשר לשים בו ערך שאינו מתאים לו, והדבר יגרום לקריסת התוכנית. אם, לדוגמה, נגדיר משתנה מטיפוס int וננסה להכניס אליו את הערך 5.7:

int n=5.7;

נקבל הודעת שגיאה והתוכנית לא תוכל לרוץ או - גרוע יותר - תקרוס בזמן הריצה. ניתן לחילופין לבצע Casting, בצורה זו: int n=(int)5.7;

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

  • משתנה בוליאני, למרות תוכנו המוגבל, הוא שימושי מאוד עבורנו. ב-Java הוא יכול לקבל אך ורק את הערכים "true" או "false" (באותיות קטנות).
  • כאשר מכניסים ערך למשתנה מטיפוס char, יש להקיף אותו בגרש מכל צד, כך: 'a'.

דוגמאות[עריכה]

כדי להגדיר משתנה מסוג int בשם a, נכתוב ;int a כדי להגדיר משתנה מסוג int בשם a, ולהכניס אליו את הערך 5, נכתוב ;int a
;a=5
אך אם נרצה לקצר נוכל לכתוב ;int a=5 כדי להגדיר משתנה מסוג float בשם b, נכתוב ;float b כדי להגדיר כמה משתנים מאותו טיפוס, ניתן לכתוב את כולם בשורה אחת עם פסיקים מפרידים. כך: ;'char a='H', b='E', c='L', d='L', e='O


עכשיו תורכם:

איך מגדירים משתנה בשם Y מסוג long? ואיך מגדירים משתנה בוליאני בשם doYouKnow המקבל את הערך true?

מתן ערך למשתנים[עריכה]

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

תזכורת: כדי שנוכל לבצע פעולה זו חייבים להתקיים שני תנאים: על A להיות מוגדר, ועל B להיות מתאים לסוגו של A (לדוגמה - מספר שלם עם מספר שלם). אם אחד התנאים לא מתקיים - התוכנית לא תרוץ!

חישובים[עריכה]

בדומה להצבת ערך, ניתן להציב במשתנה תוצאת חישוב כלשהי, כמו A=B*C. באותו אופן ניתן לכתוב גם חישובים מורכבים, כמו A=B+(11*5)+C/4, כאשר A, B ו-C הם משתנים מטיפוס float. המהדר מכיר את ארבעת הפעולות הבסיסיות: חיבור (+), חיסור (-), כפל (*), וחילוק (/), וכן את פעולת המודולו - שארית (%). בהמשך נלמד כיצד לבצע פעולות מורכבות יותר.

עכשיו תורכם:

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

משתנה יכול לקבל אפילו את הערך של עצמו. הפקודה X=X היא חוקית לחלוטין (למרות שהיא חסרת תועלת). פקודה דומה מאוד תשמש אותנו אם נרצה להוסיף ערך B למשתנה A כלשהו: A=A+B. שימו לב כי פקודה כמו A+B, שנראית כמו הדרך הטבעית לחבר את A עם B אינה חוקית ואינה מובנת עבור המחשב. קיצור שימושי ומפורסם הוא A++, שעבור המחשב שקול בדיוק ל A=A+1 (ולהפך: A-- יחסיר 1 מ-A). קיצור שימושי מאוד אך מוכר פחות הוא A+=B, השקול ל A=A+B. עם קיצור זה ניתן להשתמש בכל ארבעת פעולות החשבון.

עכשיו תורכם:

כתבו תוכנית המאתחלת משתנה מסוג int, שערכו הראשוני יהיה 100. בלי להיעזר במשתנים נוספים, הוסיפו לו 10, הכפילו אותו ב-4, והדפיסו את התוצאה.

מתן שמות למשתנים[עריכה]

כאשר בוחרים שמות למשתנים, השם חייב להיות חוקי, ורצוי שיהיה הגיוני ומתאים. שם חוקי יכול להכיל אותיות (אנגליות, גדולות או קטנות), ספרות, סימני קו-תחתון (_) וסימני $. השם לא יכול להתחיל בספרה, אבל יכול להתחיל בכל אחד מהסימנים האחרים. כמו כן, השם אינו יכול להכיל סימן שלא הוזכר כאן כמו '^', '%' או '*'. כמו כן, השם לא יכול להיות מילה שמורה של Java. מילה שמורה היא מילה השייכת לאחת הפונקציות הבסיסיות של Java, כמו שמות המשתנים הבסיסיים, המילים public ו-private, המילה new, וכן הלאה.

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

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

דוגמאות[עריכה]

הכרזות חוקיות[עריכה]

;int _a ;char givenLetter ;float divider ;char thisIsAnExtremelyLongButLegalVariableName

הכרזות לא חוקיות[עריכה]

a 7int char given Letter int float double myDouble!


עכשיו תורכם:

מה לא חוקי בכל אחת מהכרזות אלה (בלי להסתכל בפתרונות)?

פתרון[עריכה]

ראשית - בכל ההכרזות חסר נקודה פסיק. בהכרזה הראשונה היה צריך להוסיף שווה וגם להפוך את הסדר כך:

;7=int a

בהכרזה השנייה היה צריך לכתוב כך: ;char givenLetter בהכרזה השלישית ערבבו בין int ל float והיה צריך לכתוב כך: ; float x בהכרזה הרביעית שמו ! ואסור והיה צריך לכתוב כך: ;double myDouble (נקודה פסיק בסוף)

נספח[עריכה]


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