שיעורים מוטבעים בקוטלין

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

ב- Kotlin 1.3+ יש לנו סוג חדש של ניסוי, שנקרא class inline. במדריך זה נתמקד בשימוש בשיעורים מוטבעים וגם בחלק מהמגבלות שלהם.

2. התקנה

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

כדי למנוע אזהרה זו, אנו יכולים להוסיף את אפשרות המהדר הבאה של Maven לתצורה שלנו:

  -XXLanguage: + InlineClasses 

3. מהן שיעורים מוטבעים?

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

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

בואו נראה דוגמה לשיעור מוטבע שנקרא InlinedCircleRadius עם מאפיין מסוג לְהַכפִּיל המייצג את הרדיוס:

val circleRadius = InlinedCircleRadius (5.5)

עבור JVM, הקוד שלנו הוא למעשה רק:

val מעגל רדיוס = 5.5

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

3.1. דוגמא לשימוש

עכשיו, כשאנחנו יודעים מה זה שיעורים מוטבעים, נדון בשימוש בהם.

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

לכן, על מנת לקבל הגדרה נכונה, נוכל להשתמש בשורת קוד אחת:

בכיתה מוטבע InlineDoubleWrapper (val doubleValue: Double)

הגדרנו InlineDoubleWrapper כעטיפה פשוטה מעל א לְהַכפִּיל התנגד והחיל את בשורה מילת מפתח אליו. לבסוף, כעת אנו יכולים להשתמש במחלקה זו בקוד שלנו ללא שינויים נוספים:

@Test כיף כאשרInclineClassIsUsed_ThenPropertyIsReadCorrectly () {val piDoubleValue = InlineDoubleWrapper (3.14) assertEquals (3.14, piDoubleValue.doubleValue)}

4. חברי כיתה

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

מחלקה מוטבעת CircleRadius (מעגל Val פרטי Radius: כפול) {Val diameterOfCircle get () = 2 * מעגל אזור רדיוס כיף OffCircle = 3.14 * מעגל Radius * מעגל Radius}

כעת ניצור מבחן עבורנו diameterOfCircle תכונה. זה יצית את שלנו CircleRadius מחלקה מוטבעת ואז התקשר למקום האירוח:

@Test fun givenRadius_ThenDiameterIsCorrectlyCalculated () {rad radius = CircleRadius (5.0) assertEquals (10.0, radius.diameterOfCircle)}

והנה מבחן פשוט עבור ה- areaOfCircle פוּנקצִיָה:

@Test fun givenRadius_ThenAreaIsCorrectlyCalculated () {val radius = CircleRadius (5.0) assertEquals (78.5, radius.areaOfCircle ())}

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

5. ירושה

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

ניתן ממשק ניתן לצייר בשיטה לצייר()אנו מיישמים שיטה זו ב CircleRadius מעמד:

ממשק שרטוט {fun draw ()} מחלקה מוטבעת CircleRadius (מעגל val privateRadius: כפול): Drawable {val diameterOfCircle get () = 2 * circleRadius fun areaOfCircle () = 3.14 * circleRadius * circleRadius לעקוף ציור מהנה () {println ("Draw המעגל שלי ")}}

6. מסקנות

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

כרגיל, ניתן למצוא את כל הדוגמאות והקטעים הללו ב- GitHub.


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