if-let: یہ کیا ہے، نحو اور اختیاری اقسام کے ساتھ کام

مصنف: IT Sectr اشاعت: 2026-05-27 مطالعے کا وقت: 9 منٹ

if-let ایک پروگرامنگ زبان کا ڈھانچہ ہے جو اختیاری اقسام سے اقدار کو محفوظ طریقے سے نکالنے کے لیے استعمال ہوتا ہے۔ یہ Optional (Swift) یا nullable متغیر (Kotlin) کے اندر قدر کی موجودگی کی جانچ کرتا ہے اور کامیابی پر بلاک کے دائرہ کار میں ایک نیا غیر اختیاری متغیر بناتا ہے۔ Swift Documentation, 2024 کے مطابق، optional binding زبان میں اختیاری اقسام کے ساتھ کام کرنے کا بنیادی طریقہ کار ہے، جو رن ٹائم پر nil اقدار کی وجہ سے کریشوں کو روکتا ہے۔ force unwrap کے برعکس، if-let قدر کی عدم موجودگی میں مہلک خرابی پیدا نہیں کرتا بلکہ محفوظ طریقے سے else شاخ میں چلا جاتا ہے یا بلاک کو چھوڑ دیتا ہے۔

اہم نکات

  • if-let — کریش کے خطرے کے بغیر اختیاری اقسام سے اقدار کو محفوظ طریقے سے نکالنے کا ڈھانچہ
  • Optional binding — ایک طریقہ کار جو قدر کی موجودگی کی جانچ کرتا ہے اور بلاک کے دائرہ کار میں ایک غیر اختیاری متغیر بناتا ہے
  • Swift if let name = optional نحو استعمال کرتا ہے، Kotlin محفوظ کال آپریٹر کے ساتھ let فنکشن استعمال کرتا ہے
  • guard let — قدر کی عدم موجودگی میں فنکشن سے جلد خارج ہونے کے ساتھ if-let کا متبادل
  • Force unwrap — ایک مخالف نمونہ جسے کریشوں سے بچنے کے لیے if-let سے بدلنا چاہیے

if-let کیا ہے

if-let ایک ڈھانچہ ہے جو مشروط if بیان کو ایک نئے متغیر کے اعلان کے ساتھ جوڑتا ہے۔ اس کا بنیادی مقصد اختیاری قسم سے محفوظ طریقے سے قدر نکالنا ہے، اس بات کی ضمانت دیتے ہوئے کہ کوڈ بلاک کے اندر متغیر یقینی طور پر ایک قدر رکھتا ہے۔ اختیاری تک براہ راست رسائی کے برعکس، if-let nil کے حوالہ کھولتے وقت کریش کے امکان کو ختم کرتا ہے۔

تعریف اور مقصد

سخت ٹائپنگ والی زبانوں میں، ایک متغیر قدر نہ ہونے کی حالت میں ہو سکتا ہے۔ Swift میں، اسے Optional کہتے ہیں؛ Kotlin میں، یہ قسم کے بعد سوالیہ نشان کے ساتھ nullable قسم ہے۔ if-let آپ کو قدر کی موجودگی جانچنے اور اسے فوری طور پر بلاک کے اندر ایک نئے مستقل میں تفویض کرنے دیتا ہے۔ بلاک سے باہر نکلنے کے بعد، اصل اختیاری متغیر تبدیل نہیں ہوتا۔

خرابی سے نمٹنے میں کردار

if-let خرابی سے نمٹنے کے زمرے میں آتا ہے کیونکہ یہ کریش کی سب سے عام وجوہات میں سے ایک — nil کا حوالہ کھولنا — روکتا ہے۔ Firebase Crashlytics 2024 کے مطابق، موبائل ایپلیکیشنز میں تقریباً 35% کریش غیر پروسیس شدہ null اقدار سے متعلق ہیں۔ if-let کا استعمال اس قسم کی خرابیوں کو مکمل طور پر ختم کرتا ہے، اور else شاخ کے ساتھ مجموعہ قدر کی عدم موجودگی میں متبادل رویہ فراہم کرنے دیتا ہے۔

if-let کیسے کام کرتا ہے

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 کا نحو

Swift میں، if-let ڈھانچہ کلیدی لفظ if کے ساتھ لکھا جاتا ہے، اس کے بعد let اور نئے مستقل کا نام، مساوی نشان اور اختیاری اظہار۔ اگر قدر موجود ہے تو یہ مستقل سے بندھ جاتی ہے اور بلاک باڈی عمل ہوتی ہے۔ اگر nil ہے تو بلاک چھوڑ دیا جاتا ہے اور عمل else شاخ یا ڈھانچے کے بعد جاری رہتا ہے۔

swift
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 بلاکس کے بغیر نکالی گئی قدر پر ایک چیک شامل کرتا ہے۔

let کی بجائے var کے ساتھ if-let

Swift بلاک کے اندر تبدیل ہونے والے متغیر کے لیے if var بھی سپورٹ کرتا ہے۔ اگر نکالی گئی قدر کو تبدیل کرنے کی ضرورت ہے تو if var name = optional ڈھانچہ let کی بجائے var بناتا ہے۔ یہ قدر کی اقسام کے ساتھ کام کرنے کے لیے شاذ و نادر ہی استعمال ہونے والی لیکن مفید خصوصیت ہے جسے بلاک کے اندر تبدیلی کی ضرورت ہوتی ہے۔

Kotlin میں if-let: null حفاظت کے ساتھ کام

Kotlin میں، if-let کا براہ راست مشابہ محفوظ کال آپریٹر کے ساتھ ملا ہوا let فنکشن ہے۔ مرتب کرنے والا ضمانت دیتا ہے کہ let بلاک کے اندر، متغیر کی غیر null قسم ہے اور اضافی چیک کی ضرورت نہیں۔ Kotlin smart cast طریقہ کار کے ساتھ if (variable != null) کے ذریعے براہ راست چیک بھی سپورٹ کرتا ہے، جو خود بخود قسم تبدیل کرتا ہے۔

kotlin
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 نتیجہ واپس کیے بغیر شے کی ترتیب کے لیے استعمال ہوتا ہے۔

if-let بمقابلہ guard let: تقابلی تجزیہ

guard let Swift میں ایک متبادل ڈھانچہ ہے جو nil قدر ملنے پر فنکشن سے جلد خارج ہوتا ہے۔ if-let کے برعکس، جہاں غیر اختیاری متغیر صرف بلاک کے اندر دستیاب ہوتا ہے، guard let اسی دائرہ کار میں ایک متغیر بناتا ہے، جس سے guard بلاک کے بعد استعمال ہو سکتا ہے۔ یہ guard let کو ان پٹ پیرامیٹرز کی توثیق کے لیے ترجیحی بناتا ہے۔

خصوصیتif-letguard let
دائرہ کارصرف if بلاک کے اندرguard کے بعد اسی دائرہ کار میں
لازمی elseاختیاریلازمی (return/throw)
اندرونیتبڑھاتی ہےنہیں بڑھاتی (لکیری کوڈ)
عام استعمالمختصر چیک، UI اپ ڈیٹسان پٹ پیرامیٹر کی توثیق
پڑھنے کی اہلیت1-2 اختیاری کے ساتھ3+ اختیاری کے ساتھ

if-let کب چنیں

if-let ترجیحی ہے جب آپ کو اختیاری قدر کے ساتھ مختصر کارروائی کرنی ہو اور مرکزی کوڈ کا عمل جاری رکھنا ہو۔ UI اپ ڈیٹس ایک عام منظر نامہ ہے: اختیاری تصویر وصول کرنا، if-let بلاک میں ImageView کو اپ ڈیٹ کرنا، nil ہونے پر کچھ نہ کرنا۔ ایسے معاملات میں else شاخ کی ضرورت نہیں اور if-let لازمی return کے بغیر کم سے کم کوڈ فراہم کرتا ہے۔

guard let کب چنیں

guard let اس وقت استعمال ہوتا ہے جب nil قدر فنکشن کے مزید عمل کو بے معنی بنا دیتی ہے۔ جلد خارج ہونا اندرونیت کو کم کرتا ہے اور کوڈ کو لکیری بناتا ہے۔ SwiftLint سفارشات کے مطابق، guard let ان تمام فنکشنز میں ترجیحی ہے جہاں اختیاری پیرامیٹر عمل کے لیے اہم ہے۔ guard let متعدد اختیاری والے فنکشنز میں بھی لازمی ہے — فی پیرامیٹر ایک guard اہرام کے بغیر چپٹا کوڈ دیتا ہے۔

if-let استعمال کرتے وقت عام غلطیاں

تجربہ کار ڈویلپر بھی 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 کے ساتھ ملانا ضمانت دیتا ہے کہ حتمی نتیجہ چیک اور نکالا گیا ہے۔

اکثر پوچھے گئے سوالات

Swift میں if-let اور guard let میں کیا فرق ہے؟

if-let صرف شرط بلاک کے اندر ایک متغیر بناتا ہے جبکہ guard let بلاک کے بعد دائرہ کار میں متغیر بناتا ہے۔ guard let کو فنکشن سے باہر نکلنے کے لیے return، throw یا fatalError کے ساتھ لازمی else بلاک درکار ہے۔ یہ اہم اختیاری اور لازمی فنکشن پیرامیٹرز کے ساتھ کام کرتے وقت کوڈ کو محفوظ بناتا ہے۔

کیا if-let متعدد اختیاری کے ساتھ استعمال کیا جا سکتا ہے؟

ہاں، Swift شرط میں کوما کا استعمال کرتے ہوئے متعدد if-let سپورٹ کرتا ہے۔ تمام اختیاری متغیرات میں قدر ہونی چاہیے — اگر کم از کم ایک nil ہے تو بلاک عمل نہیں ہوگا۔ یہ اندرون ڈھانچوں سے زیادہ موثر ہے اور نکالی گئی اقدار کی اضافی فلٹرنگ کے لیے where شق شامل کرنے دیتا ہے۔

Swift میں if-let، Kotlin کے let سے کیسے مختلف ہے؟

Swift if-let ایک علیحدہ زبان کا ڈھانچہ ہے جبکہ Kotlin let ایک لیمڈا کے ساتھ معیاری توسیعی فنکشن ہے۔ Kotlin smart cast بھی سپورٹ کرتا ہے، جو اضافی کالوں کے بغیر null چیک کے بعد خود بخود قسم تبدیل کرتا ہے۔ Swift میں smart cast نہیں ہے — if-let اقدار کو محفوظ طریقے سے نکالنے کا واحد طریقہ ہے۔

if-let غلطیوں کو روکنے میں کس طرح مدد کرتا ہے؟

if-let nil کا حوالہ کھولنے سے کریشوں کو روکتا ہے۔ force unwrap کی بجائے ڈویلپر کو ایک محفوظ طریقہ کار ملتا ہے جو بلاک کے اندر قدر کی ضمانت دیتا ہے۔ Crashlytics کے اعدادوشمار کے مطابق، force unwrap سے if-let پر سوئچ کرنے سے پروڈکشن ایپلیکیشنز میں مہلک NullPointerException کی تعداد 80-90% کم ہو جاتی ہے۔

optional chaining کیا ہے اور if-let کے ساتھ اس کا تعلق؟

Optional chaining سوالیہ نشان کے ذریعے اختیاری قدر پر خصوصیات اور طریقوں تک رسائی کا ایک طریقہ کار ہے۔ اگر کوئی درمیانی قدر nil ہے تو پوری زنجیر بغیر کریش کے nil لوٹاتی ہے۔ Optional chaining اور if-let اکثر ملائے جاتے ہیں: اندرون خصوصیات تک محفوظ رسائی کے لیے optional chaining، تصدیق کے ساتھ زنجیر کا حتمی نتیجہ نکالنے کے لیے if-let۔

خلاصہ

  • if-let — Swift اور Kotlin میں nil اقدار سے کریش روکنے والا بنیادی محفوظ کھولنے کا ڈھانچہ
  • Optional binding — قدر کی موجودگی جانچنے اور اسے نئے غیر اختیاری متغیر سے باندھنے کا طریقہ کار
  • Swift کوما کے ذریعے متعدد بائنڈنگ کی حمایت کے ساتھ if let نحو استعمال کرتا ہے
  • Kotlin let + safe call اور smart cast کے ذریعے اسی طرح کی فعالیت لاگو کرتا ہے
  • guard let — جلد خارج ہونے کے ساتھ متبادل، متعدد چیکوں میں اندرونیت کم کرتا ہے
  • Force unwrap — ایک مخالف نمونہ جسے کریشوں سے بچنے کے لیے if-let سے بدلنا چاہیے
  • Optional chaining if-let کے ساتھ مل کر اندرون اختیاری کے ساتھ کام کرتے وقت زیادہ سے زیادہ حفاظت فراہم کرتا ہے

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں