हिन्दी

जावास्क्रिप्ट के नलीश कोलेसिंग ऑपरेटर (??) का उपयोग करके डिफ़ॉल्ट वैल्यू असाइनमेंट को बेहतर बनाएँ। जानें कि यह OR ऑपरेटर (||) से कैसे अलग है और व्यावहारिक उदाहरण देखें।

जावास्क्रिप्ट नलीश कोलेसिंग: डिफ़ॉल्ट वैल्यू असाइनमेंट के लिए एक व्यापक गाइड

जावास्क्रिप्ट में, डिफ़ॉल्ट वैल्यू असाइन करना एक आम काम है। पारंपरिक रूप से, डेवलपर्स इस उद्देश्य के लिए OR ऑपरेटर (||) का उपयोग करते आए हैं। हालाँकि, ECMAScript 2020 में पेश किया गया नलीश कोलेसिंग ऑपरेटर (??), डिफ़ॉल्ट वैल्यू असाइनमेंट को संभालने का एक अधिक सटीक और विश्वसनीय तरीका प्रदान करता है, विशेष रूप से जब null या undefined वैल्यूज से निपटना हो। यह गाइड नलीश कोलेसिंग ऑपरेटर की गहराई से जानकारी प्रदान करती है, जिसमें इसके सिंटैक्स, व्यवहार, OR ऑपरेटर से अंतर, और व्यावहारिक उपयोग के मामलों का पता लगाया गया है।

नलीश कोलेसिंग क्या है?

नलीश कोलेसिंग ऑपरेटर (??) एक लॉजिकल ऑपरेटर है जो अपने दाहिने हाथ के ऑपरेंड को तब लौटाता है जब उसका बायां हाथ का ऑपरेंड null या undefined होता है। अन्यथा, यह अपने बाएं हाथ के ऑपरेंड को लौटाता है। सरल शब्दों में, यह केवल तभी एक डिफ़ॉल्ट वैल्यू प्रदान करता है जब कोई वेरिएबल सख्ती से null या undefined हो।

सिंटैक्स

नलीश कोलेसिंग ऑपरेटर का सिंटैक्स सीधा है:

leftOperand ?? rightOperand

यहां, leftOperand वह वेरिएबल या एक्सप्रेशन है जिसे आप null या undefined के लिए जाँचना चाहते हैं, और rightOperand वह डिफ़ॉल्ट वैल्यू है जिसे आप असाइन करना चाहते हैं यदि leftOperand वास्तव में null या undefined है।

उदाहरण

निम्नलिखित उदाहरण पर विचार करें:

const username = null ?? "Guest";
console.log(username); // आउटपुट: Guest

const age = undefined ?? 25;
console.log(age); // आउटपुट: 25

const city = "London" ?? "Unknown";
console.log(city); // आउटपुट: London

इस उदाहरण में, username को डिफ़ॉल्ट वैल्यू "Guest" दी गई है क्योंकि यह शुरू में null है। इसी तरह, age को 25 दिया गया है क्योंकि यह undefined से शुरू होता है। हालाँकि, city अपना मूल मान, "London", बनाए रखता है, क्योंकि यह न तो null है और न ही undefined

नलीश बनाम फॉल्सी वैल्यूज

जावास्क्रिप्ट में नलीश और फॉल्सी वैल्यूज के बीच के अंतर को समझना महत्वपूर्ण है। एक नलीश वैल्यू या तो null या undefined होती है। एक फॉल्सी वैल्यू वह वैल्यू है जिसे बूलियन संदर्भ में सामना करने पर false माना जाता है। फॉल्सी वैल्यूज में शामिल हैं:

मुख्य अंतर यह है कि नलीश कोलेसिंग ऑपरेटर केवल null या undefined के लिए जाँच करता है, जबकि OR ऑपरेटर (||) किसी भी फॉल्सी वैल्यू के लिए जाँच करता है।

?? और || के बीच अंतर

OR ऑपरेटर (||) एक लॉजिकल OR ऑपरेटर है जो दाहिने हाथ के ऑपरेंड को लौटाता है यदि बायां हाथ का ऑपरेंड फॉल्सी हो। हालांकि इसका उपयोग डिफ़ॉल्ट वैल्यू असाइन करने के लिए किया जा सकता है, यह 0 या खाली स्ट्रिंग जैसी वैल्यूज से निपटने पर अप्रत्याशित व्यवहार का कारण बन सकता है।

उदाहरण: || की कमियाँ

const quantity = 0 || 10; // हमारा इरादा 10 का डिफ़ॉल्ट देना है यदि मात्रा गायब है
console.log(quantity); // आउटपुट: 10 (अप्रत्याशित!) क्योंकि 0 फॉल्सी है

const text = '' || 'Default Text'; // हमारा इरादा एक डिफ़ॉल्ट टेक्स्ट देना है यदि टेक्स्ट गायब है
console.log(text); // आउटपुट: Default Text (अप्रत्याशित!) क्योंकि '' फॉल्सी है

पहले उदाहरण में, हमारा इरादा केवल तभी 10 की डिफ़ॉल्ट मात्रा निर्दिष्ट करने का था जब quantity गायब थी (null या undefined)। हालाँकि, क्योंकि 0 एक फॉल्सी वैल्यू है, OR ऑपरेटर ने गलत तरीके से डिफ़ॉल्ट वैल्यू निर्दिष्ट कर दी। इसी तरह, खाली स्ट्रिंग डिफ़ॉल्ट टेक्स्ट को दिखाए जाने का कारण बनती है, भले ही स्ट्रिंग मौजूद हो (लेकिन खाली हो)।

सटीकता के लिए ?? का उपयोग

आइए पिछले उदाहरण को नलीश कोलेसिंग ऑपरेटर का उपयोग करके फिर से लिखें:

const quantity = 0 ?? 10;
console.log(quantity); // आउटपुट: 0 (सही!)

const text = '' ?? 'Default Text';
console.log(text); // आउटपुट: '' (सही!)

अब, आउटपुट अपेक्षित है। नलीश कोलेसिंग ऑपरेटर केवल null या undefined के लिए जाँच करता है, इसलिए 0 और '' को मान्य वैल्यूज के रूप में माना जाता है, और उनके मूल मान संरक्षित रहते हैं।

नलीश कोलेसिंग के उपयोग के मामले

नलीश कोलेसिंग ऑपरेटर विभिन्न परिदृश्यों में उपयोगी है जहाँ आपको केवल तभी डिफ़ॉल्ट वैल्यूज प्रदान करने की आवश्यकता होती है जब कोई वेरिएबल सख्ती से null या undefined हो। यहाँ कुछ सामान्य उपयोग के मामले दिए गए हैं:

1. वैकल्पिक फ़ंक्शन पैरामीटर्स को संभालना

वैकल्पिक पैरामीटर्स के साथ एक फ़ंक्शन को परिभाषित करते समय, आप डिफ़ॉल्ट वैल्यूज प्रदान करने के लिए नलीश कोलेसिंग ऑपरेटर का उपयोग कर सकते हैं यदि पैरामीटर्स प्रदान नहीं किए गए हैं।

function greet(name, greeting) {
  const userName = name ?? "User";
  const userGreeting = greeting ?? "Hello";
  console.log(`${userGreeting}, ${userName}!`);
}

greet(); // आउटपुट: Hello, User!
greet("Alice"); // आउटपुट: Hello, Alice!
greet("Bob", "Greetings"); // आउटपुट: Greetings, Bob!

2. डिफ़ॉल्ट कॉन्फ़िगरेशन विकल्प सेट करना

कॉन्फ़िगरेशन ऑब्जेक्ट्स के साथ काम करते समय, आप यह सुनिश्चित करने के लिए नलीश कोलेसिंग ऑपरेटर का उपयोग कर सकते हैं कि यदि कुछ कॉन्फ़िगरेशन विकल्प निर्दिष्ट नहीं हैं तो डिफ़ॉल्ट वैल्यूज का उपयोग किया जाए।

const config = {
  timeout: 5000,
  retries: 3
};

function fetchData(options) {
  const timeout = options.timeout ?? 10000; // 10 सेकंड का डिफ़ॉल्ट टाइमआउट
  const retries = options.retries ?? 5; // डिफ़ॉल्ट 5 रिट्राइज
  console.log(`Timeout: ${timeout}, Retries: ${retries}`);
}

fetchData(config); // आउटपुट: Timeout: 5000, Retries: 3
fetchData({}); // आउटपुट: Timeout: 10000, Retries: 5
fetchData({timeout:null, retries: undefined}); // आउटपुट: Timeout: 10000, Retries: 5

3. नेस्टेड ऑब्जेक्ट प्रॉपर्टीज तक पहुँचना

नेस्टेड ऑब्जेक्ट्स की प्रॉपर्टीज तक पहुँचते समय, नलीश कोलेसिंग ऑपरेटर को ऑप्शनल चेनिंग (?.) के साथ जोड़ा जा सकता है ताकि डिफ़ॉल्ट वैल्यूज प्रदान की जा सकें यदि कोई भी मध्यवर्ती प्रॉपर्टीज null या undefined हैं।

const user = {
  profile: {
    address: {
      city: "New York"
    }
  }
};

const cityName = user?.profile?.address?.city ?? "Unknown";
console.log(cityName); // आउटपुट: New York

const unknownUser = {};
const unknownCityName = unknownUser?.profile?.address?.city ?? "Unknown";
console.log(unknownCityName); // आउटपुट: Unknown

4. APIs और बाहरी डेटा के साथ काम करना

APIs या बाहरी स्रोतों से डेटा प्राप्त करते समय, नलीश कोलेसिंग ऑपरेटर का उपयोग डिफ़ॉल्ट वैल्यूज प्रदान करने के लिए किया जा सकता है यदि कुछ डेटा फ़ील्ड गायब हैं या उनमें null या undefined वैल्यूज हैं। विभिन्न क्षेत्रों से उपयोगकर्ता डेटा पुनर्प्राप्त करने पर विचार करें। मान लें कि कुछ क्षेत्र अपने उपयोगकर्ता डेटा में `country` फ़ील्ड शामिल नहीं कर सकते हैं।

async function getUserData(userId) {
  try {
    const response = await fetch(`https://api.example.com/users/${userId}`);
    const data = await response.json();
    const country = data.country ?? "Unknown Country";
    const timezone = data.timezone ?? "UTC";
    console.log(`User is from: ${country}, Timezone: ${timezone}`);
  } catch (error) {
    console.error("Error fetching user data:", error);
  }
}

// विभिन्न API प्रतिक्रियाओं का अनुकरण:
const userWithCountry = { name: "John", country: "USA", timezone: "EST" };
const userWithoutCountry = { name: "Jane", timezone: "GMT" };

// इसे परखने के लिए, आपको एक वास्तविक API या मॉक फेच की आवश्यकता होगी।
// प्रदर्शन के उद्देश्यों के लिए, आइए प्रतिक्रियाओं का अनुकरण करें:
global.fetch = async (url) => {
    if (url.includes("123")) {
        return { json: async () => userWithCountry };
    } else if (url.includes("456")) {
        return { json: async () => userWithoutCountry };
    }
    throw new Error("Unexpected URL");
};

getUserData(123); // आउटपुट: User is from: USA, Timezone: EST
getUserData(456); // आउटपुट: User is from: Unknown Country, Timezone: GMT

ऑपरेटर प्रेसिडेंस

नलीश कोलेसिंग ऑपरेटर की ऑपरेटर प्रेसिडेंस अपेक्षाकृत कम है। यह OR (||) और AND (&&) ऑपरेटरों से कम है। इसलिए, जब नलीश कोलेसिंग ऑपरेटर को अन्य लॉजिकल ऑपरेटरों के साथ मिलाते हैं, तो संचालन के क्रम को स्पष्ट रूप से परिभाषित करने के लिए कोष्ठक (parentheses) का उपयोग करना आवश्यक है। ऐसा करने में विफल रहने पर सिंटैक्स त्रुटियां या अप्रत्याशित व्यवहार हो सकता है।

उदाहरण: स्पष्टता के लिए कोष्ठक का उपयोग

// कोष्ठक के बिना (SyntaxError)
// const result = false || null ?? "Default"; // SyntaxError: Unexpected token '??'

// कोष्ठक के साथ (सही)
const result = false || (null ?? "Default");
console.log(result); // आउटपुट: Default

const anotherResult = (false || null) ?? "Default";
console.log(anotherResult); // आउटपुट: null

पहले उदाहरण में, कोष्ठक की कमी के कारण एक SyntaxError होता है क्योंकि जावास्क्रिप्ट इंजन संचालन के इच्छित क्रम को निर्धारित नहीं कर सकता है। कोष्ठक जोड़कर, हम स्पष्ट रूप से इंजन को पहले नलीश कोलेसिंग ऑपरेटर का मूल्यांकन करने के लिए कहते हैं। दूसरा उदाहरण मान्य है; हालाँकि, आउटपुट अलग है क्योंकि || एक्सप्रेशन का मूल्यांकन पहले किया जाता है।

ब्राउज़र संगतता

नलीश कोलेसिंग ऑपरेटर (??) एक अपेक्षाकृत नई सुविधा है, इसलिए ब्राउज़र संगतता पर विचार करना महत्वपूर्ण है, खासकर यदि आप पुराने ब्राउज़रों को लक्षित कर रहे हैं। अधिकांश आधुनिक ब्राउज़र नलीश कोलेसिंग ऑपरेटर का समर्थन करते हैं, जिनमें शामिल हैं:

यदि आपको पुराने ब्राउज़रों का समर्थन करने की आवश्यकता है, तो आप अपने कोड को जावास्क्रिप्ट के एक संगत संस्करण में बदलने के लिए बेबल (Babel) जैसे ट्रांसपाइलर का उपयोग कर सकते हैं। बेबल ?? ऑपरेटर को समकक्ष जावास्क्रिप्ट कोड में बदल देगा जो पुराने वातावरण में काम करता है।

सर्वोत्तम प्रथाएं

नलीश कोलेसिंग ऑपरेटर का प्रभावी ढंग से उपयोग करने के लिए यहां कुछ सर्वोत्तम प्रथाएं दी गई हैं:

वैश्विक विचार

वैश्विक दर्शकों के लिए विकास करते समय, डिफ़ॉल्ट वैल्यू असाइनमेंट से संबंधित निम्नलिखित बिंदुओं पर विचार करें:

उदाहरण: नलीश कोलेसिंग के साथ स्थानीयकरण

मान लीजिए कि आप उपयोगकर्ता के लोकेल के आधार पर विभिन्न भाषाओं में एक डिफ़ॉल्ट स्वागत संदेश प्रदर्शित करना चाहते हैं। यदि स्थानीयकृत संदेश उपलब्ध नहीं है तो आप एक डिफ़ॉल्ट संदेश प्रदान करने के लिए नलीश कोलेसिंग ऑपरेटर का उपयोग कर सकते हैं।

function getWelcomeMessage(locale) {
  const localizedMessages = {
    en: "Welcome!",
    fr: "Bienvenue !",
    de: "Willkommen!"
  };

  const message = localizedMessages[locale] ?? "Welcome!"; // यदि लोकेल नहीं मिलता है तो अंग्रेजी में डिफ़ॉल्ट करें
  return message;
}

console.log(getWelcomeMessage("fr")); // आउटपुट: Bienvenue !
console.log(getWelcomeMessage("es")); // आउटपुट: Welcome! (अंग्रेजी में डिफ़ॉल्ट हो रहा है)

निष्कर्ष

नलीश कोलेसिंग ऑपरेटर (??) जावास्क्रिप्ट भाषा में एक मूल्यवान সংযোজন है। यह OR ऑपरेटर (||) की तुलना में डिफ़ॉल्ट वैल्यू निर्दिष्ट करने का एक अधिक सटीक और विश्वसनीय तरीका प्रदान करता है, विशेष रूप से जब 0 या खाली स्ट्रिंग्स जैसी वैल्यूज से निपटना हो। इसके सिंटैक्स, व्यवहार और उपयोग के मामलों को समझकर, आप क्लीनर, अधिक रखरखाव योग्य कोड लिख सकते हैं जो डिफ़ॉल्ट वैल्यू असाइनमेंट को सटीक रूप से संभालता है। अपने प्रोजेक्ट्स में नलीश कोलेसिंग ऑपरेटर का उपयोग करते समय ब्राउज़र संगतता, ऑपरेटर प्रेसिडेंस और वैश्विक विचारों पर विचार करना याद रखें।

इस गाइड में उल्लिखित सर्वोत्तम प्रथाओं का पालन करके, आप अपने जावास्क्रिप्ट कोड की गुणवत्ता और विश्वसनीयता में सुधार के लिए नलीश कोलेसिंग ऑपरेटर का प्रभावी ढंग से लाभ उठा सकते हैं, जिससे यह अधिक मजबूत और समझने में आसान हो जाता है। याद रखें कि हमेशा अपने कोड में स्पष्टता और रखरखाव को प्राथमिकता दें, और नलीश कोलेसिंग ऑपरेटर इन लक्ष्यों को प्राप्त करने में एक शक्तिशाली उपकरण हो सकता है।