Elvis Operator: یہ کیا ہے، سینٹیکس اور null قیمتوں کی ہینڈلنگ

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

Elvis Operator ایک بائنری آپریٹر ہے جو بائیں آپرینڈ کو واپس کرتا ہے اگر وہ null نہیں ہے، اور دائیں آپرینڈ کو اگر وہ null ہے۔ یۇ Kotlin، Groovy اور کچھ دیگر زبانوں میں ?: کے طور پر لکھا جاتا ہے۔ Kotlin زبان دستاویز، 2024 کے مطابق، یہ آپریٹر زبان کے null سیکورٹی سیسٹم کا حصہ ہے اور پڑھنے کی صلاحیت کو کھوئے بغیر شرطی تعمیرات کو ایک سطر تک مختصر کرنے کی اجازت دیتا ہے۔ مکمل if-else اظہار کے برعکس، Elvis Operator دائیں جانب کا صرف اس وقت حساب لگاتا ہے جب بائیں جانب null ہو، جو مہنگے پیتھ اظہارات کا استعمال کرتے وقت کارکردگی کا فائدہ دیتا ہے۔

اہم نکات

  • Elvis Operator — ?: آپریٹر، دو میں سے پہلا غیر-null آپرینڈ واپس کرتا ہے
  • Null safety — Kotlin اور دیگر زبانوں میں Elvis Operator کے استعمال کا بنیادی میدان
  • سینٹیکس انتہائی مختصر: val result = a ?: b، if (a != null) a else b کے مساوی
  • Groovy وہی ?: سینٹیکس استعمال کرتا ہے، Swift ?? آپریٹر استعمال کرتا ہے، Dart ?? استعمال کرتا ہے
  • لاگنگ Elvis Operator کے ذریعے ایک مقبول پیٹرن ہے: val name = input ?: «default»

Elvis Operator کیا ہے

Elvis Operator ایک بائنری آپریٹر ہے جس کا نام ایلویس پریسلی کے بالوں کے انداز پر رکھا گیا ہے۔ ?: کی علامت بصورتی گلی کے اطراف سے گایک کے چہرے کی طرح لگتی ہے: سوالیہ کا نشان آنکھ اور سائیڈبرن ہے، نقطہ واوین منہ ہے۔ آپریٹر دو آپرینڈ لیتا ہے: اگر پہلا null نہیں ہے — وہ واپس کیا جاتا ہے، ورنہ دوسرا واپس کیا جاتا ہے۔ یہ مکمل if-else تعمیر کو ایک مختصر اظہار سے بدلنے کی اجازت دیتا ہے۔

نام کی اصل

«Elvis Operator» نام Kotlin اور Groovy کمیونیٹیوں میں قائم ہوا، اور پھر Xtend اور دیگر JVM زبانوں میں پھیل گیا۔ Swift اور Dart میں مناسب تعمیر کو nil-coalescing operator کہا جاتا ہے، لیکن یہ فنڧنی طور پر یکساں ہے۔ ایلویس پریسلی کے ساتھ بصری وابستگی نے آپریٹر کو جدید پروگرامنگ زبانوں کے سینٹیکس میں سب سے پہچانے جانے والی علامتوں میں سے ایک بننے میں مدد کی۔

null ہینڈلنگ میں کردار

Elvis Operator null safety سیسٹم کا حصہ ہے جو NullPointerException (NPE) کو روکتا ہے۔ JetBrains 2023 کے مطالعے کے مطابق، NPE پروڈکشن JVM کوڈ میں 28% تمام استثنائیات کا سبب ہے۔ Elvis Operator کا استعمال اسائنمنٹ کے مقام پر NPE کو مکمل طور پر ختم کرتا ہے، ایک پیتھ قیمت کی ضمانت دیتا ہے۔ محفوظ کال آپریٹر ?. کے ساتھ مرکب ہونے پر، بنا کسی ایک if بلاک کے ایک قابل بھروسہ زنجیر بنتی ہے۔

Kotlin میں Elvis Operator کا سینٹیکس

Kotlin میں، Elvis Operator دو اظہاروں کے درمیان ?: کے طور پر لکھا جاتا ہے۔ اگر بائیں اظہار null نہیں ہے — نتیجہ بائیں اظہار کے برابر ہوتا ہے، ورنہ دائیں کا حساب لگایا جاتا ہے۔ دائیں اظہار کا حساب سست طور پر لگایا جاتا ہے — صرف اس وقت جب بائیں آپرینڈ null ہو، جو مہنگے حسابوں یا API کالز کا استعمال کرتے وقت کارکردگی کے لیے اہم ہے۔

kotlin
val name: String? = getUserName()
val displayName = name ?: "Guest"

fun getLength(str: String?): Int {
    return str?.length ?: 0
}

val config: Config? = loadConfig()
val timeout = config?.timeout ?: 30
println("Timeout: $timeout")

// Elvis with throw لازمی پیرامیٹرز کے لیے
val requiredId = nullableId ?: throw IllegalArgumentException("ID is required")

// Elvis with return جلد خروج کے لیے
fun process(data: String?): Result {
    val safe = data ?: return Result.failure("No data")
    return processInternal(safe)
}

let کے ساتھ مرکب Kotlin میں ایک عام پیٹرن ہے، جہاں Elvis Operator ایک پیتھ قیمت فراہم کرتا ہے اور let غیر-null نتیجے پر ایک عمل کرتا ہے۔ یہ طریقہ پڑھنے کی صلاحیت کو کھوئے بغیر مکمل if-else بلاکوں کو ایک کال زنجیر سے بدل دیتا ہے۔ Elvis Operator کو throw کے ساتھ بھی استعمال کیا جا سکتا ہے تاکہ لازمی پیرامیٹر کے غیرحاضر ہونے پر جبری طور پر بند کیا جا سکے — یہ انپٹ ڈیٹا کی تصدیق کا ایک محاوری طریقہ ہے۔

فنڧن سے جلد واپسی کے ساتھ Elvis

Kotlin میں ایک عام پیٹرن Elvis + return ہے۔ اگر قیمت null ہے، فنڧن فورا نتیجہ واپس کرتا ہے یا ایک استثنا پھینکتا ہے۔ Elvis with return محاورہ اکثر ڈیٹا تبدیل کے فنڧنوں میں استعمال ہوتا ہے: val processed = rawData ?: return defaultValue۔ یہ Swift کے guard let سے زیادہ مختصر ہے اور کوڈ کی سطح درجے میں اضافہ نہیں کرتا۔

Elvis Operator بنام if-else: موازنہ

Elvis Operator if-else سے چھوٹا ہے اور متغیر کو دوہرانے کی ضرورت نہیں ہے۔ موازنہ کریں: val x = a ?: b بنام val x = if (a != null) a else b۔ پیچیدہ اظہارات کے ساتھ، کوڈ میں کمی 60% تک پہنچ جاتی ہے، جبکہ سیمانٹکس مکمل طور پر یکساں ہے — کامپائلر دونوں ویرینٹوں کے لیے یکی بائٹ کوڈ تیار کر سکتا ہے۔

معیارElvis Operatorif-else
لمبائی1 سطر، 5–10 حروف3 سطروں، 15–30 حروف
اظہار کی تکرارنہیںہاں (a != null) ? a : b
سست دائیں جانبہاںہاں (elvis چھوٹا ہے)
مطرحہ اثراتصرف دائیں جانبدونوں شاخوں میں
پڑھنے کی صلاحیتسادہ معاملات کے لیے اعلیٰپیچیدہ منطق کے لیے بہتر

Elvis Operator کب استعمال کریں

Elvis Operator پیتھ قیمتیں مقرر کرنے، محفوظ رسائی کے ساتھ فنڧن کالز کو زنجیر میں بانچنے اور غائب قیمتوں کو لاگ کرنے کے لیے موزوں ہے۔ Kotlin کے محاوری پیٹرن اسے اظہاروں میں سادہ null جانچ کے لیے if-else کے متبادل کے طور پر تجویز کرتے ہیں۔ ?. کے ساتھ مرکب ہونے پر، یہ عارضی متغیرات کے بغیر کمپیکٹ زنجیریں تیار کرتا ہے۔

if-else کب بہتر ہے

if-else ایک سے زیادہ شرائط کے لیے، جب مطرحہ اثرات کو نفذ کرنے کی ضرورت ہو، یا جب دونوں آپرینڈ کئی کارروائیوں کے ساتھ پیچیدہ کوڈ بلاک ہوں تب بہتر ہے۔ Elvis Operator نیسٹڈ بلاکوں کی حمایت نہیں کرتا — ہر آپرینڈ کے لیے صرف واحد اظہار۔ اگر دائیں جانب مطرحہ اثرات کے ساتھ فنڧن کو کال کرتا ہے، if-else کی پڑھنے کی صلاحیت زیادہ ہوتی ہے۔

