آموزش lateinit در کاتلین ، lateinit در کاتلین چیست ؟ کلمه کلیدی lateinit برای مقدار دهی کمی دیرتر متغیر هاست.دقت کنید که گفتیم کمی دیرتر ! بدین معنی که حتما باید مقدار دهی شود و بصورت پیش فرض مقدار null دارد و درصورتی که مقدار دهی نشود باعث دردسر و خطای برنامه خواهد شد !
کلمه کلیدی lateinit زمانی مفید خواهد بود که یک مقدار اجازه تعریف شدن با مقدار null را ندارد اما برنامه نویس مطمئن است زمان استفاده از این متغیر ، متغیر null نیست و حتما مقدار دارد اما با این حال چک کردن متغیر جهت null نبودن الزامی ست !
در موارد زیر کلمه کلیدی lateinit بشدت کار آمد خواهد بود :
دستور lateinit همچنین در زبان swift برای iOS هم استفاده میشود اما به صورت : var book: Book!
برای استفاده از دستور lateinit باید پیش نیاز های زیر را رعایت کنید:
شاید فکر کنید دستور lateinit کار خارق العاده و عجیبی انجام میدهد اما درواقع چنین نیست ، بیایید نگاهی به دستور دیکامپایل شده lateinit بیاندازیم.دستور زیر را در کاتلین مینویسیم:
lateinit var book: Book
همچنین بخوانید: تعریف متغیر در کاتلین
و درواقع به دستور زیر ترجمه میشود:
@NotNull
public Book book;
@NotNull
public final Book getBook() {
Book var10000 = this.book;
if(this.book == null) {
Intrinsics.throwUninitializedPropertyAccessException("book");
}
return var10000;
}
public final void setBook(@NotNull Book var1) {
Intrinsics.checkParameterIsNotNull(var1, "");
this.book = var1;
}
اما اگر قبل از مقداردهی یک متغیر از نوع lateinit از آن استفاده کنیم چه اتفاقی رخ میدهد؟
در ابتدای پست گفته شد که حتما باید متغیر lateinit را مقداردهی کرد و حتی زمان استفاده شرطی جهت null نبودن ذکر کرد ، اما اگر ما از متغیر lateinit قبل از مقداردهی استفاده کنیم برای مثال از متغیر زیر قبل از مقداردهی اولیه استفاده کنیم:
lateinit var book: Book
همچنین بخوانید: Delegation در کاتلین چیست ؟
با خطای RunTimeException زیر مواجه میشویم:
kotlin.UninitializedPropertyAccessException: lateinit property book has not been initialized
اما خبر خوب
از کاتلین 1.2 به بالا میتوانیم با دستور .isInitialized متغیر تعریف شده با دستور lateinit را چک کنیم که آیا مقدار دهی شده یا خیر (برای جلوگیری از خطای RunTime )
امیدوارم این آموزش برای شما مفید بوده باشد.
1 Comment
سلام ممنون از توضیحات، بهم کمک کرد