C# अकादमी · पाठ

Null से सुरक्षा

Validation और पैटर्न।

पाठ 4, कुल 4 में से13 चरण

Null से सुरक्षा, CoddyKit पर C# अकादमी का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C# अकादमी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

रिक्त मानों से सुरक्षा क्यों?

अप्रत्याशित null पाने वाली विधि अक्सर बाद में कॉल-स्टैक की गहराई में भ्रमित करने वाले NullReferenceException के साथ क्रैश हो जाती है।

सुरक्षा-जाँच का अर्थ है प्राचलों की शुरुआत में ही जाँच करना और स्पष्ट रूप से विफल होना, ताकि त्रुटि सीधे वास्तविक कारण की ओर संकेत करे।

पारंपरिक रिक्त मान जाँच

सबसे सरल सुरक्षा-जाँच एक स्पष्ट जाँच है, जो आवश्यक प्राचल के रिक्त होने पर ArgumentNullException उत्पन्न करती है।

यह आपकी विधि की सीमा पर, कोई भी काम शुरू होने से पहले, प्रविष्टि की पुष्टि करती है।

void Save(string path)
{
    if (path == null)
        throw new System.ArgumentNullException(nameof(path));
    System.Console.WriteLine(path);
}

nameof का उपयोग

पहले से लिखी हुई स्ट्रिंग के बजाय nameof(path) दें। तब अपवाद सटीक प्राचल का नाम बताएगा और प्राचल का नाम बदलने पर भी सही रहेगा।

अपवाद दर्ज होने पर इससे त्रुटि-निवारण बहुत आसान हो जाता है।

void Greet(string user)
{
    if (user is null)
        throw new System.ArgumentNullException(nameof(user));
    System.Console.WriteLine("Hi " + user);
}

ThrowIfNull सहायक

आधुनिक C# में ArgumentNullException.ThrowIfNull(arg) उपलब्ध है। यह रिक्त मान की जाँच करता है और सही प्राचल नाम के साथ अपने-आप अपवाद उत्पन्न करता है।

यह संक्षिप्त है और वर्तमान .NET कोड में पसंदीदा सुरक्षा-जाँच शैली है।

void Process(object data)
{
    System.ArgumentNullException.ThrowIfNull(data);
    System.Console.WriteLine("Processing");
}

चलने योग्य सुरक्षा-जाँच

यह प्रोग्राम दिखाता है कि सुरक्षा-जाँच रिक्त प्राचल को पकड़कर बाद में क्रैश होने के बजाय उसे साफ़-सुथरे ढंग से रिपोर्ट करती है।

इसे चलाकर देखें कि अपवाद संदेश गलत प्राचल का नाम कैसे बताता है।

using System;

class Program
{
    static void Print(string text)
    {
        ArgumentNullException.ThrowIfNull(text);
        Console.WriteLine(text);
    }

    static void Main()
    {
        try { Print(null); }
        catch (ArgumentNullException ex) { Console.WriteLine(ex.ParamName); }
    }
}

?? throw से सुरक्षा-जाँच

आप ?? को throw के साथ उपयोग करके मान-निर्धारण और सुरक्षा-जाँच को मिला सकते हैं। इससे एक ही पंक्ति में जाँच और मान-संग्रह हो जाता है।

किसी फ़ील्ड में मान निर्धारित करते समय निर्माताओं में यह एक लोकप्रिय प्रतिरूप है।

class Service
{
    private readonly string _name;
    public Service(string name)
        => _name = name ?? throw new System.ArgumentNullException(nameof(name));
}

खाली और रिक्त मान में अंतर

स्ट्रिंग के लिए रिक्त और खाली होना अलग-अलग समस्याएँ हैं। दोनों को एक साथ पकड़ने के लिए string.IsNullOrEmpty या string.IsNullOrWhiteSpace का उपयोग करें।

खाली लेकिन रिक्त न होने वाले मान के लिए ArgumentException उपयुक्त है, ArgumentNullException नहीं।

