کلاس داده در برنامه نویسی کاتلین 

4 سال پیش
کلاس داده در برنامه نویسی کاتلین 

کلاس داده در برنامه نویسی کاتلین 

در این درس ۲۶ از مجموعه آموزش های برنامه نویسی سایت سورس باران، با کلاس داده در برنامه نویسی کاتلین (Data Class) و نحوه ایجاد آن آشنا خواهید شد. همچنین شما در مورد الزاماتی که کلاس داده باید برآورده کند و ویژگیهای استاندارد آن را فرا خواهید گرفت.

ممکن است شرایطی پیش بیاید که شما فقط برای نگهداری داده ها نیاز به ایجاد کلاس داشته باشید. در چنین شرایطی، می توانید کلاس را به عنوان data (داده) علامت گذاری کنید تا یک کلاس داده ایجاد کنید. مثلا،

data class Person(val name: String, var age: Int)

 

برای این کلاس، کامپایلر به طور خودکار موارد زیر را تولید می کند:

  • تابع ()copy، جفت ()equals و ()hashCode و ()toString از سازنده اولیه ایجاد می‌شوند.
  • تابع‌های ()componentN نیز ساخته می‌شوند.

قبل از اینکه به طور مفصل درباره این ویژگی ها صحبت کنیم ، بیایید در مورد الزاماتی که یک کلاس داده باید برآورده کند صحبت کنیم.

 

الزامات کلاس داده در کاتلین

در اینجا شرایط لازم وجود دارد:

سازنده اولیه باید حداقل یک پارامتر داشته باشد.
پارامترهای سازنده اولیه باید به صورت Val (فقط خواندنی) یا Var (خواندن-نوشتن) علامت گذاری شوند.
کلاس نمی تواند  open ،abstract ،inner و یا sealed باشد.
کلاس ممکن است کلاسهای دیگر را گسترش دهد یا اینترفیس ها را پیاده سازی کند. اگر از نسخه قبل از ۱٫۱  کاتلین استفاده می کنید، کلاس فقط می تواند اینترفیس ها را پیاده سازی کند.

 

مثال: کلاس داده در کاتلین

data class User(val name: String, val age: Int)

fun main(args: Array<String>) {
    val jack = User("jack", 29)
    println("name = ${jack.name}")
    println("age = ${jack.age}")
}

 

خروجی کد به شکل زیر می باشد؛

name = jack
age = 29

 

وقتی کلاس داده ای را اعلان می کنید، کامپایلر به طور خودکار چندین تابع مانند ()toString() ،equals() ،hashcode و غیره را در پس‌ زمینه تولید می‌ کند این به شما کمک می کند تا کد را مختصر و منسجم نگه دارید. اگر از جاوا استفاده می کردید، برای انجام این کار باید کدهای زیادی را بنویسید.

بیایید از این توابع استفاده کنیم:

Copying

برای یک کلاس داده، می توانید با استفاده از تابع copy () یک کپی از یک شی با برخی از خصوصیات آن متفاوت ایجاد کنید. نحوه کار آن در اینجا به صورت زیر است:

data class User(val name: String, val age: Int)

fun main(args: Array<String>) {
    val u1 = User("John", 29)
   
    // using copy function to create an object
    val u2 = u1.copy(name = "Randy")

    println("u1: name = ${u1.name}, name = ${u1.age}")
    println("u2: name = ${u2.name}, name = ${u2.age}")
}

 

خروجی کد به شکل زیر می باشد؛

u1: name = John, name = 29
u2: name = Randy, name = 29

 

toString() method

تابع () toString نمایش رشته ای از شی را بازگشت می دهد.

data class User(val name: String, val age: Int)

fun main(args: Array<String>) {
    val u1 = User("John", 29)
    println(u1.toString())
}

 

خروجی کد به شکل زیر می باشد؛

User(name=John, age=29)

 

()hashCode() and equals

متد ()hasCode  کد هش را برای بازگشت یک شی می باشد. اگر دو شی برابر باشند، ()hashCode  نتیجه صحیح یکسانی را ایجاد می کند.

