משתני נראות בקוטלין

1. הקדמה

שפת התכנות Kotlin בנויה על מכונת ה- Java Virtual Java (JVM). ככזה, עליו לעקוב אחר כל הכללים ש- JVM מטיל - כולל משנים נראות.

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

2. משתני נראות

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

2.1. נראות ציבורית

השינוי הברור ביותר הוא פּוּמְבֵּי. זה אולי הנפוץ ביותר בכל השפה ומשמעותו שאין מגבלות נוספות על מי יכול לראות את האלמנט משתנה.

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

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

לדוגמה:

כיתה ציבורית {val i = 1 fun doSomething () {}} 

מעמד פּוּמְבֵּי נגיש מכל מקום בבסיס הקוד כולו, "ואל אני "ו"כיף עשה משהו()" נגישים מכל מה שיכול לגשת אליו פּוּמְבֵּי.

2.2. נראות פרטית

השינוי האחר שמשמש לרוב הוא פְּרָטִי. יש לזה כמעט את המשמעות ההפוכה בדיוק של פּוּמְבֵּי זה אומר שאף אחד לא יכול לגשת אליו.

במציאות, בקוטלין זה אומר שרק קוד שהוכרז בתוך אותו היקף יכול לגשת אליו. זה שונה בתכלית מג'אווה פשוט מכיוון שקוטלין מאפשר הצהרות מרובות ברמה העליונה באותו קובץ - א פְּרָטִי ניתן לגשת לאלמנט ברמה העליונה על ידי כל השאר באותו קובץ. מלבד זאת הכללים זהים. לדוגמה:

לדוגמה:

כיתה פרטית פרטית {פרטית i = 1 פרטית val doSomething () {}}

מעמד פְּרָטִי נגיש רק מתוך אותו קובץ מקור, "ואל אני "ו"כיף עשה משהו()" נגישים רק מבית הכיתה פְּרָטִי.

2.3. נראות מוגנת

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

בג'אווה, ה- מוּגָן גם מאפשר גישה לאלמנט מכל דבר אחר באותה חבילה. לדוגמה, בהתחשב בקובץ הכיתה הבא:

מחלקה A {מוגן val i = 1}

הקובץ הבא יעבוד מצוין בקוטלין:

מחלקה B: A () {fun getValue (): Int {return i}}

הקובץ הבא יעבוד בג'אווה אך לא יעבוד בקוטלין:

מחלקה C {fun getValue (): Int {val a = A () החזר a.i}}

והדברים הבאים לא יעבדו לא בג'אווה ולא בקוטלין:

מחלקה D {fun getValue (): Int {val a = A () החזר a.i}}

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

2.4. נראות חבילה-פרטית / ברירת מחדל

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

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

2.5. נראות פנימית

קוטלין אכן מוסיף שינוי חדש לאפשרויות שג'אווה אינה תומכת בה כרגע - פְּנִימִי. שינוי זה פירושו שכל קוד המוצהר באותו מודול שאינו מוגבל אחרת יכול לגשת לאלמנט זה. (מודול הוא למעשה קובץ Jar).

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

זה מוסיף יתרון עצום לכתיבת ממשקי API ויישומים. אנו יכולים לכתוב את ממשקי ה- API שלנו כ- פּוּמְבֵּי, היישום העיקרי שלנו כ פּוּמְבֵּי שיעורים וכל קוד התמיכה שהוא תלוי בהם פְּנִימִי. פעולה זו פירושה שקוד חיצוני נאלץ לעבור דרך ה- API ולא יכול לקבל גישה ל- Internals. לדוגמה:

חבילה com.baeldung.modifiers מחלקה פנימית פנימית {} מחלקה ציבורית {פנימית val i = 1 כיף פנימי doSomething () {}}

מעמד פְּנִימִי נגיש רק מתוך אותו מודול. "Val i" ו "כיף לעשות משהו ()" הם נגישים רק מתוך אותו מודול, למרות שניתן לגשת למחלקה שבה הם נמצאים מכל מקום.

3. סיכום

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

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


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