دیگر پروگرامنگ زبانوں میں Elvis Operator

Groovy بلکل Kotlin کی طرح ?: سینٹیکس استعمال کرتا ہے، کیونکہ دونوں زبانیں JVM پر چلتی ہیں اور null-safety کے فلسفے کو شیئر کرتی ہیں۔ یہ آپریٹر Groovy میں پہلے ظاہر ہوا — 2011 میں جاری کردہ ورشن 1.8 سے زبان میں موجود ہے۔ Groovy Elvis اسائنمنٹ کی بھی حمایت کرتا ہے: x ?= value (صرف اس وقت مقرر کریں جب x null ہو)۔

groovy
def name = getUserName()
def display = name ?: "Guest"

def map = ["key": "value"]
def result = map?.get("missing") ?: "default"
println(result)

// Groovy میں Elvis اسائنمنٹ
def config = null
config ?= "defaultConfig"
assert config == "defaultConfig"

Swift میں مساوی کو nil-coalescing operator کہا جاتا ہے اور ?? کے طور پر لکھا جاتا ہے۔ Dart میں بھی وہی ?? سینٹیکس استعمال ہوتا ہے۔ فرق یہ ہے کہ Swift اور Dart کو آپرینڈ قسموں کے ملان کی ضرورت ہوتی ہے، جبکہ Kotlin مشترک سوپرٹائپ میں خودکار تبدیل کے ساتھ مختلف قسموں کی اجازت دیتا ہے۔ TypeScript میں، ?? آپریٹر (nullish coalescing) ورشن 3.7 میں ظاہر ہوا اور صرف null اور undefined کے ساتھ کام کرتا ہے، || کے برعکس جو تمام falsy قیمتوں کو فلٹر کرتا ہے۔ PHP میں، ?? آپریٹر ورشن 7.0 میں، C# میں — ?? ورشن 6.0 سے ظاہر ہوا۔

Elvis Operator کے ساتھ عام غلطیاں

سب سے عام غلطی Elvis Operator ?: کو محفوظ کال آپریٹر ?. کے ساتھ خلط کرنا ہے۔ Kotlin میں، ?. کسی میتھڈ یا پروپرٹی کو صرف اس وقت کال کرتا ہے جب آبجیکٹ null نہیں ہو، جبکہ ?: null ہونے پر ایک پیتھ قیمت واپس کرتا ہے۔ انہیں مسلسل طور پر مرکب کیا جاتا ہے، لیکن ہر اپنا کام کرتا ہے۔ خلط شدگی ان مبتدئیوں میں پیدا ہوتی ہے جو ?. کے بغیر ?: استعمال کرنے کی کوشش کرتے ہیں۔

دائیں آپرینڈ میں مطرحہ اثرات

Elvis کی دائیں جانب سست طور پر حساب لگایا جاتا ہے، لیکن اگر اس میں مطرحہ اثرات کے ساتھ فنڧن کا استعمال ہو، تو یہ غیر متوقع رویے کا سبب بن سکتا ہے۔ ڈیولپر کبھی کبھی مہنگے حسابوں یا لاگنگ کو دائیں جانب رکھتے ہیں، جو غیر-null قیمت کے وقت نفذ نہیں ہوتا۔ یاد رکھیں کہ دائیں جانب ایک اظہار ہے جو صرف ضرورت کے وقت حساب کیا جاتا ہے۔

گروپنگ کے بغیر زنجیر میں Elvis

ایک صف میں کئی Elvis کوڈ کی پڑھنائی کو مشکل بنا سکتا ہے۔ مثال کے طور پر، a ?: b ?: c ?: d بائیں سے دائیں حساب کیا جاتا ہے، پہلا غیر-null واپس کرتا ہے۔ قوصین کے ذریعے گروپنگ یا منطق کو علاحدہ فنڧن میں نکالنا پڑھنے کی صلاحیت میں بہتری لاتا ہے اور ڈیبگنگ کو آسان بناتا ہے۔ اگر زنجیر 3 انداز سے لمبی ہے، تو when اظہار یا مددگار فنڧن استعمال کرنا چاہیے۔

بولین شرائط کے ساتھ if-else کے بجائے Elvis

مبتدئی ڈیولپر کبھی کبھی بولین قیمتوں کی جانچ کے لیے Elvis Operator استعمال کرنے کی کوشش کرتے ہیں: val x = flag ?: false۔ یہ صرف اس وقت کام کرتا ہے جب flag null ہو سکتا ہے۔ null کے بغیر بولین شرائط کے لیے، ایک عام if-else یا تیسرا آپریٹر چاہیے — Kotlin میں تیسرا آپریٹر موجود نہیں ہے، لیکن if-else اظہار سے بدلا جاتا ہے: val x = if (flag) a else b۔

اکثر پوچے جانے والے سوالات

Elvis Operator تیسرے آپریٹر سے کیسے مختلف ہے؟

Elvis Operator صرف null کی جانچ کرتا ہے، جبکہ تیسرا آپریٹر کسی بھی بولین شرط کو قبول کرتا ہے۔ Kotlin میں تیسرا آپریٹر موجود نہیں ہے — if-else اظہار سے بدلا جاتا ہے۔ Elvis ایک مختص کام حل کرتا ہے: null ہونے پر پیتھ قیمت، جبکہ تیسرا آپریٹر تمام شرطی اظہارات کو کور کرتا ہے۔

کیا Elvis Operator کو فنڧنوں کے ساتھ استعمال کیا جا سکتا ہے؟

ہاں، دائیں جانب ایک فنڧن کال ہو سکتا ہے: val x = a ?: calculateDefault()۔ سست حساب کی وجہ سے فنڧن کا حساب صرف اس وقت لگایا جاتا ہے جب a null ہو۔ یہ قیمت کے موجود ہونے پر کارکردگی کے نقصان کے بغیر مہنگے حسابوں، API کالز یا ڈیٹابیس کوئریز کا استعمال کرنے کی اجازت دیتا ہے۔

کیا Java میں Elvis Operator موجود ہے؟

Java میں کوئی براہ راست Elvis Operator موجود نہیں ہے۔ Java 8 سے شروع کرتے ہوئے، Optional.ofNullable(value).orElse(default) استعمال کیا جا سکتا ہے۔ Java 14+ نے switch اظہارات متعارف کرائے، لیکن مکمل ?: غائب ہے۔ Kotlin اور Groovy اسے زبان کی مضمن سینٹیکٹکل تعمیر کے طور پر فراہم کرتے ہیں۔

Elvis Operator کال زنجیروں کے ساتھ کیسے کام کرتا ہے؟

عام پیٹرن ایک محفوظ کال ?. کے بعد Elvis ہے۔ مثال: user?.address?.city ?: «Unknown»۔ اگر زنجیر میں کوئی بھی عنصر null ہے — پیتھ قیمت واپس کی جاتی ہے۔ یہ نیسٹڈ if جانچ کا ایک کمپیکٹ متبادل ہے، روایتی طریقے کے مقابلے کوڈ کو 3–5 گونا کم کرتا ہے۔

Elvis Operator اور Optional میں orElse میں کیا فرق ہے؟

Elvis Operator زبان کی سطح پر ایک سینٹیکٹکل تعمیر ہے، جبکہ orElse Java میں Optional کا ایک میتھڈ ہے۔ Elvis سست ہے (دائیں جانب کا حساب صرف null ہونے پر ہوتا ہے)، جبکہ orElse ہمیشہ اپنی دلیل کا حساب لگاتا ہے۔ Java میں سست قسم کے لیے orElseGet ہے جو Supplier کو قبول کرتا ہے۔ Elvis چھوٹا ہے اور Optional بنانے کی ضرورت نہیں ہے۔

خلاصہ

  • Elvis Operator — آپرینڈ کے null ہونے پر پیتھ قیمت فراہم کرنے کا ?: آپریٹر
  • سینٹیکس Kotlin اور Groovy میں: val result = a ?: b، جہاں b کا حساب صرف a == null ہونے پر لگایا جاتا ہے
  • Null safety — بنیادی استعمال کا میدان، NullPointerException کو روکتا ہے
  • Nil-coalescing — Swift (??) اور Dart (??) میں مساوی چیز، TypeScript میں — ?? ورشن 3.7 سے
  • مرکب محفوظ کال ?. کے ساتھ نیسٹنگ کے بغیر ایک کمپیکٹ null ہینڈلنگ زنجیر تیار کرتا ہے
  • سست حساب دائیں آپرینڈ کا — تیسرے آپریٹر سے بنیادی فرق
  • بہترین طریقہ — سادہ null جانچ کے لیے استعمال کریں، مطرحہ اثرات کے ساتھ پیچیدہ بلاکوں میں سے بچیں

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

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

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

مزید پڑھیں