Optional / Nullable — موبائل ڈویلپمنٹ میں اہم تصورات اور nullable اقسام

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

Optional / Nullable — قدر کی عدم موجودگی کے ساتھ محفوظ طریقے سے کام کرنے کے لیے Swift اور Kotlin زبانوں کے میکانزم ہیں۔ Swift میں Optional اور Kotlin میں nullable اقسام ایک ہی مسئلہ — null reference — کو حل کرتی ہیں لیکن مختلف نحوی اور معنوی طریقوں سے۔ Swift.org, 2026 کے مطابق، اختیاری اقسام nil سے متعلق غلطیوں کی پوری کلاس کو ختم کرتی ہیں، null چیک کو مرتب سازی کے مرحلے پر منتقل کرتے ہوئے۔

اہم نکات

  • Optional — ایک Swift قسم، جو دو کیسز (some(Value) اور none) والے enum کے طور پر پیش کی گئی ہے۔
  • Nullable — Kotlin میں قسم کے بعد سوالیہ نشان (String?) سے ظاہر کیا جاتا ہے، اور محفوظ کال ?. کے ذریعے۔
  • Type safety — دونوں میکانزم اس بات کی ضمانت دیتے ہیں کہ null اقدار مرتب سازی کے مرحلے پر واضح طور پر ہینڈل کی جاتی ہیں۔
  • Unwrapping — Swift if let، guard let اور force unwrap (!) استعمال کرتا ہے۔ Kotlin — ?.، !! اور ایلوس آپریٹر ?:۔
  • Interop — Kotlin اور Swift تشریحات اور خاص اقسام (Implicitly Unwrapped Optional) کے ذریعے nullable کوڈ بیس کے ساتھ تعامل کرتے ہیں۔

Optional اور Nullable کیا ہیں؟

Swift میں Optional اور Kotlin میں nullable — یہ زبانی ذرائع ہیں جو null کو قسم کے نظام کا واضح حصہ بناتے ہیں۔ Swift میں، Optional ایک enum ہے: Optional.none (nil) اور Optional.some(Wrapped)۔ Kotlin میں، nullable کو قسم میں لاحقہ ? سے ظاہر کیا جاتا ہے: String? ایک سٹرنگ یا null ہو سکتا ہے۔

دونوں طریقے بنیادی مسئلہ حل کرتے ہیں جسے Tony Hoare نے “ارب ڈالر کی غلطی” کہا — null reference۔ اختیاری اقسام کے آنے سے پہلے، کوئی بھی حوالہ null ہو سکتا تھا، اور چیک ڈویلپر پر چھوڑ دیا جاتا تھا۔ Swift اور Kotlin اس چیک کو مرتب سازی کے مرحلے پر منتقل کرتے ہیں: null کو نظر انداز کرنے والا کوڈ مرتب نہیں ہوگا۔

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

تاریخی طور پر، null reference 1965 میں ALGOL W زبان میں قدر کی عدم موجودگی کو ظاہر کرنے کے طریقے کے طور پر ظاہر ہوا۔ چھ دہائیوں میں، null بے شمار ناکامیوں کا ذریعہ بن گیا — Tony Hoare کی تحقیق کے مطابق، پروڈکشن کوڈ میں 30 سے 50 فیصد غلطیاں NullPointerException سے متعلق ہیں۔ Optional کے ساتھ Swift اور nullable اقسام کے ساتھ Kotlin پہلی مرکزی دھارے کی زبانیں بن گئیں جنہوں نے قسم کے نظام کی سطح پر اس مسئلے کو حل کیا، null کو فنکشن کے معاہدے کا واضح حصہ بناتے ہوئے۔

Swift میں Optional: نحو اور اختیاری اقسام کے ساتھ کام

Swift میں، Optional ایک مکمل قسم ہے جسے enum Optional<Wrapped> کے طور پر اعلان کیا گیا ہے۔ نحوی شکر ? مکمل اشارے کو بدل دیتی ہے: Int? Optional<Int> کے برابر ہے۔ Optional کے ساتھ کام میں قدر نکالنے کے کئی طریقے شامل ہیں۔

If-let اور guard-let بائنڈنگ

