آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

طبقه بندی موضوعی

lazy در کاتلین

سه شنبه, ۱۱ مهر ۱۴۰۲، ۰۸:۳۴ ب.ظ

وقتی یه کلاسی لود میشه تمامی فیلدهای اون هم لود میشن. بعضی از آبجکت ها سنگین هستن (مثل دیتابیس اینا) و initial شدن اونها کاست زیادی داره. به همین خاطر از lazy توی کاتلین استفاده میشه و باعث میشه به محض استفاده از اون آبجکت، لود بشه.

 

مثال:

کلاس Person به صورت زیر تعریف شده:

data class Person(private val name : String, private val lastName : String){
    private val TAG = "Person"

    init {
        Log.d(TAG, "person: $this")
    }

    override fun toString(): String {
        return "name: ${this.name}, lastName: ${this.lastName}"
    }
}

 

اکتیویتی main:

class MainActivity : AppCompatActivity() {

    private val TAG = "MainActivity"

    val person1 by lazy {
        Person("Maryam", "jooon")
    }

    val person2 = Person("Omid", "jooon")


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        Log.d(TAG, "person1: ${person1}")


    }
}

 

خروجی:

 

همون طور که مشخص هست، با اینکه person2 هنوز استفاده نشده ولی init شده. در حالی که person1 به محض اینکه ازش توی log استفاده شده، init شده.

نحوه استفاده اینجوری هست که بعد از اسم متغیر از {}by lazy استفاده میشه و توی لامبدا مقدار آبجکت مد نظرمون رو مینویسیم (هایلایت شده).

 

موافقین ۰ مخالفین ۰ ۰۲/۰۷/۱۱
میم دال

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی