در این تکلیف، شما درباره متغیرهای پوچ شونده در برابر متغیرهای پوچ نشونده میآموزید. خطاهای برنامه نویسی که شامل متغیرهای پوچ شونده هستند منبع اشکالات بیشماری بودهاند. کاتلین با معرفی متغیرهای پوچ نشونده به دنبال کاهش دادن اشکالات است.
گام 1: در مورد پوچ شوندگی بیاموزید
به طور پیش فرض، متغیرها نمیتوانند پوچ null باشند.
1. یک Int اعلام کنید و یک null به آن اختصاص دهید.
var rocks: Int = null ⇒ error: null can not be a value of a non-null type Int
2. از عملگر علامت سوال ؟، پس از نوع استفاده کنید تا نشان دهید که متغیر میتواند پوچ باشد. یک ?Int اعلام کنید و یک null به آن اختصاص دهید.
var marbles: Int? = null
وقتی نوع دادههای پیچیده مثل لیست دارید:
لیستها و سایر نوعدادههایِ پیچیده در تکلیف بعدی پوشش داده میشود.
گام 2: درباره عملگرهای ? و :? بیاموزید
شما میتوانید با عملگر ? پوچ بودن یک متغیر را امتحان کنید، که زحمت نوشتن تعداد زیادی حکم if / else را کم میکند.
1. مقداری کد به روش طولانـــی برای امتحان پوچ نبودن متغیر fishFoodTreats بنویسید. بعد این متغیر را کاهش دهید.
var fishFoodTreats = 6 if (fishFoodTreats != null) { fishFoodTreats = fishFoodTreats.dec() }
2. حالا به روش کاتلین برای نوشتن این کد با استفاده از عملگر ? توجه کنید.
var fishFoodTreats = 6 fishFoodTreats = fishFoodTreats?.dec()
3. شما همچنین میتوانید امتحان پوچ بودن را با عملگر :? رشته کنید. به این مثال توجه کنید:
fishFoodTreats = fishFoodTreats?.dec() ?: 0
این یک مختصر نویسی است برای "اگر fishFoodTreats پوچ نیست، کاهش بده و استفاده کن: در غیر اینصورت از مقدار بعد از :? استفاده کن، که صفر است".
اگر fishFoodTreats پوچ باشد، سنجش متوقف میشود، و متد ()dec صدا زده نمیشود.
عملگر :? گاهی با نام "عملگر الویس" شناخته میشود، چون مثل یک لبخند با مدل موی پفی است، مانند آرایش موهای الویس پرسلی. درباره عملگر الویس در مستندات کاتلین بیشتر بخوانید.
یک نکته درباره اشارهگر پوچ
اگر شما واقعا عاشق استثنای اشارهگرپوچ (Null Pointer Exceptions) هستید، کاتلین به شما کمک میکند. عملگر اعلان غیر پوچ، !! (double-bang)، هر مقداری را به یک نوع غیر پوچ تبدیل میکند و اگر مقدار پوچ null باشد یک استثنا ارسال میکند .
val len = s!!.length // throws NullPointerException if s is null
در برنامه نویسی به طور عامیانه به علامت تعجب "بنگ" (bang) گفته میشود، پس عملگر اعلان غیرپوچ گاهی "دابل بنگ" یا "بنگ بنگ" خوانده میشود.
بهطور کلی استفاده از عملگر دابل بنگ (!!) ایده خوبی نیست. به همین خاطر سازندگان زبان میخواهند به جای یک علامت تعجب از دو علامت تعجب استفاده کنید. با این حال، گاهی شما به دابل بنگ نیاز دارید تا با کد جاوای ارثبری شده (legacy code) ارتباط برقرار کنید.