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

Codebase को NRT में माइग्रेट करना

चरणबद्ध migration strategy अपनाएँ: warnings सक्षम करें, APIs में annotations जोड़ें, समस्याएँ ठीक करें और false-positives से बचें।

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

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

माइग्रेशन की चुनौती

किसी मौजूदा कोडबेस में NRT सक्षम करने पर आम तौर पर सैकड़ों चेतावनियाँ उत्पन्न होती हैं। एक ही बार में सब कुछ बदलने वाला तरीका जोखिमपूर्ण है। इसके बजाय चरणबद्ध माइग्रेशन अपनाएँ: चेतावनियों को धीरे-धीरे सक्षम करें, उन्हें एक-एक फ़ाइल में ठीक करें और प्रगति कभी न रुकने दें।

चरण 1: केवल चेतावनियाँ सक्षम करें

<Nullable>warnings</Nullable> से शुरुआत करें, enable से नहीं। इससे गैर-एनोटेटेड कोड को त्रुटि माने बिना चेतावनियाँ सक्रिय हो जाती हैं — यह एक सुरक्षित शुरुआती कदम है।

<!-- Phase 1: warnings only, no breaking change -->
<PropertyGroup>
  <Nullable>warnings</Nullable>
</PropertyGroup>

<!-- Phase 2: full enable per file as you migrate -->
<!-- Phase 3: switch to enable globally when done -->

चरण 2: प्रत्येक फ़ाइल के लिए सक्षम करें

जिस फ़ाइल पर आप काम कर रहे हों, उसके शीर्ष पर #nullable enable जोड़ें। इससे बदलाव केवल उन फ़ाइलों तक सीमित रहते हैं जिन्हें आप सक्रिय रूप से संपादित कर रहे हैं और समीक्षा प्रबंधनीय बनी रहती है।

#nullable enable
// Now this file has full NRT analysis

public class OrderService
{
    private readonly IOrderRepository _repo;
    // Compiler now warns about uninitialized non-nullable fields,
    // unsafe dereferences, and assignment to non-nullable

    public OrderService(IOrderRepository repo) => _repo = repo;
}

// Other files without #nullable enable are still unchecked

चेतावनियों का वर्गीकरण

चेतावनियाँ दो श्रेणियों में आती हैं: जिन्हें दबाना सुरक्षित है (ORM एंटिटीज़, DI से डाले गए फ़ील्ड) और वास्तविक बग (वास्तव में नल मानों को संदर्भित करना)। किसी भी चेतावनी को दबाने से पहले इन दोनों में अंतर करें।

// Category 1: safe to suppress with null!
// EF Core navigation properties — set by EF, never null in practice
public class Order
{
    public Customer Customer { get; set; } = null!;
}

// Category 2: real bug — must fix
public string GetFullName()
{
    return FirstName + " " + LastName; // LastName was string? -- BUG!
}

कंस्ट्रक्टर चेतावनी CS8618 को ठीक करना

जब कोई नॉन-नल योग्य प्रॉपर्टी कंस्ट्रक्टर में सेट नहीं की जाती, तब CS8618 उत्पन्न होता है। इसे ठीक करने का पसंदीदा तरीका है कि कंस्ट्रक्टर में उस मान को अनिवार्य बनाया जाए। = null! का उपयोग केवल फ़्रेमवर्क द्वारा सेट किए जाने वाले मानों के लिए करें।

// BEFORE (CS8618)
public class Product
{
    public string Name { get; set; }   // warning
    public Category Category { get; set; } // warning
}

// AFTER — constructor required:
public class Product
{
    public string Name { get; set; }
    public Category Category { get; set; }

    public Product(string name, Category category)
    {
        Name = name;
        Category = category;
    }
}

लेगेसी API को संभालना

तृतीय-पक्ष या लेगेसी API में एनोटेशन नहीं हो सकते। उनके रिटर्न प्रकार oblivious होते हैं (न तो नल योग्य, न ही नॉन-नल योग्य)। स्पष्टता के लिए उनके परिणामों को नल योग्य चरों में असाइन करें।

// Legacy API returns 'string' but might be null (oblivious type)
string? legacyResult = OldLibrary.GetValue(); // store as nullable
if (legacyResult is null) return;

// Or convert at the boundary:
string safe = OldLibrary.GetValue() ?? "";

// For third-party types, check if they have NRT annotations:
// NuGet packages often add nullable annotations in newer versions

विशिष्ट चेतावनियाँ दबाने के लिए #pragma का उपयोग