if let — مشروط نکالنا: اگر Optional میں قدر ہے، تو یہ بلاک کے اندر ایک مستقل سے بندھ جاتی ہے۔ guard let — فنکشن سے جلد خروج اگر Optional nil ہے۔ guard let کوڈ کو ہموار رکھتا ہے، نیسٹڈ if-let سے بچاتا ہے۔

Optional chaining

Optional chaining (ترتیب وار محفوظ رسائی) ? کے ذریعے واضح unwrapping کے بغیر Optional پر طریقہ یا خاصیت کو کال کرنے کی اجازت دیتا ہے۔ اگر سلسلے کی کوئی کڑی nil ہے، تو پورا سلسلہ nil لوٹاتا ہے۔ یہ درجہ بند ڈیٹا کے ساتھ کام کرتے وقت کوڈ کو کم کرتا ہے۔

Nil-coalescing آپریٹر

?? (nil-coalescing) — ایک آپریٹر جو Optional قدر لوٹاتا ہے اگر وہ nil نہیں ہے، ورنہ — ایک ڈیفالٹ قدر لوٹاتا ہے۔ یہ فال بیک قدر فراہم کرنے کے لیے if-let کا ایک مختصر متبادل ہے۔

swift
var name: String? = "Alice"

// If-let بائنڈنگ
if let unwrapped = name {
    print("ہیلو، \(unwrapped)")
}

// Optional chaining
let count = name?.count

// Nil-coalescing
let display = name ?? "مہمان"

// Optional پر Map
let greeting = name.map { "Hello, \($0)" }

Kotlin میں Nullable: محفوظ کالز اور ایلوس آپریٹر

Kotlin میں، nullable قسم کے نظام کا حصہ ہے، علیحدہ ریپر قسم نہیں۔ قسم String? null پر مشتمل ہو سکتی ہے، String (سوالیہ نشان کے بغیر) — کبھی نہیں۔ کمپائلر smart cast اور تشریحات کے ذریعے nullable کو ٹریک کرتا ہے۔

محفوظ کال ?.

?. — محفوظ کال آپریٹر۔ اگر آبجیکٹ null نہیں ہے، تو طریقہ یا خاصیت کال کی جاتی ہے؛ اگر null ہے — بغیر کال کے null لوٹایا جاتا ہے۔ یہ Swift میں optional chaining کے مشابہ ہے، لیکن نحوی طور پر چھوٹا ہے۔

ایلوس آپریٹر ?:

?: — nil-coalescing کا Kotlin-مشابہ۔ اگر بائیں اظہار null نہیں ہے، تو یہ لوٹایا جاتا ہے؛ ورنہ — دائیں طرف کی قدر۔ ایلوس آپریٹر کو اکثر return یا throw کے ذریعے جلد خروج کے ساتھ ملایا جاتا ہے۔

Smart cast اور !! آپریٹر

Smart cast — Kotlin کمپائلر if یا when میں null چیک کے بعد خود بخود nullable کو non-null میں تبدیل کر دیتا ہے۔ !! — جبری کال (force unwrap)، جو null پر NullPointerException پھینکتی ہے۔ !! صرف اس وقت استعمال کریں جب null ایک بگ ہو۔

kotlin
val name: String? = "Alice"

// محفوظ کال
val length = name?.length

// ایلوس آپریٹر
val display = name ?: "مہمان"

// چیک کے بعد Smart cast
if (name != null) {
    println("لمبائی: ${name.length}")
}

// لیمبڈا کے ساتھ Let
name?.let { println("ہیلو، $it") }

// Force unwrap — صرف جب یقین ہو
val forced = name!!

Optional بمقابلہ Nullable: طریقوں میں کلیدی فرق

اگرچہ Swift اور Kotlin ایک ہی کام حل کرتے ہیں، null-safety کے بارے میں ان کے نقطہ نظر بنیادی طور پر مختلف ہیں۔ ان فرقوں کو سمجھنا دونوں پلیٹ فارمز پر کام کرنے والے ڈویلپرز کے لیے اہم ہے۔

قسم کے نظام میں نمائندگی

Swift enum Optional — ایک معیاری الجبری قسم استعمال کرتا ہے۔ Kotlin ریپر آبجیکٹ بنائے بغیر کمپائلر قسم کے نظام کی سطح پر nullable کو شامل کرتا ہے۔ یہ کارکردگی کو متاثر کرتا ہے: Swift میں Optional ڈھیر پر ایک آبجیکٹ ہے، Kotlin میں nullable مختص کیے بغیر null چیک ہے۔

نحو اور اظہاریت

Kotlin نحو بلٹ ان آپریٹرز ?., ?:, !! کی وجہ سے چھوٹا ہے۔ Swift کو زیادہ واضح نحو کی ضرورت ہے: if let، guard let، Optional پر map۔ تاہم، Swift switch کے ذریعے پیٹرن میچنگ فراہم کرتا ہے، جسے Kotlin nullable کے لیے براہ راست سپورٹ نہیں کرتا۔

منظرSwiftKotlin
اعلانvar name: String?val name: String?
محفوظ کالname?.countname?.length
ڈیفالٹ قدرname ?? “مہمان”name ?: “مہمان”
مشروط نکالناif let x = namename?.let { x -> }
Force unwrapname!name!!

موبائل ڈویلپمنٹ میں null-safety پیٹرن

موبائل ڈویلپمنٹ میں، اختیاری اقسام کے ساتھ کام کرنے کے معیاری پیٹرن تیار ہوئے ہیں جو بوائلرپلیٹ کوڈ کو کم کرتے ہیں اور حفاظت بڑھاتے ہیں۔

Optional پر Map اور flatMap

Swift اور Kotlin Optional اور nullable کے لیے map اور flatMap کو سپورٹ کرتے ہیں۔ اگر قدر موجود ہے — تبدیلی لاگو کی جاتی ہے، اگر null ہے — null لوٹایا جاتا ہے۔ یہ نیسٹڈ if-let چیکس کو ختم کرتا ہے۔

ایلوس کے ذریعے ڈیفالٹ اقدار

if-let + else کے بجائے ڈیفالٹ قدر کے ساتھ ?: یا ?? استعمال کریں۔ یہ کوڈ کو اعلانیہ بناتا ہے: “اگر دستیاب ہو تو X استعمال کریں، ورنہ Y” طریقہ کار چیک کے بجائے۔

Compose اور SwiftUI میں Nullable

Jetpack Compose اور SwiftUI میں، اختیاری اقسام رینڈرنگ کو کنٹرول کرتی ہیں: اگر حالت null ہے — جزو چھپائیں، ورنہ دکھائیں۔ یہ واحد سچائی کا ذریعہ اصول کی پیروی کرتا ہے۔

kotlin
data class UserState(
    val name: String?,
    val email: String?
)

// مختلف تغیرات کے ساتھ when میں Smart cast
fun greeting(state: UserState): String = when {
    state.name != null && state.email != null ->
        "${state.name} (${state.email})"
    state.name != null -> state.name
    else -> "مہمان"
}

// Compose: موجودگی کے مطابق ڈسپلے
@Composable
fun UserProfile(name: String?) {
    name?.let {
        Text(text = it)
    } ?: Text(text = "ڈیٹا نہیں")
}

موجودہ Java کوڈ کو Kotlin میں منتقل کرنے کے لیے، androidx.annotation پیکیج سے @Nullable اور @NonNull تشریحات استعمال کرنے کی سفارش کی جاتی ہے۔ Kotlin کمپائلر Java کے ساتھ interop کے دوران ان تشریحات کو مدنظر رکھتا ہے، خود بخود متعلقہ اقسام کو nullable یا non-null بناتا ہے۔ واضح تشریحات کے ساتھ بتدریج منتقلی پروجیکٹ میں عالمی طور پر null-safety کو فعال کرنے سے زیادہ محفوظ ہے۔

Optional اور Nullable کے ساتھ کام کرتے وقت عام غلطیاں

Null-safety غلطیوں کی تعداد کو کم کرتا ہے، لیکن انہیں مکمل طور پر ختم نہیں کرتا۔ ڈویلپرز اکثر اختیاری اقسام کے ساتھ کام کرتے وقت خصوصی غلطیاں کرتے ہیں۔

  • ضمانت کے بغیر Force unwrap — name! یا name!! اس یقین کے بغیر کہ قدر nil نہیں ہے، پروڈکشن میں کریش کا سبب بنتا ہے۔ Force unwrap سے پہلے null چیک کریں۔
  • ضرورت سے زیادہ if-let — تین یا زیادہ Optional کے لیے نیسٹڈ if-let تباہی کا اہرام بناتا ہے۔ guard let یا flatMap استعمال کریں۔
  • Nil-coalescing کو نظر انداز کرنا — else بلاک کے ساتھ if-let کے ذریعے واضح چیک کو ?? یا ?: سے تبدیل کیا جا سکتا ہے، جو کوڈ کو چھوٹا کرتا ہے اور پڑھنے کی اہلیت کو بہتر بناتا ہے۔
  • عوامی APIs میں Nullable — اگر فنکشن nullable قبول کرتا ہے، تو ہر کال کو چیک کی ضرورت ہوتی ہے۔ ڈیفالٹ قدر یا اوورلوڈ کے ساتھ non-null کو ترجیح دیں۔

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

