שיעורים סגורים בקוטלין

1. הקדמה

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

2. מהי מעמד אטום?

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

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

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

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

3. מתי להשתמש בשיעורים אטומים?

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

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

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

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

4. כתיבת שיעורים סגורים

נתחיל בכתיבת מעמד אטום משלנו - הדוגמה הטובה להיררכיה סגורה שכזו היא אופציונאלי מג'אווה 8 - שיכול להיות גם כמה אוֹ אף אחד.

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

ככזה, אנו יכולים ליישם זאת:

מחלקה אטומה אופציונלית {// ... כיף מופשט isPresent (): בוליאני} מחלקת נתונים חלק (ערך ערך: V): אופציונלי () {// ... לעקוף כיף isPresent (): בוליאני = נכון} מחלקה ללא: אופציונלי () {// ... לעקוף כיף isPresent (): בוליאני = שקר}

כעת ניתן להבטיח כי בכל עת שיש לך מופע של אופציונאלי, למעשה יש לך א כמה או אף אחד.

ב- Java 8, היישום בפועל נראה אחרת בגלל היעדר שיעורים סגורים.

לאחר מכן נוכל להשתמש בזה בחישובים שלנו:

val result: Optional = divide (1, 0) println (result.isPresent ()) if (result is Some) {println (result.value)}

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

5. השתמש עם מתי

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

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

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

הודעת val = כאשר (תוצאה) {היא חלק -> "תשובה: $ {תוצאה.ערך}" אינו -> "ללא תוצאה"} println (הודעה)

אם אחד משני הענפים היה חסר, הדבר לא היה מתקבץ ובמקום זאת יביא לשגיאה של:

כאשר הביטוי חייב להיות ממצה, הוסף ענף 'אחר' הכרחי

6. סיכום

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

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


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