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

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

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

در این درس از مجوعه آموزش برنامه نویسی سایت سورس باران، با کلاس Sealed در برنامه نویسی کاتلین، نحوه ایجاد و زمان استفاده از آنها به کمک مثال آشنا خواهید شد.

کلاس ‌های Sealed زمانی استفاده می شوند که یک مقدار بتواند فقط یکی از انواع مجموعه های محدود را داشته باشد.

قبل از پرداختن به جزئیات مربوط به کلاس ‌های Sealed، بیایید بررسی کنیم که آنها چه مشکلی را حل می کنند.

class Expr
class Const(val value: Int) : Expr
class Sum(val left: Expr, val right: Expr) : Expr

fun eval(e: Expr): Int =
        when (e) {
            is Const -> e.value
            is Sum -> eval(e.right) + eval(e.left)
            else ->
                throw IllegalArgumentException("Unknown expression")
        }

 

در مثال بالا، کلاس مبنا Expr دارای دو کلاس مشتق شده Const (نمایش یک عدد) و sum (نمایش مجموع دو عبارت) دارد. در اینجا استفاده از سایر شاخه ها برای شرط پیش فرض در هنگام بیان اجباری است.

اکنون، اگر یک زیر کلاس جدید از کلاس Expr استخراج کنید ، کامپایلر هیچ چیزی را شناسایی نمی کند زیرا شاخه دیگری آن را کنترل می کند که می تواند منجر به اشکال شود. بهتر بود که کامپایلر هنگام اضافه کردن یک زیر کلاس جدید خطا ایجاد می شود.

برای حل این مشکل می توانید از کلاس sealed استفاده کنید. همانطور که گفته شد، کلاس Sealed امکان ایجاد کلاس های فرعی را محدود می کند. و  هنگامی که تمام زیر کلاس های یک کلاس Sealed به صورت یک عبارت when باشند، لزومی به استفاده از شاخه else نخواهد بود.

برای ایجاد یک کلاس sealed، از مادیفایر sealed استفاده می شود. به عنوان مثال؛

sealed class Expr

 

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

در اینجا نحوه حل مسئله فوق با استفاده از کلاس sealed در کاتلین آورده شده است:

sealed class Expr
class Const(val value: Int) : Expr()
class Sum(val left: Expr, val right: Expr) : Expr()
object NotANumber : Expr()


fun eval(e: Expr): Int =
        when (e) {
            is Const -> e.value
            is Sum -> eval(e.right) + eval(e.left)
            NotANumber -> java.lang.Double.NaN
        }

 

همانطور که می بینید، هیچ شاخه دیگری وجود ندارد. اگر یک زیر کلاس جدید از کلاس Expr اشتقاق  کنید، کامپایلر خطا می دهد مگر اینکه زیر کلاس در عبارت when انجام شود.

 

چند نکته مهم

  • تمام زیر کلاس های یک کلاس sealed باید در همان پرونده ای که کلاس sealed اعلان می شود ، اعلان شوند.
  • یک کلاس sealed به خودی خود مجرد است و شما نمی توانید وهله‌هایی از شیء از روی آن بسازید.
  • شما نمی توانید سازنده های غیر خصوصی یک کلاس sealed ایجاد کنید. سازندگان آنها به طور پیش فرض خصوصی هستند.

 

تفاوت بین Enum و کلاس Sealed

کلاس Enum و کلاس sealed کاملاً شبیه به هم هستند. مجموعه مقادیر برای یک نوع enum نیز مانند یک کلاس sealed محدود می شود.

تنها تفاوت این است که، enum می تواند فقط یک وهله منفرد داشته باشد، در حالی که یک زیر کلاس از یک کلاس sealed می تواند چندین وهله داشته باشد.

 

منبع.

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

  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. کلاس‌ های تودرتو و داخلی در برنامه نویسی کاتلین
  26. کلاس داده در برنامه نویسی کاتلین 
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه