C# में null लिटरल का इस्तेमाल किसी वैल्यू के न होने को दर्शाने के लिए किया जाता है। नलएबल टाइप वह टाइप होता है जिसमें null वैल्यू रखी जा सकती है।
C# 8.0 से पहले रेफरेंस टाइप हमेशा नलएबल होते थे और वैल्यू टाइप नहीं। किसी वैल्यू टाइप के आगे प्रश्न चिह्न (?) लगाकर उसे नलएबल बनाया जा सकता है।
string nullableReferenceType = "hello";
nullableReferenceType = null; // Valid as type is nullable
int nonNullableValueType = 5;
nonNullableValueType = null; // Compile error as type is not nullable
int? nullableValueType = 5; // Define nullable value type
nullableValueType = null; // Valid as type is nullable
किसी null वेरिएबल के मेंबर तक पहुँचने पर कंपाइल एरर नहीं मिलती, बल्कि रनटाइम पर NullReferenceException फेंका जाता है:
string sentence = null;
// Throws NullReferenceException at runtime
sentence.Length;
इस आम गलती से बचने के लिए C# 8 में आप ऐसा फीचर चुन सकते हैं जो रेफरेंस टाइप को डिफॉल्ट रूप से नॉन-नलएबल बना देता है:
string nonNullableReferenceType = "book";
nonNullableReferenceType = null; // Compile warning (no error!)
string? nullableReferenceType = "movie";
nullableReferenceType = null; // Valid as type is nullable
नलएबल वैल्यू के साथ सुरक्षित तरीके से काम करने के लिए उनका इस्तेमाल करने से पहले जाँच लीजिए कि वे null हैं या नहीं:
string NormalizedName(string? name)
{
if (name == null)
{
return "UNKNOWN";
}
// Value is not null at this point, so no compile warning
// and no runtime NullReferenceException being thrown
return name.ToUpper();
}
NormalizedName(null); // => "UNKNOWN"
NormalizedName("Elisabeth"); // => "ELISABETH"
?? ऑपरेटर की मदद से आप तब डिफॉल्ट वैल्यू लौटा सकते हैं जब वैल्यू null हो:
string? name1 = "John";
name1 ?? "Paul"; // => "John"
string? name2 = null;
name2 ?? "George"; // => "George"
?. ऑपरेटर की मदद से आप किसी ऐसी वैल्यू पर सुरक्षित तरीके से मेंबर कॉल कर सकते हैं जो null हो सकती है:
string? fruit = "apple";
fruit?.Length; // => 5
string? vegetable = null;
vegetable?.Length; // => null
इस अभ्यास में आप फैक्ट्री के कर्मचारियों के लिए नाम बैज छापने का कोड लिखेंगे।
कर्मचारियों के पास आईडी, नाम और विभाग का नाम होता है। कर्मचारी के बैज लेबल इस तरह बनाए जाते हैं: "[id] - name - DEPARTMENT"। कर्मचारी का बैज लेबल लौटाने के लिए (static) Badge.Print() मेथड को लागू कीजिए:
Badge.Print(734, "Ernest Johnny Payne", "Strategic Communication");
// => "[734] - Ernest Johnny Payne - STRATEGIC COMMUNICATION"
ध्यान दीजिए कि लेबल पर विभाग का नाम बड़े अक्षरों में होना चाहिए।
कंप्यूटर सिस्टम की एक अजीब बात के कारण, नए कर्मचारियों के पास फैक्ट्री में काम शुरू करते समय कभी-कभी अभी आईडी नहीं होती। चूँकि बैज ज़रूरी होते हैं, उन्हें आईडी प्रीफिक्स के बिना एक अस्थायी बैज मिलेगा। अभी आईडी न रखने वाले नए कर्मचारियों को संभालने के लिए (static) Badge.Print() मेथड को बदलिए:
Badge.Print(id: null, "Jane Johnson", "Procurement");
// => "Jane Johnson - PROCUREMENT"
फैक्ट्री के मालिक को भी हर समय बैज पहनना पड़ता है। लेकिन मालिक का कोई विभाग नहीं होता। ऐसी स्थिति में लेबल पर विभाग के नाम की जगह "OWNER" छपना चाहिए। मालिक का लेबल छापने के लिए (static) Badge.Print() मेथड को बदलिए:
Badge.Print(254, "Charlotte Hale", department: null);
// => "[254] - Charlotte Hale - OWNER"
ध्यान दीजिए कि मालिक भी नया कर्मचारी हो सकता है:
Badge.Print(id: null, "Charlotte Hale", department: null);
// => "Charlotte Hale - OWNER"
Exercism पर साइन अप कीजिए और C# को 62 कॉन्सेप्ट178 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।