inline Functions: Lambda Overhead हटाना
Lambda parameters के लिए object creation से बचने हेतु functions को inline के रूप में चिह्नित करें।
inline Functions: Lambda Overhead हटाना, CoddyKit पर Kotlin Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Kotlin Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Kotlin Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
inline फ़ंक्शन क्या है?
सामान्यतः, किसी फ़ंक्शन को दी गई लैम्ब्डा को एक अनाम क्लास में संकलित किया जाता है। हर बार चलाने पर एक नई ऑब्जेक्ट बनाई जाती है, जिसमें मेमोरी और समय लगता है। inline कीवर्ड कंपाइलर को फ़ंक्शन के मुख्य भाग (और उसके लैम्ब्डा आर्ग्युमेंट) को सीधे कॉल वाली जगह पर कॉपी करने का निर्देश देता है।
inline घोषित करना
fun से पहले inline मॉडिफ़ायर जोड़ें:
inline fun measureTime(block: () -> Unit): Long {
val start = System.nanoTime()
block()
return System.nanoTime() - start
}कंपाइलर कॉल को कैसे फिर से लिखता है
measureTime { doWork() } जैसी कॉल बाइटकोड स्तर पर measureTime के मुख्य भाग को उसी जगह चिपका देती है — कोई लैम्ब्डा ऑब्जेक्ट बनाई ही नहीं जाती।
inline का उपयोग कब करें
inline का उपयोग तब करें जब:
- फ़ंक्शन एक या अधिक लैम्ब्डा पैरामीटर लेता हो
- इसे बार-बार चलने वाले पथों में अक्सर कॉल किया जाता हो, जैसे तंग लूप या composables में
- आपको
reifiedप्रकार के पैरामीटर की आवश्यकता हो, जिसके बारे में अगली बार बताया जाएगा
प्रदर्शन बेंचमार्क का उदाहरण
inline के बिना, उच्च-क्रम वाले फ़ंक्शन की हर कॉल एक लैम्ब्डा ऑब्जेक्ट बनाती है। इसके साथ JVM को सीधा क्रमिक कोड दिखाई देता है — न कोई ऑब्जेक्ट बनती है, न वर्चुअल डिस्पैच होता है।
inline fun repeat(n: Int, block: () -> Unit) {
for (i in 0 until n) block()
}गैर-स्थानीय रिटर्न
इनलाइन फ़ंक्शन का एक मुख्य लाभ यह है कि लैम्ब्डा return का उपयोग केवल लैम्ब्डा से नहीं, बल्कि बाहरी फ़ंक्शन से बाहर निकलने के लिए कर सकती है। इसे गैर-स्थानीय रिटर्न कहा जाता है।
inline fun forEach(list: List<Int>, block: (Int) -> Unit) {
for (item in list) block(item)
}
fun findFirst(list: List<Int>): Int {
forEach(list) { if (it > 5) return it } // returns from findFirst
return -1
}inline की सीमाएँ
इनलाइन फ़ंक्शन को वेरिएबल में संग्रहीत या ऑब्जेक्ट के रूप में पास नहीं किया जा सकता, क्योंकि रनटाइम पर वे प्रथम-श्रेणी इकाइयों के रूप में मौजूद नहीं होते। जहाँ f उस हस्ताक्षर वाले फ़ंक्शन संदर्भ की अपेक्षा करता है, वहाँ आप f(::measureTime) कॉल नहीं कर सकते।
कलेक्शन पाइपलाइन को इनलाइन करना
मानक लाइब्रेरी के map, filter, forEach आदि फ़ंक्शन सभी inline हैं। इसी कारण उन्हें श्रृंखला में जोड़ने पर हर एलिमेंट के लिए अतिरिक्त क्लोज़र ऑब्जेक्ट नहीं बनती।
val result = (1..1_000_000)
.filter { it % 2 == 0 } // inline
.map { it * it } // inline
.take(10)कोड आकार का समझौता
हर कॉल वाली जगह को इनलाइन किए गए कोड की एक कॉपी मिलती है। यदि फ़ंक्शन का मुख्य भाग बड़ा हो और उसे कई जगहों से कॉल किया जाए, तो बाइटकोड का आकार बढ़ जाता है। छोटे और बार-बार कॉल किए जाने वाले लैम्ब्डा के लिए inline को प्राथमिकता दें।
companion और top-level के साथ इंटरैक्शन
inline top-level फ़ंक्शन और सदस्य फ़ंक्शन पर काम करता है। यह प्रॉपर्टी या कंस्ट्रक्टर पर काम नहीं करता। फ़ंक्शन कॉल वाली जगह पर दिखाई देना चाहिए, आमतौर पर public या internal होना चाहिए।
मानक लाइब्रेरी के उदाहरण
आप पहले से जानते हैं कि ये फ़ंक्शन inline हैं: let, run, apply, also, with, use, synchronized, lazy (ब्लॉक वाला रूप)। inline मॉडिफ़ायर ही उनके लैम्ब्डा को शून्य-लागत वाला बनाता है।
त्वरित जाँच
उच्च-क्रम वाले फ़ंक्शन को inline चिह्नित करने का मुख्य लाभ क्या है?
पुनरावृत्ति: inline फ़ंक्शन
मुख्य बातें:
inlineलैम्ब्डा ऑब्जेक्ट बनाना समाप्त करता है- लैम्ब्डा से गैर-स्थानीय रिटर्न संभव बनाता है
reifiedप्रकार के पैरामीटर के लिए आवश्यक है- छोटे और बार-बार कॉल किए जाने वाले उच्च-क्रम फ़ंक्शन के लिए सबसे अच्छा है
- मानक लाइब्रेरी के स्कोप फ़ंक्शन सभी
inlineहैं
एआई शिक्षक के साथ Kotlin सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 51
- पाठ
- 203
अक्सर पूछे जाने वाले प्रश्न
क्या “inline Functions: Lambda Overhead हटाना” पाठ निःशुल्क है?
हाँ — Kotlin Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “inline Functions: Lambda Overhead हटाना” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Kotlin Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“inline Functions: Lambda Overhead हटाना” में मैं क्या सीखूँगा?
Lambda parameters के लिए object creation से बचने हेतु functions को inline के रूप में चिह्नित करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Kotlin Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Kotlin Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Kotlin Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“inline Functions: Lambda Overhead हटाना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Kotlin Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Kotlin Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- inline Functions: Lambda Overhead हटाना
- noinline और crossinline Modifiers
- reified Type Parameters: Runtime पर T तक पहुँचना
- व्यावहारिक Reified Patterns: Parsing, DI और Serialization