void SetName(string name)
{
    if (string.IsNullOrWhiteSpace(name))
        throw new System.ArgumentException("Name required", nameof(name));
}

प्रतिरूपों से सुरक्षा-जाँच

is null और is not null प्रतिरूप स्पष्ट दिखाई देते हैं और पुनर्परिभाषित समानता संचालकों से प्रभावित नहीं हो सकते।

जब कोई प्रकार == को नए तरीके से परिभाषित कर सकता हो, तब == null के बजाय is null को प्राथमिकता दें।

object value = null;
if (value is null)
    System.Console.WriteLine("It is null");
if (value is not null)
    System.Console.WriteLine("Has value");

अपवाद उत्पन्न करने के बजाय पूर्वनिर्धारित मान

हर रिक्त मान त्रुटि नहीं होता। कभी-कभी अपवाद उत्पन्न करने से बेहतर कोई उचित पूर्वनिर्धारित मान देना होता है।

जब रिक्त मान स्वीकार्य हो, तब ?? का उपयोग करें और केवल तभी अपवाद उत्पन्न करें जब मान वास्तव में आवश्यक हो।

string BuildPath(string folder)
{
    folder ??= "/tmp";
    return folder + "/file.txt";
}

रिक्त-योग्य संदर्भ प्रकारों से सहायता

रिक्त-योग्य संदर्भ प्रकार सक्षम होने पर संकलक आपको चेतावनी देता है कि संभवतः रिक्त मान से संदर्भ हटाकर मान पढ़ा जा सकता है। इससे चलते समय से पहले त्रुटियाँ पकड़ी जाती हैं।

string (रिक्त नहीं) और string? (रिक्त-योग्य) घोषित करने से आपका आशय स्पष्ट होता है और विश्लेषक को मार्गदर्शन मिलता है।

#nullable enable
string required = "ok";
string? optional = null;
System.Console.WriteLine(optional?.Length ?? 0);

सुरक्षा-जाँच के बाद सुरक्षित उपयोग

विधि की शुरुआत में सुरक्षा-जाँच करने के बाद, उसके शेष भाग में बार-बार रिक्त मान की जाँच किए बिना उस मान का उपयोग किया जा सकता है।

यह प्रोग्राम पहले सुरक्षा-जाँच करता है और फिर प्राचल का भरोसे के साथ उपयोग करता है।

using System;

class Program
{
    static int Length(string s)
    {
        ArgumentNullException.ThrowIfNull(s);
        return s.Length;
    }

    static void Main()
    {
        Console.WriteLine(Length("hello"));
    }
}

त्वरित जाँच

रिक्त मानों से सुरक्षा-जाँच के बारे में अपनी समझ जाँचिए।

पुनरावलोकन

विधि की शुरुआत में आवश्यक प्राचलों की सुरक्षा-जाँच करें। स्पष्ट त्रुटियों के लिए ArgumentNullException.ThrowIfNull या ?? throw को nameof के साथ उपयोग करें।

खाली स्ट्रिंग के लिए string.IsNullOrWhiteSpace, सुरक्षित जाँच के लिए is null प्रतिरूप, और विफल होने के बजाय पूर्वनिर्धारित मान स्वीकार्य होने पर ?? का उपयोग करें।

शुरुआत निःशुल्क

एआई शिक्षक के साथ C# सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
93
पाठ
346

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

क्या “Null से सुरक्षा” पाठ निःशुल्क है?

हाँ—“Null से सुरक्षा” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C# अकादमी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Null से सुरक्षा” में मैं क्या सीखूँगा?

Validation और पैटर्न। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C# अकादमी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C# अकादमी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C# अकादमी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“Null से सुरक्षा” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C# अकादमी पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C# अकादमी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Nullable Value Types
  2. Null-Conditional Operator
  3. Null-Coalescing Operators
  4. Null से सुरक्षा
← C# अकादमी पर वापस जाएँ