שיעורי נתונים בקוטלין

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

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

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

2. התקנת קוטלין

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

3. שיעורי נתונים בג'אווה

אם היינו רוצים ליצור סרט כניסה ב- Java, נצטרך לכתוב הרבה קוד boilerplate:

סרט בכיתה ציבורית {שם מחרוזת פרטי; אולפן מיתרים פרטי; דירוג צף פרטי; סרט ציבורי (שם מחרוזת, אולפן מיתרים, דירוג צף) {this.name = name; this.studio = סטודיו; this.rating = דירוג; } ציבורי מחרוזת getName () {return name; } set public name ריק (שם מחרוזת) {this.name = שם; } מחרוזת ציבורית getStudio () {חזרה לאולפן; } בטל פומבי setStudio (סטודיו מיתרים) {this.studio = אולפן; } צף לצוף getRating () {דירוג החזרה; } בטל פומבי setRating (דירוג צף) {this.rating = דירוג; } @Override public int hashCode () {final int prime = 31; תוצאה int = 1; תוצאה = ראשית * תוצאה + ((שם == null)? 0: name.hashCode ()); תוצאה = ראשית * תוצאה + Float.floatToIntBits (דירוג); תוצאה = ראשית * תוצאה + ((סטודיו == null)? 0: studio.hashCode ()); תוצאת החזרה; } @ עקוף בוליאני ציבורי שווה (אובייקט אובייקט) {אם (זה == אובייקט) יחזיר אמת; אם (obj == null) להחזיר שקר; אם (getClass ()! = obj.getClass ()) להחזיר שקר; סרט אחר = (סרט) אובייקט; אם (שם == null) {אם (other.name! = null) להחזיר שקר; } אחרת אם (! name.equals (other.name)) מחזירים שקר; אם (Float.floatToIntBits (דירוג)! = Float.floatToIntBits (other.rating)) להחזיר שקר; אם (סטודיו == null) {אם (other.studio! = null) להחזיר שקר; } אחרת אם (! studio.equals (other.studio)) מחזירים שקר; לחזור אמיתי; } @ עקירה ציבורית מחרוזת toString () {return "Movie [name =" + name + ", studio =" + studio + ", rating =" + rating + "]"; }}

86 שורות קוד. זה הרבה כדי לאחסן רק שלושה שדות בכיתה פשוטה.

4. מחלקת נתונים של קוטלין

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

מחלקת נתונים סרט (שם שם: מחרוזת, סטודיו var: מחרוזת, דירוג משתנה: Float)

כפי שאנו רואים, זה הרבה יותר קל ונקי. בַּנַאִי, toString (), שווה ל- (), hashCode (), ותוספת עותק() ו רכיב N () פונקציות נוצרות באופן אוטומטי.

4.1. נוֹהָג

מחלקת נתונים מופעלת באותו אופן כמו מחלקות אחרות:

val movie = Movie ("צליפת שוט", "תמונות סוני", 8.5F)

כעת, המאפיינים והפונקציות זמינים:

println (movie.name) // צליפת שוט println (movie.studio) // Sony Pictures println (movie.rating) //8.5 movie.rating = 9F println (movie.toString ()) // Movie (name = Whiplash, studio = Sony Pictures, דירוג = 9.0)

4.2. פונקציית העתקה

ה עותק() הפונקציה נוצרת, במקרה שנצטרך להעתיק אובייקט שמשנה חלק מתכונותיו אך שומר על השאר ללא שינוי.

val betterRating = movie.copy (rating = 9.5F) println (betterRating.toString ()) // Movie (name = Whiplash, studio = Sony Pictures, rating = 9.5) 

ג'אווה אינה מספקת דרך ברורה ומקורית להעתקה / שיבוט של אובייקטים. נוכל להשתמש ב- משובט מִמְשָׁק, SerializationUtils.clone () או א בונה שיבוט.

4.3. הצהרות הרס

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

movie.component1 () // שם movie.component2 () // studio movie.component3 () // דירוג

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

val (שם, אולפן, דירוג) = סרט כיף getMovieInfo () = סרט val (namef, studiof, ratingf) = getMovieInfo ()

4.4. דרישות מחלקת נתונים

על מנת ליצור מחלקת נתונים, עלינו לעמוד בדרישות הבאות:

  • לבנאי הראשי צריך להיות לפחות פרמטר אחד
  • יש לסמן את כל הפרמטרים של הבנאי הראשי val אוֹ var
  • שיעורי נתונים אינם יכולים להיות מופשטים, פתוחים, אטומים או פנימיים
  • (לפני 1.1.) שיעורי נתונים רשאים ליישם ממשקים בלבד

מאז 1.1, שיעורי נתונים עשויים להרחיב שיעורים אחרים.

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

מחלקת נתונים סרט (שם var: String = "", var studio: String = "", דירוג var: Float = 0F)

5. מסקנה

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

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

היישום המלא של דוגמאות אלה ניתן למצוא בפרויקט GitHub שלנו.


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