اگر دو جسم برابر باشند متد () hashCode مقدار () true را بازگشت می دهد. اگر اشیا برابر نباشند، متد ()equals مقدار false بازگشت می‌دهد.

data class User(val name: String, val age: Int)

fun main(args: Array<String>) {
    val u1 = User("John", 29)
    val u2 = u1.copy()
    val u3 = u1.copy(name = "Amanda")

    println("u1 hashcode = ${u1.hashCode()}")
    println("u2 hashcode = ${u2.hashCode()}")
    println("u3 hashcode = ${u3.hashCode()}")

    if (u1.equals(u2) == true)
        println("u1 is equal to u2.")
    else
        println("u1 is not equal to u2.")

    if (u1.equals(u3) == true)
        println("u1 is equal to u3.")
    else
        println("u1 is not equal to u3.")
}

 

خروجی کد به شکل زیر می باشد؛

u1 hashcode = 71750738
u2 hashcode = 71750738
u3 hashcode = 771732263
u1 is equal to u2.
u1 is not equal to u3.

تخریب اعلان ‌ها در برنامه نویسی کاتلین

با استفاده از تخریب اعلان ها می توانید یک شی را به تعدادی از متغیرها تبدیل کنید. به عنوان مثال:

data class User(val name: String, val age: Int, val gender: String)

fun main(args: Array<String>) {
    val u1 = User("John", 29, "Male")

    val (name, age, gender) = u1
    println("name = $name")
    println("age = $age")
    println("gender = $gender")
}

 

خروجی کد به شکل زیر می باشد؛

name = John
age = 29
gender = Male

 

این امکان وجود داشت زیرا کامپایلر توابع کامپوننت () را برای کلیه کلاسهای داده ایجاد می کند. مثلا:

به دلیل اینکه کامپایلر همه مشخصه ‌های تابع ‌های ()componentN را برای کلاس داده تولید می‌کند، می توان از این روش استفاده کرد. به مثال زیر توجه کنید:

data class User(val name: String, val age: Int, val gender: String)

fun main(args: Array<String>) {
    val u1 = User("John", 29, "Male")

    println(u1.component1())     // John
    println(u1.component2())     // 29  
    println(u1.component3())     // "Male"
}

 

خروجی کد به شکل زیر می باشد؛

John
۲۹
Male

 

منبع.

لیست جلسات قبل آموزش برنامه نویسی کاتلین

  1. معرفی کاتلین،  Kotlin Hello World – اولین برنامه کاتلین
  2. انواع متغیرهای پایه در کاتلین
  3. عملگرهای برنامه نویسی کاتلین
  4. تبدیل نوع در برنامه نویسی کاتلین
  5. عبارت ها، گزاره ها و بلوک ها در برنامه نویسی کاتلین
  6. کامنت ها در برنامه نویسی کاتلین
  7. ورودی / خروجی پایه در برنامه نویسی کاتلین
  8. عبارت if در برنامه نویسی کاتلین
  9. عبارت when در برنامه نویسی کاتلین
  10. حلقه های while و do … while در برنامه نویسی کاتلین
  11. حلقه for در برنامه نویسی کاتلین
  12. عبارت break در برنامه نویسی کاتلین
  13. عبارت continue در برنامه نویسی کاتلین
  14. توابع در برنامه نویسی کاتلین
  15. فراخوانی تابع میانوندی در برنامه نویسی کاتلین
  16. آرگومان ‌های پیش ‌فرضآرگومان ‌های پیش ‌فرض و نام ‌دار در برنامه نویسی کاتلین
  17. توابع بازگشتی در برنامه نویسی کاتلین
  18. کلاس و شی در برنامه نویسی کاتلین
  19. سازنده ها در برنامه نویسی کاتلین
  20. Getter ها و Setter ها در برنامه نویسی کاتلین
  21. وراثت در برنامه نویسی کاتلین 
  22. مادیفایرهای نمایانی در برنامه نویسی کاتلین
  23. کلاس مجرد در برنامه نویسی کاتلین
  24. اینترفیس های برنامه نویسی کاتلین
  25. کلاس‌ های تودرتو و داخلی در برنامه نویسی کاتلین
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه