Web3 और DApp विकास की मूल बातें · पाठ

लूप और calldata तरकीबें

सस्ते ऑपरेशन

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

लूप और calldata तरकीबें, CoddyKit पर Web3 और DApp विकास की मूल बातें का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Web3 और DApp विकास की मूल बातें सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Web3 और DApp विकास की मूल बातें पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

लूप लागत बढ़ाते हैं

गैस के लिए लूप जोखिमपूर्ण होते हैं, क्योंकि उनके भीतर का हर संचालन हर पुनरावृत्ति में एक बार चलता है। लूप के भीतर एक महँगा कॉल भी आपके गैस बजट को समाप्त कर सकता है या ब्लॉक गैस सीमा तक पहुँचा सकता है।

लक्ष्य यह है कि जितना संभव हो उतना कार्य लूप के बाहर किया जाए और हर पुनरावृत्ति को यथासंभव सस्ता बनाया जाए।

लंबाई को कैश करें

स्टोरेज array पर array.length पढ़ने पर लूप की condition जाँचे जाने के हर बार एक SLOAD का खर्च आता है। लूप से पहले length को किसी local variable में cache करें।

// BAD: SLOAD on every iteration
for (uint256 i = 0; i < items.length; i++) { }

// GOOD: one SLOAD
uint256 len = items.length;
for (uint256 i = 0; i < len; i++) { }

लूप के अंदर स्टोरेज से बचें

लूप के अंदर उसी storage slot को बार-बार न पढ़ें और न लिखें। किसी local variable में मान जमा करें और लूप समाप्त होने के बाद परिणाम को केवल एक बार लिखें।

// GOOD: single storage write after the loop
uint256 total = 0;
for (uint256 i = 0; i < len; i++) {
    total += amounts[i];
}
balance = total; // one SSTORE

Unchecked Increment

Solidity 0.8 से arithmetic में built-in overflow checks होती हैं, जिनमें अतिरिक्त gas लगता है। ऐसा loop counter जो वास्तविक रूप से कभी overflow नहीं कर सकता, उसे unchecked block के अंदर बढ़ाया जा सकता है।

for (uint256 i = 0; i < len;) {
    // loop body
    unchecked { ++i; }
}

Post-increment की तुलना में Pre-increment

++i, i++ की तुलना में थोड़ा सस्ता है, क्योंकि post-increment को पुराने मान की एक अस्थायी copy बनानी पड़ती है। हर operation पर बचत बहुत कम होती है, लेकिन कई iterations में यह जुड़कर महत्वपूर्ण हो जाती है।

जहाँ return value का उपयोग नहीं किया जाता, वहाँ loop counters में ++i को प्राथमिकता दें।

for (uint256 i = 0; i < len; ++i) {
    // ++i avoids a temporary copy
}

Memory की तुलना में Calldata

External functions के लिए array और struct parameters को memory के बजाय calldata घोषित करने से data को memory में copy करने की आवश्यकता नहीं रहती। Calldata केवल पढ़ने योग्य होती है और उस तक पहुँचना सस्ता होता है।

// Cheaper: no memory copy
function process(uint256[] calldata data) external {
    for (uint256 i = 0; i < data.length; ++i) { }
}

Calldata का आकार घटाएँ

हर non-zero calldata byte की लागत 16 gas होती है। छोटे payload का अर्थ है सस्ते transactions। तकनीकों में शामिल हैं:

  • कई मानों को एक uint256 में pack करना
  • जहाँ ABI अनुमति दे, वहाँ छोटे types का उपयोग करना
  • जब data पहले से on-chain हो, तब पूरे structs के बजाय indices भेजना

Short-Circuit Conditions

Logical operators && और || short-circuit करते हैं: दूसरा operand केवल तभी evaluate होता है जब उसकी आवश्यकता हो। Conditions का क्रम ऐसा रखें कि सबसे सस्ती या निर्णायक होने की सबसे अधिक संभावना वाली जाँच पहले हो।

// Check the cheap flag before the expensive storage read
if (isEnabled && expensiveStorageCheck()) {
    // ...
}

अनावश्यक Reads से बचें

यदि loop body में उसी calldata या memory element को कई बार access किया जाता है, तो उसे किसी local variable में cache करें। Calldata access, storage से सस्ता होने पर भी, बार-बार access करने पर लागत बढ़ती जाती है।

for (uint256 i = 0; i < len; ++i) {
    uint256 v = data[i]; // read once
    total += v;
    if (v > max) max = v;
}

अपने Loops की सीमा तय करें

User-controlled arrays पर unbounded loops block gas limit से अधिक जा सकते हैं, जिससे function स्थायी रूप से call न किया जा सके (यह denial-of-service का जोखिम है)।

Iteration count की सीमा हमेशा तय करें या pull-based pattern का उपयोग करें, जिसमें users अपनी entries को स्वयं process करते हैं और हर transaction सुरक्षित gas सीमा के भीतर रहता है।

require(ids.length <= 100, "too many");
for (uint256 i = 0; i < ids.length; ++i) { }

सबको एक साथ लागू करना

एक optimized loop आम तौर पर length को cache करता है, locals में मान जमा करता है, calldata inputs का उपयोग करता है, unchecked { ++i; } से increment करता है और bounded रहता है।

हर तकनीक अकेले छोटी बचत देती है, लेकिन साथ में वे loop gas को बड़े अंश तक घटा सकती हैं।

function batch(uint256[] calldata vals) external {
    uint256 len = vals.length;
    uint256 total;
    for (uint256 i = 0; i < len;) {
        total += vals[i];
        unchecked { ++i; }
    }
    sum = total;
}

त्वरित जाँच

External function के array parameter के लिए memory के बजाय calldata का उपयोग सस्ता क्यों है?

पुनरावलोकन

आपने loop और calldata gas की तकनीकें सीखीं:

  • Loop शुरू करने से पहले array length को cache करें
  • Locals में मान जमा करें और storage में केवल एक बार लिखें
  • सुरक्षित counters के लिए unchecked { ++i; } का उपयोग करें
  • calldata parameters को प्राथमिकता दें और payload का आकार घटाएँ
  • Gas-limit DoS से बचने के लिए loops की सीमा हमेशा तय करें

अब profiling tools से इन लाभों को मापेंगे।

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

एआई शिक्षक के साथ Web3 और DApp विकास की मूल बातें सीखें — निःशुल्क

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

पाठ्यक्रम
29
पाठ
105

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

क्या “लूप और calldata तरकीबें” पाठ निःशुल्क है?

हाँ — Web3 और DApp विकास की मूल बातें अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “लूप और calldata तरकीबें” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Web3 और DApp विकास की मूल बातें पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“लूप और calldata तरकीबें” में मैं क्या सीखूँगा?

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

क्या Web3 और DApp विकास की मूल बातें शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

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

“लूप और calldata तरकीबें” पाठ पूरा करने में कितना समय लगता है?

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

क्या मैं इस Web3 और DApp विकास की मूल बातें पाठ में कोड लिख और चला सकता हूँ?

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

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

  1. Gas लागत मॉडल
  2. संग्रहण अनुकूलन
  3. लूप और calldata तरकीबें
  4. Gas मापना
← Web3 और DApp विकास की मूल बातें पर वापस जाएँ