Kotlin Nullable Swift Optional سے کیسے مختلف ہے؟

Swift Optional some اور none کیسز والا enum ہے، ڈھیر پر آبجیکٹ۔ Kotlin nullable قسم کے نظام میں ایک تشریح ہے، ریپر بنائے بغیر کمپائلر کے ذریعے چیک کیا جاتا ہے۔ Kotlin نحوی طور پر زیادہ جامع ہے، Swift پیٹرن میچنگ میں زیادہ طاقتور ہے۔

کیا Java میں null-safety ہے؟

Java میں بلٹ ان null-safety نہیں ہے۔ Optional (Java 8+) Swift Optional سے ملتا جلتا ہے، لیکن یہ اوورہیڈ والا ریپر ہے۔ @Nullable اور @NonNull تشریحات جامد تجزیہ کار کی مدد کرتی ہیں، لیکن حفاظت کی ضمانت نہیں دیتیں۔

Kotlin میں if-let کے بجائے ?.let کب استعمال کریں؟

?.let آپریشنز کی زنجیر کے لیے آسان ہے: تبدیلی لاگو کرنا، ڈیٹابیس میں محفوظ کرنا، UI اپ ڈیٹ کرنا — سب ایک بلاک میں۔ متعدد nullable متغیرات والی پیچیدہ شرائط کے لیے null چیک کے ساتھ if بہتر ہے۔

Optional کارکردگی کو کیسے متاثر کرتا ہے؟

Swift Optional بڑی اقسام کے لیے بالواسطہ ذخیرہ والا enum ہے، جو مختص کا سبب بن سکتا ہے۔ Kotlin nullable اضافی لاگت کے بغیر null چیک ہے۔ گرم راستوں (recycler view، اینیمیشن) کے لیے Kotlin زیادہ کارآمد ہے۔

کیا data class فیلڈز کے لیے nullable استعمال کرنا چاہیے؟

Nullable صرف اس وقت استعمال کریں جب فیلڈ واقعی غائب ہو سکتا ہے: اختیاری پروفائل ڈیٹا، غیر لازمی ترتیبات۔ اگر فیلڈ ہمیشہ بھرا جاتا ہے، تو تخلیق کے وقت ایلوس آپریٹر کے ذریعے ڈیفالٹ قدر کے ساتھ non-null استعمال کریں۔

خلاصہ

  • Optional (Swift) اور Nullable (Kotlin) — زبانی میکانزم ہیں جو null ہینڈلنگ کو مرتب سازی کے مرحلے پر منتقل کرتے ہیں اور NPE کو روکتے ہیں۔
  • Swift Optional دو کیسز والا enum ہے، جو پیٹرن میچنگ اور map/flatMap فراہم کرتا ہے۔ Kotlin nullable قسم کے نظام کا حصہ ہے جس میں کمپیکٹ آپریٹرز ?., ?:, !! ہیں۔
  • Optional chaining (Swift ?.) اور محفوظ کال (Kotlin ?.) نیسٹڈ چیک کے بغیر درجہ بند ڈیٹا کے ساتھ کام کرنے کی اجازت دیتے ہیں۔
  • Nil-coalescing (??) اور ایلوس آپریٹر (?:) واضح if-else شاخوں کے بغیر ڈیفالٹ اقدار فراہم کرتے ہیں۔
  • Kotlin میں Smart cast چیک کے بعد خود بخود nullable کو non-null میں تبدیل کرتا ہے، واضح تبدیلیوں کی تعداد کو کم کرتا ہے۔
  • پروڈکشن میں force unwrap (! / !!)، ضرورت سے زیادہ if-let اور بغیر ضرورت کے عوامی APIs میں nullable اقسام سے بچیں۔

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

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

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

مزید پڑھیں