امکانات و ویژگی های بسیار خوبی در Kotlin وجود دارد، ما می توانیم از همه این ویژگی ها برای نوشتن یک برنامه بهتر استفاده کنیم. در میان تمام این ویژگی ها، lateinit و lazy از جمله ویژگی های مهم هستند. باید بدانیم چه زمانی از هرکدام از آنها استفاده کنیم.
در این مقاله قصد داریم یاد بگیریم که کلمات کلیدی lateinit و lazy در کاتلین برای چه مواردی استفاده می شوند و تفاوت این دو در چیست؟
در خیلی از موارد پیش میاد که ما احتیاج داریم یه متغیر رو تعریف کنیم اما نمیخواهیم اون رو مقدار دهی اولیه بکنیم چون مطمئن هستیم که اون متغیر قبل اینکه مورد استفاده قرار بگیره مقداردهی خواهد شد.
یکی از راه های انجام این کار تعریف متغیر به صورت nullable به شکل زیر هست:
اما اگر نخوایم اون رو nullable کنیم چطور؟اون وقته که باید از کلمه کلیدی lateinit استفاده بکنیم.
باید مطمئن باشید که متغیر شما قبل از استفاده مقدار دهی اولیه شده باشه در غیر این صورت با این ارور مواجه میشید:
اگر مطمئن نیستید که متغیر مقدار دهی شده یا خیر میتوند با استفاده از isInitialized این مساله رو بررسی کنید:
کاربرد های Lateinit:
1. برای مقداردهی اولیه متغیر ها استفاده میشود.
2. برای inject یک شی با استفاده از Dagger.
یک سری کلاس ها وجود دارند که مقداردهی اولیه شی در آنها بسیار زمان بر هست و آنقدر زمان بر هست که موجب تاخیر در کل فرایند ایجاد کلاس میشود.
به طور مثال فرض میکنیم یه کلاس به اسم HeavyClass داریم، و در یک کلاس دیگر به اسم SomeClass میخوایم آبجکتی از آن بسازیم :
در اینجا ما در حال ایجاد یک آبجکت زمان بر هستیم که باعث کند شدن فرایندها در SomeClass میشه وامکان داره مواردی دراین کلاس وجود داشته باشند که از اصلا به وجود این شی نیاز نداشته باشند در اینجا باید از کلمه کلیدی lazy استفاده بکنیم:
مزیت استفاده از lazy در اینجا این هست که این آبجکت فقط زمانی استفاده می شوند که صدا زده بشه(call بشه) در غیر این صورت ایجاد نمیشه.
مزیت دیگر lazy این هست که یک بار آبجکت ساخته میشه و دفعات بعدی فقط صدازده میشه :
خروجی کد بالا به این صورت هست:
در کد بالا می بینید که آبجکت HeavyClass تنها زمانی ایجاد میشه که به اون دسترسی داشته باشید و اینکه آبجکت اون در تابع main وجود دارد.
اغلب از lazy برای متغیر های read-only استفاده میشد.
خب دوستان امیدوارم این مقاله براتون مفید واقع شده باشه در ادامه مطالب بیشتری رو باشما به اشتراک میگذاریم.