Kotlin const, var, and val מילות מפתח

1. הקדמה

במדריך זה נהיה המתאר את ההבדלים העיקריים בין קונסט, var, ו val מילות מפתח בשפת קוטלין.

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

2. הבנת הקלדה

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

2.1. הקלדה מניפסטית

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

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

int myVariable = 3;

2.2. הקלדה מוסברת

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

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

3. var

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

בואו נסתכל איך זה עובד:

var myVariable = 1

מאחורי הקלעים, myVariable מאותחל עם Int סוג מידע.

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

var myVariable: Int = 1

משתנים המוצהרים כסוג נתונים אחד ומאתחל אותם עם ערך מהסוג הלא נכון יביאו לשגיאה:

var myVariable: Int = b // שגיאה!

4. val

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

לדוגמה, בקוטלין היינו כותבים:

שם val: מחרוזת = "Baeldung"

ואילו ב- Java היינו כותבים:

שם מחרוזת סופי = "Baeldung";

ממש כמו א סופי משתנה ב- Java, א val יש להקצות למשתנה בקוטלין ערך כפי שהוא מוצהר, או ב- מעמד בַּנַאִי:

כתובת כתובת (val street: String) {val name: String = "Baeldung"}

5. קונסט

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

הכרזה על משתנה קונסט דומה מאוד לשימוש ב- סטָטִי מילת מפתח בג'אווה.

בואו נראה איך להכריז על א קונסט משתנה בקוטלין:

const val WEBSITE_NAME = "Baeldung"

והקוד האנלוגי שנכתב בג'אווה יהיה:

מחרוזת סטטית סופית WEBSITE_NAME = "Baeldung";

5.1. קו פנימי קבוע

נכון לקוטלין 1.1, מהדר קוטלין מדגיש את const val ערכים במיקומים שבהם הם משמשים. לדוגמה, בואו ניקח בחשבון דוגמה פשוטה:

const val VALUE: String = "constant" fun main () {println ("$ VALUE is inlined")}

במבט ראשון, אנו עשויים לחשוב שהמהדר של קוטלין מקבל ערך שדה סטטי ממעמד ואז משרשר אותו עם "מוטבע" טֶקסט. עם זאת, מאז const valאם השורות מונחות, המהדר יעתיק את "קָבוּעַ" מילולית בכל מקום בו ערך משתמשים בקבוע. ההטבעה המתמדת הזו יעילה הרבה יותר מאשר קבלת ערך סטטי ממעמד.

כדי לוודא שהטבעה אכן מתרחשת מתחת למכסה המנוע, נוכל לבדוק את קוד הביצה. ראשית, עלינו לאסוף את קובץ Kotlin באמצעות קוטלינק:

$ kotlinc Main.kt

ואז, באמצעות javap, אנו יכולים להציץ בקוד ה ByTecode שנוצר:

$ javap -c -p -v MainKt // קטום 0: ldc # 16 // קבוע המחרוזת מוטמע 2: astore_0 3: iconst_0 4: istore_1 5: getstatic # 22 // שדה java / lang / System.out: Ljava / io / PrintStream; 8: aload_0 9: invokevirtual # 28 // שיטה java / io / PrintStream.println: (Ljava / lang / Object;) V 12: return

כפי שמוצג לעיל, באינדקס 0, "קָבוּעַ" מילולי מועתק לשרשור. אז אין גטסטטי כדי להביא ערך משדה סטטי בכיתה.

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

6. מסקנה

במאמר זה בדקנו במהירות את ההבדל בין הקלדה המניפסטית לבין ההקלדה.

ואז בדקנו את ההבדל בין זה של קוטלין var,val, ו קונסט מילות מפתח.


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