MOHSEN ALIAKBARI
MOHSEN ALIAKBARI
خواندن ۴ دقیقه·۴ سال پیش

کی lazy کجا lateinit در kotlin


در kotlin امکانات و ویژگی های زیادی وجود داره که ما میتونیم از همه این امکانات برای نوشتن یک برنامه بهتر استفاده کنیم , در میان این همه lateinit و lazy از ویژگی های مهم مقدار دهی به متغییر ها هستن

ما باید این ویژگی ها رو بشناسیم و در موقعیت مناسب از انها استفاده کنیم.

مقدار دهی متغییر ها در کاتلین

اگر نمیخواهیم متغییری را در constructor آن مقدار دهی کنیم , در اینجا دو این دو ویژگی مهم به ما کمک مهمی برای مقدار دهی به متغییر میدهند.

  • ‌lateinit
  • lazy

کلمه کلیدی lateinit

به صورت خلاصه میشه گفت که lateinit is late initalization

در حالت عادی هنگامی که یک متغییر را تعریف میکنیم به صورت non-null یا non ناپذیر هستن باید در constructor مقدار دهی بشه , هر چند که ما توی برنامه هامون همیشه متغییر هامون به این صورت نیستن و متاسفانه این کار راحت نیست. به طور مثال متغییر ها میتونن با طزریق وابستگی مقدار دهی بشن!

یا اینکه بخواییم تابعی بنویسیسم تا کدمون رو تست کنه همون طور که مشخصه این مقادیر رو نمیشه داخل constructor مقدار دهی کرد و از طرف دیگه non-null هم رعایت بشه! دلیل اصلی این که باید رعایت بشه این هست که هر دفعه بخواییم از متغییرمون استفاده کنیم باید برسی کنیم که متغییرمون nullنباشه.

برای رسیدگی به این مورد میتونین متغییرتون رو با استفاده از lateinit تعریف کنین

Example

public class Test { lateinit var mock: Mock @SetUp fun setup() { mock = Mock() } @Test fun test() { mock.do() } }‍‍ ‍‍‍
  • نکته مهم در استفاده از lateinit این است که متغییر به صورت mutable باید استفاده شوند که در kotlin با استفاده از کلمه کلیدی var معرفی میشن که در بدنه کلاس تعریف شده اند و نه در مقادیر ورودی primary constructor و هنگامی که متغییر دارای توابعی همچون setter , getter نداشته باشد و در ادامه این متغیرر null ناپذیر یا not-null خواهد بود اما از lateinit فقط برای primitive data type ها یا داده های اصلی زبان kotlin میشه استفاده کرد.

کلمه کلیدی lazy

به صورت خلاصه میشه گفت که lazy is lazy initialization

کلمه کلیدی lazy در واقع یک تابع است که ورودی آن lamda هست که ما در آن شیوه مقدار دهی شدن متغییر رو تعریف میکنیم , در ادامه تابع lazy یک نمونه از lazy را برگشت میدهد مه به عنوان یک نماینده جهت مقدار دهی متغییر استفاده میشه.

برای اولین باری که get متغییر فراخوانی میشود این تابع فراخوانی شده و متغییر ما را در لحظه مورد استفاده مقدار دهی میکنه! و در بقیه موارد استفاده مقدار قبلی خود را حفط کرده و دوباره مقدار دهی نمیشه و همان مقدار اولیه که برای مقدار دهی استفاده شده را باز میگردونه.

Example

public class Example{ val name: String by lazy { “mohsen aliakbari” } }

برای اولین باری که این تابع فراخوانی میشود و در ادامه فراخوانی این تابع مقدار بازگشتی آن همیشه برابر خواهد بود با "mohsen aliakbari".

کی lazy کجا lateinit

حال بعد از آشنا شدن با این ویژگی های مهم بهتره مواد کاربرد اون رو دقیق بدونیم

  • کلمه کلیدی lazy فقط برای متغییر های تغییر ناپذیر یا immutable که در kotlin با val تعریف میشن استفاده میشود و هم چنین برای کلمه کلیدی lateinit از var چرا که به متغییر های final کامپایل نمیشه.
  • کلمه کلیدی lateinit در تعریف متغییر هر جایی که بخواهیم مورد استفاده قرار بدیم‌ و اگه از قبلا بدونیم که قراه کجا متغییر ما مقدار دهی بشه بهتره از lateinit استفاده کنیم.


kotlindelegateprogrammingandroidvariables
شاید از این پست‌ها خوشتان بیاید