if-let ایک پروگرامنگ زبان کا ڈھانچہ ہے جو اختیاری اقسام سے اقدار کو محفوظ طریقے سے نکالنے کے لیے استعمال ہوتا ہے۔ یہ Optional (Swift) یا nullable متغیر (Kotlin) کے اندر قدر کی موجودگی کی جانچ کرتا ہے اور کامیابی پر بلاک کے دائرہ کار میں ایک نیا غیر اختیاری متغیر بناتا ہے۔ Swift Documentation, 2024 کے مطابق، optional binding زبان میں اختیاری اقسام کے ساتھ کام کرنے کا بنیادی طریقہ کار ہے، جو رن ٹائم پر nil اقدار کی وجہ سے کریشوں کو روکتا ہے۔ force unwrap کے برعکس، if-let قدر کی عدم موجودگی میں مہلک خرابی پیدا نہیں کرتا بلکہ محفوظ طریقے سے else شاخ میں چلا جاتا ہے یا بلاک کو چھوڑ دیتا ہے۔
اہم نکات
if-let ایک ڈھانچہ ہے جو مشروط if بیان کو ایک نئے متغیر کے اعلان کے ساتھ جوڑتا ہے۔ اس کا بنیادی مقصد اختیاری قسم سے محفوظ طریقے سے قدر نکالنا ہے، اس بات کی ضمانت دیتے ہوئے کہ کوڈ بلاک کے اندر متغیر یقینی طور پر ایک قدر رکھتا ہے۔ اختیاری تک براہ راست رسائی کے برعکس، if-let nil کے حوالہ کھولتے وقت کریش کے امکان کو ختم کرتا ہے۔
سخت ٹائپنگ والی زبانوں میں، ایک متغیر قدر نہ ہونے کی حالت میں ہو سکتا ہے۔ Swift میں، اسے Optional کہتے ہیں؛ Kotlin میں، یہ قسم کے بعد سوالیہ نشان کے ساتھ nullable قسم ہے۔ if-let آپ کو قدر کی موجودگی جانچنے اور اسے فوری طور پر بلاک کے اندر ایک نئے مستقل میں تفویض کرنے دیتا ہے۔ بلاک سے باہر نکلنے کے بعد، اصل اختیاری متغیر تبدیل نہیں ہوتا۔
if-let خرابی سے نمٹنے کے زمرے میں آتا ہے کیونکہ یہ کریش کی سب سے عام وجوہات میں سے ایک — nil کا حوالہ کھولنا — روکتا ہے۔ Firebase Crashlytics 2024 کے مطابق، موبائل ایپلیکیشنز میں تقریباً 35% کریش غیر پروسیس شدہ null اقدار سے متعلق ہیں۔ if-let کا استعمال اس قسم کی خرابیوں کو مکمل طور پر ختم کرتا ہے، اور else شاخ کے ساتھ مجموعہ قدر کی عدم موجودگی میں متبادل رویہ فراہم کرنے دیتا ہے۔
Optional binding کا طریقہ کار تین مراحل پر مشتمل ہے: مرتب کرنے والا چیک کرتا ہے کہ آیا اختیاری متغیر میں قدر ہے، اسے نکالتا ہے، اور اسے ایک نئے مستقل سے باندھتا ہے۔ اگر اختیاری متغیر nil ہے تو if بلاک عمل نہیں ہوتا اور پروگرام else شاخ میں چلا جاتا ہے یا ڈھانچے کے بعد عمل جاری رکھتا ہے۔ یہ عمل ڈویلپر کے لیے مکمل طور پر شفاف ہے اور مرتب کرنے والے کے زیر کنٹرول ہے۔
if-let کا سامنا ہونے پر، مرتب کرنے والا ایک چیک کوڈ تیار کرتا ہے۔ Swift میں، یہ flatMap طریقہ کو کال کرنے اور پھر nil سے موازنہ کرنے کے برابر ہے۔ مرتب کرنے والا اس چیک کو بہتر بناتا ہے، قدر موجود ہونے پر رن ٹائم لاگت صفر کی ضمانت دیتا ہے۔ Kotlin میں، let فنکشن اسی طرح کا کردار ادا کرتا ہے، جو ایک لیمڈا لیتا ہے اور اسے صرف اس وقت کال کرتا ہے جب قدر null نہ ہو، لیمڈا کا نتیجہ لوٹاتا ہے۔
if-let شرط میں بنایا گیا متغیر صرف if بلاک کے اندر ہی قابل رسائی ہے۔ یہ تصدیق شدہ سیاق و سباق سے باہر غیر اختیاری قدر کے حادثاتی استعمال کو روکتا ہے۔ ڈویلپر کو یہ فکر کرنے کی ضرورت نہیں کہ متغیر عمل کے دوران بدل جائے گا یا nil ہو جائے گا۔ شیڈو انگ کی اجازت ہے: آپ اختیاری کے برابر نام سے متغیر بنا سکتے ہیں اور بلاک کے اندر یہ غیر اختیاری ہوگا۔
Swift کے جدید ورژن کوما کا استعمال کرتے ہوئے ایک بیان میں متعدد if-let شرائط کو یکجا کرنے کی اجازت دیتے ہیں۔ تمام اختیاری متغیرات ترتیب سے چیک کیے جاتے ہیں اور اگر کم از کم ایک nil ہے تو بلاک عمل نہیں ہوتا۔ where کے ساتھ مجموعہ پہلے سے نکالی گئی اقدار میں ایک اضافی شرط شامل کرتا ہے: if let x = opt, let y = opt2, x > y { }۔ یہ اندرون if بلاکس کو بدل دیتا ہے اور کوڈ کو لکیری بناتا ہے۔
Swift میں، if-let ڈھانچہ کلیدی لفظ if کے ساتھ لکھا جاتا ہے، اس کے بعد let اور نئے مستقل کا نام، مساوی نشان اور اختیاری اظہار۔ اگر قدر موجود ہے تو یہ مستقل سے بندھ جاتی ہے اور بلاک باڈی عمل ہوتی ہے۔ اگر nil ہے تو بلاک چھوڑ دیا جاتا ہے اور عمل else شاخ یا ڈھانچے کے بعد جاری رہتا ہے۔
let optionalName: String? = "Alice"
if let name = optionalName {
print("Hello, \(name)")
} else {
print("Name is nil")
}
let nilName: String? = nil
if let unwrapped = nilName {
print("Got \(unwrapped)")
} else {
print("Value is nil — skip")
}
// where شق کے ساتھ متعدد if-let
let age: Int? = 25
if let name = optionalName,
let userAge = age,
userAge > 18 {
print("\(name) is adult")
}
متعدد if-let کوما سے الگ ایک شرط میں کئی اختیاری متغیرات کو کھولنے کی اجازت دیتا ہے۔ تمام اختیاری متغیرات میں قدر ہونی چاہیے ورنہ if بلاک عمل نہیں ہوگا۔ یہ سرور کے جوابات کے ساتھ کام کرتے وقت آسان ہے جہاں کئی فیلڈز غائب ہو سکتے ہیں۔ where شق کے ساتھ مجموعہ اندرون if بلاکس کے بغیر نکالی گئی قدر پر ایک چیک شامل کرتا ہے۔
Swift بلاک کے اندر تبدیل ہونے والے متغیر کے لیے if var بھی سپورٹ کرتا ہے۔ اگر نکالی گئی قدر کو تبدیل کرنے کی ضرورت ہے تو if var name = optional ڈھانچہ let کی بجائے var بناتا ہے۔ یہ قدر کی اقسام کے ساتھ کام کرنے کے لیے شاذ و نادر ہی استعمال ہونے والی لیکن مفید خصوصیت ہے جسے بلاک کے اندر تبدیلی کی ضرورت ہوتی ہے۔
Kotlin میں، if-let کا براہ راست مشابہ محفوظ کال آپریٹر کے ساتھ ملا ہوا let فنکشن ہے۔ مرتب کرنے والا ضمانت دیتا ہے کہ let بلاک کے اندر، متغیر کی غیر null قسم ہے اور اضافی چیک کی ضرورت نہیں۔ Kotlin smart cast طریقہ کار کے ساتھ if (variable != null) کے ذریعے براہ راست چیک بھی سپورٹ کرتا ہے، جو خود بخود قسم تبدیل کرتا ہے۔
val nullableName: String? = "Bob"
// let + safe call کے ذریعے if-let کا مشابہ
nullableName?.let { name ->
println("Hello, $name")
}
// null چیک کے بعد smart cast
val serverResponse: Map<String, Any?> = fetchData()
val userId = serverResponse["id"]
val userName = serverResponse["name"]
if (userId != null && userName != null) {
// Smart cast: userId اور userName پہلے سے String ہیں، String? نہیں
println("User $userId: $userName")
}
// ڈیفالٹ قدر کے لیے Elvis کے ساتھ let زنجیر
val displayName = nullableName?.let { it.uppercase() } ?: "GUEST"
Smart cast Kotlin میں ایک اور طریقہ کار ہے جو چیک کے بعد خود بخود nullable قسم کو غیر null میں تبدیل کرتا ہے۔ مرتب کرنے والا null چیک پوائنٹس کو ٹریک کرتا ہے اور اضافی let یا if-let کے بغیر متغیر استعمال کرنے دیتا ہے۔ تاہم، پیچیدہ زنجیروں کے لیے محفوظ کال آپریٹر کے ساتھ واضح let ڈھانچہ ترجیح دی جاتی ہے، کیونکہ smart cast صرف چیک بلاک کے اندر کام کرتا ہے اور اندرون کالز تک نہیں پھیلتا۔
دائرہ کار فنکشنز (let, run, with, apply, also) Kotlin میں nullable اقدار کے ساتھ کام کرنے کے مختلف طریقے فراہم کرتے ہیں۔ let if-let کے سب سے قریب ہے، کیونکہ یہ غیر null قدر کے ساتھ ایک نیا دائرہ کار بناتا ہے۔ run فنکشن کسی شے کے سیاق و سباق کے ساتھ کوڈ بلاک عمل کرنے کے لیے موزوں ہے، جبکہ apply نتیجہ واپس کیے بغیر شے کی ترتیب کے لیے استعمال ہوتا ہے۔
guard let Swift میں ایک متبادل ڈھانچہ ہے جو nil قدر ملنے پر فنکشن سے جلد خارج ہوتا ہے۔ if-let کے برعکس، جہاں غیر اختیاری متغیر صرف بلاک کے اندر دستیاب ہوتا ہے، guard let اسی دائرہ کار میں ایک متغیر بناتا ہے، جس سے guard بلاک کے بعد استعمال ہو سکتا ہے۔ یہ guard let کو ان پٹ پیرامیٹرز کی توثیق کے لیے ترجیحی بناتا ہے۔
| خصوصیت | if-let | guard let |
|---|---|---|
| دائرہ کار | صرف if بلاک کے اندر | guard کے بعد اسی دائرہ کار میں |
| لازمی else | اختیاری | لازمی (return/throw) |
| اندرونیت | بڑھاتی ہے | نہیں بڑھاتی (لکیری کوڈ) |
| عام استعمال | مختصر چیک، UI اپ ڈیٹس | ان پٹ پیرامیٹر کی توثیق |
| پڑھنے کی اہلیت | 1-2 اختیاری کے ساتھ | 3+ اختیاری کے ساتھ |
if-let ترجیحی ہے جب آپ کو اختیاری قدر کے ساتھ مختصر کارروائی کرنی ہو اور مرکزی کوڈ کا عمل جاری رکھنا ہو۔ UI اپ ڈیٹس ایک عام منظر نامہ ہے: اختیاری تصویر وصول کرنا، if-let بلاک میں ImageView کو اپ ڈیٹ کرنا، nil ہونے پر کچھ نہ کرنا۔ ایسے معاملات میں else شاخ کی ضرورت نہیں اور if-let لازمی return کے بغیر کم سے کم کوڈ فراہم کرتا ہے۔
guard let اس وقت استعمال ہوتا ہے جب nil قدر فنکشن کے مزید عمل کو بے معنی بنا دیتی ہے۔ جلد خارج ہونا اندرونیت کو کم کرتا ہے اور کوڈ کو لکیری بناتا ہے۔ SwiftLint سفارشات کے مطابق، guard let ان تمام فنکشنز میں ترجیحی ہے جہاں اختیاری پیرامیٹر عمل کے لیے اہم ہے۔ guard let متعدد اختیاری والے فنکشنز میں بھی لازمی ہے — فی پیرامیٹر ایک guard اہرام کے بغیر چپٹا کوڈ دیتا ہے۔
تجربہ کار ڈویلپر بھی optional binding کے ساتھ غلطیاں کرتے ہیں۔ سب سے عام بھولی ہوئی else شاخ ہے، جہاں nil قدر کو نظر انداز کیا جاتا ہے اور پروگرام اطلاع کے بغیر غلط کام کرتا ہے۔ Swift میں، else کی عدم موجودگی مرتب کرنے کی خرابی پیدا نہیں کرتی، جو منطقی بگز کا باعث بنتی ہے: صارف UI اپ ڈیٹس نہیں دیکھتا لیکن خرابی کی اطلاع بھی نہیں پاتا۔
ہر نیا if-let اندرونیت کی ایک سطح بڑھاتا ہے۔ 4-5 اختیاری کے ساتھ، کوڈ ایک اہرام بن جاتا ہے۔ دوبارہ ترتیب guard let یا کوما سے الگ مشترکہ شرائط سے مسئلہ حل ہوتا ہے۔ Swift 5.7+ میں، آپ اندرونیت کے بغیر ایک شرط میں متعدد let استعمال کر سکتے ہیں، جو علمی بوجھ کم کرتا ہے اور جائزہ کے دوران کوڈ پڑھنے کی اہلیت بہتر کرتا ہے۔
کچھ ڈویلپر وقت بچانے کے لیے if-let کی بجائے force unwrap استعمال کرتے ہیں۔ یہ nil قدر ملنے پر کریش کا باعث بنتا ہے۔ ایک جامد کوڈ تجزیہ کار force unwrap کو انتباہ کے طور پر نشان زد کرتا ہے، لیکن بہت سے منصوبے اصول کو غیر فعال کر دیتے ہیں، تکنیکی قرض پیدا کرتے ہیں۔ پروڈکشن کوڈ میں، force unwrap صرف یونٹ ٹیسٹ میں یا قدر کی موجودگی کے مکمل یقین پر ظاہر ہونا چاہیے۔
if-let کے بغیر اختیاری کالوں کی زنجیر ایک مسئلہ چھپا سکتی ہے۔ اگر optional chaining زنجیر کے بیچ میں nil لوٹاتا ہے تو پورا نتیجہ nil ہوگا، لیکن واضح چیک کے بغیر ڈویلپر اسے محسوس نہیں کر سکتا۔ optional chaining کو if-let کے ساتھ ملانا ضمانت دیتا ہے کہ حتمی نتیجہ چیک اور نکالا گیا ہے۔
اکثر پوچھے گئے سوالات
if-let صرف شرط بلاک کے اندر ایک متغیر بناتا ہے جبکہ guard let بلاک کے بعد دائرہ کار میں متغیر بناتا ہے۔ guard let کو فنکشن سے باہر نکلنے کے لیے return، throw یا fatalError کے ساتھ لازمی else بلاک درکار ہے۔ یہ اہم اختیاری اور لازمی فنکشن پیرامیٹرز کے ساتھ کام کرتے وقت کوڈ کو محفوظ بناتا ہے۔
ہاں، Swift شرط میں کوما کا استعمال کرتے ہوئے متعدد if-let سپورٹ کرتا ہے۔ تمام اختیاری متغیرات میں قدر ہونی چاہیے — اگر کم از کم ایک nil ہے تو بلاک عمل نہیں ہوگا۔ یہ اندرون ڈھانچوں سے زیادہ موثر ہے اور نکالی گئی اقدار کی اضافی فلٹرنگ کے لیے where شق شامل کرنے دیتا ہے۔
Swift if-let ایک علیحدہ زبان کا ڈھانچہ ہے جبکہ Kotlin let ایک لیمڈا کے ساتھ معیاری توسیعی فنکشن ہے۔ Kotlin smart cast بھی سپورٹ کرتا ہے، جو اضافی کالوں کے بغیر null چیک کے بعد خود بخود قسم تبدیل کرتا ہے۔ Swift میں smart cast نہیں ہے — if-let اقدار کو محفوظ طریقے سے نکالنے کا واحد طریقہ ہے۔
if-let nil کا حوالہ کھولنے سے کریشوں کو روکتا ہے۔ force unwrap کی بجائے ڈویلپر کو ایک محفوظ طریقہ کار ملتا ہے جو بلاک کے اندر قدر کی ضمانت دیتا ہے۔ Crashlytics کے اعدادوشمار کے مطابق، force unwrap سے if-let پر سوئچ کرنے سے پروڈکشن ایپلیکیشنز میں مہلک NullPointerException کی تعداد 80-90% کم ہو جاتی ہے۔
Optional chaining سوالیہ نشان کے ذریعے اختیاری قدر پر خصوصیات اور طریقوں تک رسائی کا ایک طریقہ کار ہے۔ اگر کوئی درمیانی قدر nil ہے تو پوری زنجیر بغیر کریش کے nil لوٹاتی ہے۔ Optional chaining اور if-let اکثر ملائے جاتے ہیں: اندرون خصوصیات تک محفوظ رسائی کے لیے optional chaining، تصدیق کے ساتھ زنجیر کا حتمی نتیجہ نکالنے کے لیے if-let۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں