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 प्रकार, जो दो केसों वाले enum के रूप में प्रस्तुत: some(Value) और none।
  • Nullable — Kotlin में प्रकार के बाद प्रश्न चिह्न (String?) द्वारा दर्शाया जाता है, और सुरक्षित कॉल ?. के माध्यम से।
  • Type safety — दोनों तंत्र गारंटी देते हैं कि null मान संकलन चरण पर स्पष्ट रूप से संभाले जाते हैं।
  • Unwrapping — Swift if let, guard let और force unwrap (!) का उपयोग करता है। Kotlin — ?., !! और एल्विस ऑपरेटर ?:।
  • Interop — Kotlin और Swift एनोटेशन और विशेष प्रकारों (Implicitly Unwrapped Optional) के माध्यम से nullable कोड बेस के साथ बातचीत करते हैं।

Optional और Nullable क्या हैं?

Optional Swift में और nullable Kotlin में — ये भाषा साधन हैं जो 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 पूर्ण pattern-matching के साथ बीजगणितीय प्रकार 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 binding
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, map Optional पर। हालाँकि, Swift switch के माध्यम से pattern-matching प्रदान करता है, जो 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 है — घटक छिपाएँ, अन्यथा दिखाएँ। यह single source of truth सिद्धांत के अनुरूप है।

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 के माध्यम से स्पष्ट जाँच को ?? या ?: से बदला जा सकता है, जो कोड को छोटा करता है और पठनीयता में सुधार करता है।
  • सार्वजनिक API में Nullable — यदि फ़ंक्शन nullable स्वीकार करता है, तो प्रत्येक कॉल को जाँच की आवश्यकता होती है। डिफ़ॉल्ट मान या ओवरलोड के साथ non-null को प्राथमिकता दें।

अक्सर पूछे जाने वाले प्रश्न

Kotlin Nullable Swift Optional से कैसे भिन्न है?

Swift Optional — some और none केसों वाला enum, ढेर पर ऑब्जेक्ट। Kotlin nullable — प्रकार प्रणाली में एनोटेशन, रैपर बनाए बिना कंपाइलर द्वारा जाँचा जाता है। Kotlin वाक्यगत रूप से अधिक संक्षिप्त है, Swift pattern-matching में अधिक शक्तिशाली है।

क्या 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, जो pattern-matching और map/flatMap प्रदान करता है। Kotlin nullable — प्रकार प्रणाली का हिस्सा संक्षिप्त ऑपरेटरों ?., ?:, !! के साथ।
  • Optional chaining (Swift ?.) और सुरक्षित कॉल (Kotlin ?.) बिना नेस्टेड जाँच के पदानुक्रमित डेटा के साथ काम करने की अनुमति देते हैं।
  • Nil-coalescing (??) और एल्विस ऑपरेटर (?:) स्पष्ट if-else शाखाओं के बिना डिफ़ॉल्ट मान प्रदान करते हैं।
  • Smart cast Kotlin में जाँच के बाद स्वचालित रूप से nullable को non-null में बदल देता है, स्पष्ट रूपांतरणों की संख्या को कम करता है।
  • प्रोडक्शन में force unwrap (! / !!), अत्यधिक if-let और बिना आवश्यकता के सार्वजनिक API में nullable प्रकारों से बचें।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें