تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ MohammadMoghadasi
(مفهوم apply)سوال در مورد یک قسمت از کد
جامعه جاوا (اندروید) ایجاد شده در ۳۰ دی ۱۳۹۹

سلام وقت بخیر

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

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

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

ممنونم

سلام وقت بخیر

 

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"

 

 

 

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

پوریا شفیعی ۳۰ دی ۱۳۹۹، ۱۳:۲۶