کلاس های داده
Kotlin Data Class
خیلی از مواقع لازم است کلاسی داشته باشیم که صرفاً دادههایی را نگهداری کند. کاتلین برای چنین شرایطی data class را معرفی کرده است. در واقع برای اینکه بتوانید یک کلاس داده ایجاد کنید کافی است کلمه data را قبل از آن بیاورید:
1 | data class Person(val name: String, var age: Int) |
برای این نوع کلاسها، کامپایلر به صورت توابع زیر را ایجاد میکند:
- توابع ()copy و ()equals و ()hashCode و ()toString به صورت خودکار پیادهسازی میشود؛
- تابع ()componentN نیز ساخته میشود.
قبل از بررسی دقیقتر، ابتدا شرایط لازم برای ساخت کلاسهای داده را در کاتلین معرفی کنم:
- سازنده اولیه حداقل باید یک پارامتر داشته باشد؛
- پارامترهای سازنده اولیه باید با علامت val (فقط خواندنی) یا var (خواندنی/نوشتنی) علامت بخورند؛
- کلاسهای داده نمیتواند open, abstract, inner یا sealed باشند؛
- کلاسهای داده میتوانند سایر کلاسها یا اینترفیسها را پیادهسازی کنند. اگر از کاتلین نسخه قبل از ۱٫۱ استفاده میکنید، تنها امکان پیادهسازی اینترفیس وجود دارد.
مثال از Data Class در کاتلین
1 2 3 4 5 6 | 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}") } |
خروجی:
1 2 | name = jack age = 29 |
هنگام تعریف کلاس داده، کامپایلر به صورت خودکار چندین تابع تحت عنوان ()toString(), equals(), hashcode درست میکند. این توابع در کلاس دیده نمیشوند ولی وجود دارند. این کار باعث خوانایی کد نیز میشود. اگر تا الان از جاوا استفاده کرده باشید، چنین کاری مستلزم کدنویسی اضافه است. بیایید نگاهی به هر یک از توابع فوق و کاربردشان بیندازیم:
Copying
با کمک تابع ()copy به راحتی میتوانید کپی برابر اصلی از یک شی ایجاد کنید.
متد ()toString
این متد، یک فرم متنی از شی را به کاربر نشان میدهد.
()equals و ()hashCode
متد ()hashCode کد هش یک object را برمیگرداند. اگر دو آبجکت از هر حیث یکسان باشند، این متد مقدار عددی یکسانی را برمیگرداند. متد ()equals اگر دو شی یکسان باشند (یعنی اگر ()hashCode یکسانی داشته باشند) مقدار true و در غیراینصورت مقدار false را برمیگرداند.
Kotlin Data Class Kotlin Data Class Kotlin Data Class Kotlin Data Class Kotlin Data Class Kotlin Data Class Kotlin Data Class