
Microsoft C# 8 में एक नई सुविधा जोड़ रहा है जिसे Nullable Reference Types कहा जाता है। जो पहली बार में भ्रामक है क्योंकि सभी reference types nullable हैं… तो यह कैसे अलग है? आगे चलकर, यदि यह सुविधा सक्षम है, तो references types non-nullable हैं, जब तक कि आप उन्हें स्पष्ट रूप से nullable के रूप में चिह्नित न करें।
मुझे समझाने दें।
Nullable Reference Types
जब Nullable Reference Types सक्षम होते हैं और compiler का मानना है कि एक reference type में null होने की संभावना है, तो यह आपको चेतावनी देता है। आपको Visual Studio से चेतावनी संदेश दिखेंगे:
और build चेतावनियां:
इस चेतावनी को हटाने के लिए, reference type के पीछे एक प्रश्न चिह्न जोड़ें। उदाहरण के लिए:
public string StringTest()
{
string? notNull = null;
return notNull;
}
अब reference type वैसे ही व्यवहार करता है जैसे C# 8 से पहले करता था।
यह सुविधा किसी भी C# फ़ाइल के शीर्ष पर <span class="inline-code"> #nullable enable </span>
जोड़कर या .csproj फ़ाइल में <span class="inline-code">lt;NullableReferenceTypes>true</NullableReferenceTypes></span>
जोड़कर सक्षम की जाती है। बॉक्स से बाहर यह सक्षम नहीं है, जो एक अच्छी बात है यदि यह सक्षम होता तो कोई भी मौजूदा code-base संभवतः क्रिसमस ट्री की तरह जगमगा उठता।
Null बहस
Microsoft अब यह सुविधा क्यों जोड़ रहा है? Nulls भाषा का हिस्सा रहे हैं, खैर शुरुआत से? ईमानदारी से, मुझे नहीं पता क्यों। मैंने हमेशा nulls का उपयोग किया है, यह C# में जीवन का एक तथ्य है। मुझे एहसास नहीं था कि nulls न होना एक विकल्प था… शायद उनके बिना जीवन बेहतर होगा। हमें पता चल जाएगा।
क्या आपको nulls का उपयोग करना चाहिए या नहीं? मैंने चल रही बहस को संक्षेप में प्रस्तुत किया है जैसा कि मैं उन्हें समझता हूं।
के पक्ष में
Nulls के पक्ष में तर्क आम तौर पर यह है कि एक object की अज्ञात स्थिति होती है। यह अज्ञात स्थिति null के साथ दर्शायी जाती है। आप इसे SQL Server में bit data type के साथ देखते हैं, जिसके 3 values हैं, null (set नहीं), 0 और 1। आप इसे UI’s में भी देखते हैं, जहां कभी-कभी यह जानना महत्वपूर्ण होता है कि उपयोगकर्ता ने किसी field को छुआ है या नहीं। कोई काउंटर कर सकता है, “null के बजाय, क्यों न एक unknown state type या ‘not set’ state बनाएं?” यह null से कैसे अलग है? आपको अभी भी इस अतिरिक्त state की जांच करनी होगी। अब आप प्रत्येक instance के लिए unknown states बना रहे हैं। क्यों न सिर्फ null का उपयोग करें और एक global unknown state रखें?
के विरुद्ध
Nulls के विरुद्ध तर्क यह है कि यह एक अलग data type है और हर बार जब आप reference type का उपयोग करते हैं तो इसकी जांच करनी होती है। परिणाम इस तरह का कोड होता है:
var user = GetUser(username, password);
if(user != null)
{
DoSomethingWithUser(user);
} else
{
SetUserNotFoundErrorMessage()
}
यदि GetUser method सभी मामलों में एक user return करता, जिसमें user न मिलने पर भी शामिल है। यदि कोड कभी null return नहीं करता, तो इसके विरुद्ध सुरक्षा करना बर्बादी है और आदर्श रूप से, यह कोड को सरल बनाता है। हालांकि, किसी बिंदु पर, आपको empty user की जांच करनी होगी और error message प्रदर्शित करना होगा। Null का उपयोग न करना user न मिलने के business case को भरने की आवश्यकता को नहीं हटाता।
क्या यह सुविधा एक अच्छा विचार है?
इस सुविधा का उद्देश्य nulls के उपयोग को समाप्त करना नहीं है, बल्कि इसके बजाय यह प्रश्न पूछना है: “क्या कोई बेहतर तरीका है?” और कभी-कभी उत्तर “नहीं” होता है। यदि हम थोड़े से पूर्व-चिंतन के साथ nulls की निरंतर जांच को समाप्त कर सकते हैं, जो बदले में हमारे कोड को सरल बनाता है। मैं तैयार हूं। अच्छी खबर यह है कि C# ने nulls के साथ काम करना तुच्छ बना दिया है।
मुझे डर है कि कुछ लोग एक कट्टरपंथी रुख अपनाएंगे और system के नुकसान के लिए nulls को समाप्त करने पर जोर देंगे। यह एक मूर्खतापूर्ण प्रयास है, क्योंकि nulls C# के अभिन्न अंग हैं।
क्या Nullable Reference Types एक अच्छा विचार है? यह है, यदि अंतिम परिणाम सरल और कम error prone कोड है।
लेखक: चक कॉनवे सॉफ्टवेयर इंजीनियरिंग और जेनेरेटिव AI में विशेषज्ञता रखते हैं। उनसे सोशल मीडिया पर जुड़ें: X (@chuckconway) या उन्हें YouTube पर देखें।