(مفهوم apply)سوال در مورد یک قسمت از کد

پرسیده شده
فعالیت 1186 روز پیش
دیده شده 585 بار
0

سلام وقت بخیر

اگه میشه اینو به زبون ساده تر توضیح بدید ممنون میشم :

companion object{
    fun newInstance(banner : Banner) : BannerFragment{
        return BannerFragment().apply {
            arguments=Bundle().apply {
                putParcelable(EXTRA_KEY_DATA,banner)
            }
        }
    }
}

اگه شکل آسون تری از این کد رو می دونید بنویسید و لطفا به زبون ساده توضیح بدید آپلایی چه مزیتی داره

ممنونم

فایل پیوست

MohammadMoghadasi
MohammadMoghadasi

30 دی 99

6
حذف شده

سلام وقت بخیر

 

companion object : 

با استفاده از companion ها نیازی به ساخت یک نمونه برای call کردن متد های مربوطه نداریم و با نوشتن نام کلاس و سپس نام متد میتوانیم آن متد را call کنیم(صرفا هم لازم نیست متد باشه برای مثال خدمتتون عرض کردم)

مقادیری که در companion object ساخته میشن هر زمانی که کلاس مورد نظرتون به هرشکلی صدا زده بشه و در حافظه بارگذاری بشه ساخته میشن

اشیاء companion معادل همان متدهای استاتیک در جاوا هستند(اگر بخواهیم ریز تر بشیم و مفهومی یادش بگیرید این قضیه با جاوا متفاوت هست به این شکل که وقتی شما از companion استفاده میکنید در پشت زمینه در اصل یک نمونه از آن کلاس ساخته شده و مثلا در مثال شما newInstance بر روی آن نمونه کال میشود مگر اینکه از انوتیشن static استفاده کنید که این مورد در جلسه مربوطه توضیح داده شد)

---------------------------------

apply چی هست: یک function scope هست درواقع function scope ها یک محدوده یا بلاک را در اختیار ما قرار می دهند که بتوانیم دستورات خاصی را درون آن، آن محدوده یا scope اجرا کنیم.به عبارت دیگر این scope ها یک بلاک با context موقت در اختیار توسعه دهنده قرار می دهد که بتواند دستورات خود را درون آن scope با context مشخص اجرا کند.

نکته ای که هست با apply حتی نیازی نیست از it هم استفاده کنید و خیلی کارمون رو راحت کرده 

به عبارت دیگر همانطور که از نام apply به معنای اضافه کردن مشخص هست  همان موقع که ابجکت رو داریم استفاده میکنیم همزمان یک سری کار هم در اون انجام میدهیم.

به عبارت دیگر  لازم نباشد پشت سر هم بر روی variable مربوطه مواردی رو call یا مقدار دهی کنیم و با apply همه این کار ها را میتوانیم در یک scope انجام دهیم 

و در کل apply اجازه می‌دهد تا چندین متد را تنها با یک نمونه فراخوانی کنید.مثال:

 


val adam = Person("Adam").apply { 
    age = 20                       // same as this.age = 20 or adam.age = 20
    city = "London"
}
println(adam)

یا 

binding.apply {
tvName.text = "Pouria"
tvAge.text = "23"
tvX.text = "1000 stars"
}
بدون apply : 
binding.tvName.text = "Pouria"
binding.tvAge.text = "23"
binding.tvX.text = "1000 stars"

 

 

 

در اخر پیشنهاد میکنم داک مربوطه رو مطالعه کنید 

فایل پیوست

پوریا شفیعی

توسط

پوریا شفیعی

30 دی 99