जब कोई चेतावनी वास्तव में गलत सकारात्मक हो और = null! अत्यधिक शोरपूर्ण लगे, तो केवल संबंधित पंक्ति के दायरे में #pragma warning disable का उपयोग करें।

// Suppress for a specific case with explanation:
#pragma warning disable CS8618 // ORM populates this via reflection
public DbSet<Product> Products { get; set; }
#pragma warning restore CS8618

// Or inline with a comment:
public DbSet<Order> Orders { get; set; } = null!; // set by EF Core

NRT चेतावनियों को त्रुटि मानना

किसी फ़ाइल की सभी चेतावनियाँ ठीक हो जाने के बाद, प्रतिगमन रोकने के लिए <WarningsAsErrors>Nullable</WarningsAsErrors> जोड़ें (या CI में इसे लागू करें) — कोई भी नई नल-संबंधी समस्या बिल्ड विफल कर देगी।

<!-- After full migration: treat nullable warnings as build errors -->
<PropertyGroup>
  <Nullable>enable</Nullable>
  <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
  <!-- Or selectively: -->
  <!-- <WarningsAsErrors>CS8600;CS8602;CS8603</WarningsAsErrors> -->
</PropertyGroup>

सार्वजनिक API पर एनोटेशन लगाना

जब आपकी लाइब्रेरी का उपयोग अन्य लोग करते हैं, तब NRT एनोटेशन आपके सार्वजनिक API अनुबंध का हिस्सा बन जाते हैं। जब परिणाम नल हो सकता हो, तो T? लौटाएँ; जब परिणाम निश्चित रूप से नल न हो, तो T लौटाएँ।

public interface IProductService
{
    // Contract: FindById MAY return null, GetById never does
    Product? FindById(int id);
    Product  GetById(int id);  // throws if not found

    // Collection: never null (may be empty)
    IReadOnlyList<Product> GetAll();

    // String: may be empty but not null
    string GetSummary(int id);
}

माइग्रेशन के मापदंड और ट्रैकिंग

#nullable enable वाली फ़ाइलों की गिनती करके या CI में dotnet build 2>&1 | grep CS86 चलाकर प्रगति पर नज़र रखें। पूरे प्रोजेक्ट के माइग्रेशन के लिए एक लक्ष्य तिथि निर्धारित करें।

# Count NRT warnings in current build
dotnet build 2>&1 | grep -c 'CS860[0-9]\|CS861[0-9]\|CS862[0-9]'

# List files still missing #nullable enable
grep -rL '#nullable enable' src/ --include='*.cs'

# Track in CI: fail if warning count increases
# Set a budget: warnings <= N, where N decreases each sprint

त्वरित जाँच

नॉन-नल योग्य प्रॉपर्टी पर किया गया = null! असाइनमेंट क्या दर्शाता है?

पुनरावलोकन: NRT पर माइग्रेशन

मुख्य बातें:

  • चरणबद्ध माइग्रेशन अपनाएँ: चेतावनी मोड → प्रति-फ़ाइल सक्षम करना → वैश्विक रूप से सक्षम करना
  • वास्तविक बग (उन्हें ठीक करें) और ORM/DI पैटर्न (= null! का उपयोग करें) में अंतर करें
  • CS8618 को दबाने के बजाय कंस्ट्रक्टर में मान अनिवार्य बनाकर ठीक करें
  • स्पष्टता के लिए लेगेसी API के परिणामों को T? चरों में असाइन करें
  • प्रतिगमन रोकने के लिए CI में नल योग्य चेतावनियों को त्रुटि मानें
  • एनोटेटेड सार्वजनिक API उपभोक्ताओं के लिए स्पष्ट अनुबंध बन जाते हैं
शुरुआत निःशुल्क

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

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

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

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

क्या “Codebase को NRT में माइग्रेट करना” पाठ निःशुल्क है?

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

“Codebase को NRT में माइग्रेट करना” में मैं क्या सीखूँगा?

चरणबद्ध migration strategy अपनाएँ: warnings सक्षम करें, APIs में annotations जोड़ें, समस्याएँ ठीक करें और false-positives से बचें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C# अकादमी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

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

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

“Codebase को NRT में माइग्रेट करना” पाठ पूरा करने में कितना समय लगता है?

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

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

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

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

  1. NRT सक्षम करना और समझना
  2. Annotations: ?, !, MaybeNull और NotNull
  3. Null-Conditional और Null-Coalescing Operators
  4. Codebase को NRT में माइग्रेट करना
← C# अकादमी पर वापस जाएँ