חפצים בקוטלין

1. הקדמה

קוטלין לווה רעיונות רבים משפות אחרות; אחד ממבנים כאלה הוא לְהִתְנַגֵד.

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

2. חפצים בקוטלין

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

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

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

אובייקט SimpleSingleton {val answer = 42; fun greet (name: String) = "שלום, $ name!" } assertEquals (42, SimpleSingleton.answer) assertEquals ("שלום עולם!", SimpleSingleton.greet ("עולם"))

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

אובייקט דלפק {ספירת varian פרטי: Int = 0 fun currentCount () = ספירת תוספות כיף () {++ count}} Counter.increment () println (Counter.currentCount ()) println (Counter.count) // זה ייכשל לקמפל

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

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

אובייקט ReverseStringComparator: Comparator {לעקוף כיף להשוות (o1: String, o2: String) = o1.reversed (). CompareTo (o2.reversed ())} val strings = listOf ("Hello", "World") val sortedStrings = strings .sortedWith (ReverseStringComparator)

3. מהו אובייקט נלווה?

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

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

class OuterClass {אובייקט נלווה {// שווה ערך ל"אוביינט נלווה "}}

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

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

class OuterClass {אובייקט נלווה {private val secret = "אתה לא יכול לראות אותי" val public = "אתה יכול לראות אותי"} כיף getSecretValue () = סוד} assertEquals ("אתה יכול לראות אותי", OuterClass.public) assertEquals ( "אתה לא יכול לראות אותי", OuterClass.secret) // אין אפשרות לגשת ל'סודי '

4. שדות סטטיים

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

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

class StaticClass {אובייקט נלווה {@JvmStatic val staticField = 42}}

מבלי לעשות זאת, השדה הסטטי staticField אינו נגיש בקלות מקוד Java.

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

פירוש הדבר שהאמור לעיל מייצר א סטָטִי שיטה getStaticField () על StaticClass מעמד.

5. מסקנה

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

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

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