2 سال پیش / خواندن دقیقه

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

در این بخش از مقاله آموزش کاتلین، به بررسی 4 مادیفایر نمایانی در کاتلین می‌پردازیم و طرز کار آن‌ها را در سناریوهای مختلف بررسی می‌کنیم.

مادیفایرهای نمایانی کلیدواژه‌هایی هستند که نمایانی (دسترس‌پذیری) کلاس‌ها، شیء‌ها، اینترفیس‌ها، سازه‌ها، تابع‌ها، مشخصه‌ها و setter-های آن‌ها را تنظیم می‌کنند. توجه کنید که امکان تنظیم مادیفایر نمایانی getter-ها وجود ندارد، چون همواره همان نمایانی مشخصه را می‌گیرند.

در بخش‌های قبلی این مقاله با مادیفایرهای نمایانی public و private به صورت اجمالی آشنا شدیم. در این بخش با دو مادیفایر دیگر به نام‌های protected و internal نیز آشنا خواهیم شد.

مادیفایرهای نمایانی درون پکیج

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

مادیفایر توضیح
public اعلان‌ها همه جا نمایان هستند.
private اعلان‌ها فقط درون همان فایل نمایان هستند.
internal اعلان‌ها درون همان ماژول (یک مجموع فایل‌های کاتلین که با هم کامپایل می‌شوند) نمایان هستند.
protected اعلان‌ها در دسترس پکیج‌ها نیستند.

اگر مادیفایر نمایانی تعیین نشود، به صورت پیش‌فرض مقدار public دارد. به مثال زیر توجه کنید:

// file name: hello.kt
 package test 
fun function1() {}   // public by default and visible everywhere
 private fun function2() {}   // visible inside hello.kt
 internal fun function3() {}   // visible inside the same module
 var name = "Foo"   // visible everywhere    get() = field   // visible inside hello.kt (same as its property)    private set(value) {   // visible inside hello.kt        field = value    }
 private class class1 {}   // visible inside hello.kt


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

طرز کار مادیفایرهای نمایانی برای تابع‌ها و مشخصه‌های عضو اعلان شده درون یک کلاس به صورت زیر است:

مادیفایر توضیح
public در دید هر کلاینتی است که می‌تواند کلاس اعلان کننده را ببیند.
private صرفاً درون همان کلاس نمایان است.
protected درون کلاس و زیرکلاس‌های آن نمایان است.
internal در دید هر کلاینتی درون ماژول است که می‌تواند کلاس اعلان‌کننده را ببیند.

نکته: اگر یک عضو protected را در کلاس مشتق‌شده بدون تعیین نمایانی آن oveeride کنید، نمایانی آن همواره به صورت protected خواهد بود. به مثال زیر توجه کنید:

open class Base() {    var a = 1                 // public by default    private var b = 2         // private to Base class    protected open val c = 3  // visible to the Base and the Derived class    internal val d = 4        // visible inside the same module
    protected fun e() { }     // visible to the Base and the Derived class
}
 class Derived: Base() {
    // a, c, d, and e() of the Base class are visible    // b is not visible
    override val c = 9        // c is protected
}
 fun main(args: Array<String>) {    val base = Base()
    // base.a and base.d are visible    // base.b, base.c and base.e() are not visible
    val derived = Derived()    // derived.c is not visible
}


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

نمایانی یک سازنده به صورت پیش‌فرض به صورت public است. با این حال می‌توان این وضعیت را تغییر داد. به این منظور باید یک کلیدواژه constructor به صورت صریح اضافه شود. این سازنده همانند مثال زیر به صورت پیش‌فرض public است:

class Test(val a: Int) {    // code
}


روش تغییر دادن نمایانی آن به صورت زیر است:

class Test private constructor(val a: Int) {    // code
}


در مثال فوق، سازنده به صورت private است. توجه کنید که در کاتلین، تابع‌های لوکال، متغیرها و کلاس‌ها نمی‌توانند مادیفایر نمایانی داشته باشند.


شاید از نوشته‌های زیر خوشتان بیاید
نظر خود را درباره این پست بنویسید ...

منوی سریع