بوت کمپ Kotlin برای برنامه نویسان اندروید درس چهار: یک کلاس داده‌ای بسازید

۹. یک کلاس داده ای بسازیدکلاس داده‌ای مانند یک struct در سایر زبان هاست - فقط برای این وجود دارد که چند داده نگهداری کند - اما یک شیِ‌کلاس‌داده‌ای همچنان یک شی است. شی‌های کلاس داده‌ای کاتلین فواید دیگری هم دارند، مانند ابزارهایی برای چاپ و کپی کردن. در این تکلیف شما یک کلاس داده‌ای ساده می سازید و درباره پشتیبانی کاتلین از کلاس های داده ای می‌آموزید.گام ۱: یک کلاس داده ای بسازید۱. یک بسته جدید به نام decor زیر بسته example.myapp برای نگه داشتن کد جدید بسازید. روی example.myapp در پنل Project راست کلیک کنید و مسیر File > New > Package را انتخاب کنید.۲. داخل بسته یک کلاس جدید به نام Decoration بسازید.package example.myapp.decor class Decoration { }۳. برای ساختن یک کلاس داده ای از Decoration کلمه کلیدی data را پیشوند کلاس قرار دهید.۴. برای ارائه دادنِ داده به کلاس یک خصوصیت رشته‌ای به نام rocks به آن اضافه کنید.data class Decoration(val rocks: String) { }۵. داخل فایل، خارج از کلاس یک تابع ()makeDecorations برای ساختن و چاپ کردن یک نمونه از Decoration با "granite" اضافه کنید.fun makeDecorations() { val decoration1 = Decoration(&quotgranite&quot) println(decoration1) }۵. یک تابع ()main برای صدا زدن ()makeDecorations و اجرا کردن برنامه اضافه کنید. به خروجی مخصوصی که توسط کلاس داده‌ای ساخته شده توجه کنید.⇒ Decoration(rocks=granite)۶. داخل ()makeDecorations، دو شی Decoration دیگر که هر دو تخته سنگ (slate) هستند معرفی کنید و آن‌ها را چاپ کنید.fun makeDecorations() { val decoration1 = Decoration(&quotgranite&quot) println(decoration1) val decoration2 = Decoration(&quotslate&quot) println(decoration2) val decoration3 = Decoration(&quotslate&quot) println(decoration3) }۷. داخل ()makeDecorations، یک عبارت چاپ برای چاپ کردن نتیجه مقایسه decoration1 با decoration2 و یک عبارت دیگر برای مقایسه decoration3 با decoration2 اضافه کنید. از متد ()equals که توسط کلاس‌های داده ای ارائه شده است استفاده کنید. println (decoration1.equals(decoration2)) println (decoration3.equals(decoration2))۸. کد را اجرا کنید.⇒ Decoration(rocks=granite) Decoration(rocks=slate) Decoration(rocks=slate) false trueشما می توانستید از == برای امتحان کردن مساوی بودن d1 == d2 و d3 == d2 استفاده کنید. در کاتلین استفاده از == روی شی‌های کلاس‌داده‌ای مانند استفاده از ()equals است. اگر نیاز دارید تا مراجعه دو متغیر به یک شی را امتحان کنید (برابری ارجاع) از عملگر === استفاده کنید. درباره مساوی بودن در کاتلین داخل مستندات بیشتر بخوانید.با اینکه آنها مانند استراکت در زبان‌های دیگر هستند به یاد داشته باشید که کلاس داده‌ای شی هستند. اختصاص دادن یک شی کلاس داده‌ای به یک متغیر دیگر ارجاع به آن شی را کپی می کند، نه محتوای آن را. برای کپی کردن محتوای کلاس داده‌ای به یک شی جدید از متد ()copy استفاده کنید.متد ()copy و ()equals، و ابزارهای دیگر کلاس داده‌ای فقط به خصوصیات تعریف شده در سازنده اصلی رجوع می‌کنند.گام ۲: استفاده از تخریب ساختار (destructuring)برای گرفتن خصوصیات یک شی داده و اختصاص دادن آنها به متغیرها، شما می توانستید آنها را یکباره اختصاص دهید، مثل این:val rock = decoration.rock val wood = decoration.wood val diver = decoration.diverبه جای این، شما می توانید متغیر بسازید، یکی برای هر خصوصیت، و شیء داده را به گروهی از متغیرها اختصاص دهید. کاتلین مقدار خصوصیت را داخل هر متغیر قرار می دهد.val (rock, wood, diver) = decorationبه این تخریب ساختار (destructuring) گفته می‌شود که یک راه کوتاه کاربردی است. تعداد متغیر ها باید با تعداد خصوصیات همخوانی داشته باشد، و متغیر ها به ترتیبی که داخل کلاس تعریف شده‌اند اختصاص می‌یابند. این یک مثال کامل است که می‌توانید در Decoration.kt امتحان کنید.// Here is a data class with 3 properties. data class Decoration2(val rocks: String, val wood: String, val diver: String){ } fun makeDecorations() { val d5 = Decoration2(&quotcrystal&quot, &quotwood&quot, &quotdiver&quot) println(d5) // Assign all properties to variables. val (rock, wood, diver) = d5 println(rock) println(wood) println(diver) }⇒ Decoration2(rocks=crystal, wood=wood, diver=diver) crystal wood diverاگر به تعدادی از خصوصیات نیاز ندارید، می توانید با استفاده از _ به جای نام متغیر از آنها گذر کنید، مانند کدی که در پایین نشان داده شده است. val (rock, _, diver) = d5بخش قبل | فهرست درس | بخش بعد