توضیحات و کاربردها
دیتا کلاس (Data Class) ها توسط کاتلین به صورت نیتیو پشتیبانی میشن و برای ذخیره و استفاده از داده ها طی زمان اجرای برنامه مورد استفاده قرار میگیرن.
یکی از نیاز های برنامه، ذخیره ی داده ها و استفاده از آنها طی زمان اجرای برنامه است.
وقتی داده ها رو از پایگاه داده میگیریم باید محلی برای ذخیرهسازی و نگهداری اونا داشته باشیم یا برعکس وقتی بخوایم داده ای رو در پایگاه داده ذخیره کنیم باید از جایی اونا رو بگیریم و به صورت تکی ذخیره کنیم.
معمولا برای این کار برنامه نویس ها کلاس طراحی میکنن که این کلاس ها وظیفه ی نگهداری داده ها رو به عهده داره؛ کاتلین اومده این موضوع کاربردی رو به صورت نیتیو پیادهسازی کرده.
اگه بخوایم صحبت از طراحی کلاس معمولی برای ذخیره ی داده ها کنیم؛ این امر کاملا ممکنه اما کاتلین با نیتیو کردن کلاس های دیتا سعی در بهینه کردن برنامه و سریع تر شدن سرعت کد نویسی رو داشته.
یکی از کاربرد های مهم دیتا کلاس ها ایفا کردن نقش مدل در طراحی الگو است؛ در طراحی الگو های MVC، MVP، MVVM و ... از این کلاس ها به عنوان کلاس مدل میتونیم استفاده کنیم.
فرم کلی دیتا کلاس ها به صورت زیر است:
توجه
هنگامی که از نقش کلاس های داده برای ذخیره ی اطلاعات صحبت می کنیم منظور طی زمان اجرای برنامه و بر روی حافظه ی موقت یعنی RAM است و تا زمانی که برنامه در حال اجراست این کلاس ها داده ها رو در خودشون میتونن نگه دارن و بعد از بسته شدن برنامه از بین میرن.
بررسی ویژگی ها
همینطور که گفتیم کاتلین به صورت نیتیو برای ذخیره، نگهداری و استفاده از داده ها در زمان اجرای برنامه از دیتا کلاس پشتیبانی می کنه.
در ادامه به بررسی ویژگی های این کلاس ها می پردازیم.
لزوم تعریف حداقل یک پراپرتی در کانستراکتور اولیه
هنگام تعریف دیتا کلاس تمام پارامتر های کانستراکتور اولیه باید به صورت پراپرتی تعریف بشن و حداقل باید یک پراپرتی در کانستراکتور اولیه تعریف کنیم.
تابع equals در دیتا کلاس
اگر تمام پراپرتی های کانستراکتور اولیه دو دیتا کلاس باهم برابر باشن دو کلاس باهم برابرند:
تابع hashCode
تابع hashCode در دیتا کلاس ها نیز تحت تاثیر پراپرتی های تعریف شده در کانستراکتور اولیه قرار داره
تابع toString
در دیتا کلاس ها toString به طور پیشفرض به فرم ClassName(t0=value0, t1=value1,..., tn=valueN) نمایش داده میشه؛ ClassName اسم کلاس و t0-tN اسم پراپرتی های تعریف شده در کانستراکتور اولیه هستند.
تابع copy
با تابع کپی میتونیم یک نمونه از دیتا کلاس رو به طور کامل یا در صورت نیاز با تغییر در بعضی از پراپرتی هاش به یک متغیر جدید کپی کنیم:
پراپرتی های تعریف شده در بدنه ی کلاس تاثیری در ویژگی یا عملکرد توابع بالا ندارن.
توجه
دیتا کلاس ها نمیتونن با abstract ، open ، sealed یا inner تعریف بشن!
خلاصه
دیتا کلاس ها توسط کاتلین برای کوتاه تر، سریع تر و بهینه تر کردن کد های برنامه معرفی شدن.
هنگام تعریف دیتا کلاس ها حداقل باید یک پراپرتی در کانستراکتور اولیه تعریف کنیم.
توابع toString ، hashCode و copy در دیتا کلاس ها تحت تاثیر مستقیم پراپرتی های تعریف شده در کانستراکتور اولیه ی کلاس هستند.
با استفاده از تابع copy در دیتا کلاس ها میتونیم یک نمونه ی جدید از کلاسمون ایجاد کنیم و در صورت نیاز مقادیر بعضی از پراپرتی های تعریف شده در کانستراکتور اولیه رو تغییر بدیم.