Implicit Parameters
Context पास करना
Implicit Parameters, CoddyKit पर बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
संदर्भ अपने-आप पास करना
इम्प्लिसिट पैरामीटर कंपाइलर को आपके लिए ऐसा आर्ग्युमेंट देने देते हैं, जो स्कोप में implicit से चिह्नित मानों में से लिया जाता है। कॉन्फ़िगरेशन या फ़ॉर्मैटिंग नियमों जैसे ‘परिवेशीय’ संदर्भ को पास करने के लिए ये बहुत उपयोगी हैं।
object Main {
def greet(name: String)(implicit greeting: String): String =
s"$greeting, $name!"
implicit val defaultGreeting: String = "Hello"
def main(args: Array[String]): Unit = {
println(greet("Ann"))
}
}इम्प्लिसिट पैरामीटर सूची
अंतिम पैरामीटर सूची को implicit कीवर्ड से चिह्नित करें। कॉल करने की जगह इसे छोड़ देने पर कंपाइलर मेल खाता हुआ इम्प्लिसिट मान खोजता है।
object Main {
def multiply(x: Int)(implicit factor: Int): Int = x * factor
implicit val f: Int = 10
def main(args: Array[String]): Unit = {
println(multiply(5))
}
}इम्प्लिसिट को स्पष्ट रूप से देना
आप किसी इम्प्लिसिट पैरामीटर को हमेशा स्पष्ट रूप से पास कर सकते हैं और स्कोप में मौजूद मान को बदल सकते हैं। एकबारगी मामलों में यह उपयोगी है।
object Main {
def multiply(x: Int)(implicit factor: Int): Int = x * factor
implicit val f: Int = 10
def main(args: Array[String]): Unit = {
println(multiply(5))
println(multiply(5)(2))
}
}प्रकार के आधार पर इम्प्लिसिट समाधान
कंपाइलर इम्प्लिसिट का मिलान नाम से नहीं, बल्कि प्रकार से करता है। स्कोप में ठीक एक मेल खाता इम्प्लिसिट मान होना चाहिए; अन्यथा अस्पष्टता या अनुपस्थिति के कारण संकलन विफल हो जाता है।
object Main {
case class Config(env: String)
def run()(implicit cfg: Config): String = s"running in ${cfg.env}"
implicit val cfg: Config = Config("prod")
def main(args: Array[String]): Unit = {
println(run())
}
}मान प्राप्त करने के लिए implicitly
implicitly[T] सहायक, किसी पैरामीटर का नाम लिए बिना, स्कोप से T प्रकार का इम्प्लिसिट मान सीधे प्राप्त करता है।
object Main {
implicit val name: String = "Scala"
def main(args: Array[String]): Unit = {
val n = implicitly[String]
println(n)
}
}संदर्भ सीमा का संक्षिप्त रूप
संदर्भ सीमा [T: Ordering], Ordering[T] प्रकार के इम्प्लिसिट पैरामीटर का संक्षिप्त रूप है। इसका उपयोग प्रकार वर्गों के साथ सामान्य है।
object Main {
def max[T: Ordering](a: T, b: T): T = {
val ord = implicitly[Ordering[T]]
if (ord.gt(a, b)) a else b
}
def main(args: Array[String]): Unit = {
println(max(3, 7))
println(max("apple", "pear"))
}
}कॉल के बीच संदर्भ पहुँचाना
जब कई फ़ंक्शन को एक ही संदर्भ चाहिए, तब इम्प्लिसिट पैरामीटर विशेष रूप से उपयोगी होते हैं। उसे एक बार इम्प्लिसिट चिह्नित करने पर वह नेस्टेड कॉल में अपने-आप आगे पहुँचता रहता है।
object Main {
case class User(name: String)
def log(msg: String)(implicit u: User): Unit =
println(s"[${u.name}] $msg")
def doWork()(implicit u: User): Unit = {
log("started")
log("finished")
}
implicit val current: User = User("admin")
def main(args: Array[String]): Unit = {
doWork()
}
}इम्प्लिसिट कहाँ खोजे जाते हैं
कंपाइलर इम्प्लिसिट को स्थानीय स्कोप, आयातों और संबंधित प्रकारों के सहचर ऑब्जेक्ट में खोजता है। डिफ़ॉल्ट देने के लिए सहचर ऑब्जेक्ट व्यवस्थित स्थान होते हैं।
object Main {
case class Currency(symbol: String)
object Currency {
implicit val default: Currency = Currency("$")
}
def price(amount: Int)(implicit c: Currency): String = s"${c.symbol}$amount"
def main(args: Array[String]): Unit = {
println(price(50))
}
}अस्पष्टता संबंधी त्रुटियाँ
यदि एक ही प्रकार के दो इम्प्लिसिट स्कोप में हों, तो कंपाइलर अस्पष्ट इम्प्लिसिट त्रुटि बताता है। हर प्रकार के लिए अधिकतम एक रखें या उसे स्पष्ट रूप से पास करें।
object Main {
def label(x: Int)(implicit unit: String): String = s"$x$unit"
implicit val unit: String = "px"
def main(args: Array[String]): Unit = {
// Only one implicit String in scope -> no ambiguity
println(label(12))
}
}डिफ़ॉल्ट जैसा व्यवहार
इम्प्लिसिट पैरामीटर संदर्भ-आधारित डिफ़ॉल्ट का एक रूप देते हैं: कौन-सा इम्प्लिसिट स्कोप में है, इसके आधार पर एक ही फ़ंक्शन कॉल अलग-अलग परिणाम दे सकती है।
object Main {
def format(n: Double)(implicit decimals: Int): String =
f"$n%.${decimals}f"
implicit val d: Int = 2
def main(args: Array[String]): Unit = {
println(format(3.14159))
println(format(3.14159)(4))
}
}इम्प्लिसिट का संयम से उपयोग करें
इम्प्लिसिट पैरामीटर शक्तिशाली होते हैं, लेकिन अत्यधिक उपयोग से कोड को समझना कठिन हो सकता है। इनका उपयोग निष्पादन संदर्भ, कॉन्फ़िगरेशन और प्रकार-वर्ग इंस्टेंस जैसे वास्तविक व्यापक संदर्भों तक सीमित रखें।
object Main {
case class Locale(code: String)
def hello()(implicit loc: Locale): String =
if (loc.code == "tr") "Merhaba" else "Hello"
implicit val loc: Locale = Locale("tr")
def main(args: Array[String]): Unit = {
println(hello())
}
}त्वरित जाँच
कंपाइलर कैसे तय करता है कि इम्प्लिसिट पैरामीटर के लिए कौन-सा मान देना है?
पुनरावृत्ति
आपने इम्प्लिसिट पैरामीटर (Scala 2 शैली) सीखे:
- किसी पैरामीटर सूची को
implicitसे चिह्नित करने पर वह अपने-आप भरी जाती है - समाधान प्रकार के आधार पर होता है और स्कोप में मान अद्वितीय होना चाहिए
implicitly[T]मान प्राप्त करता है; संदर्भ सीमाएँ[T: TC]इसका संक्षिप्त रूप हैं- खोज में स्थानीय स्कोप, आयात और सहचर ऑब्जेक्ट शामिल होते हैं
- इनका उपयोग व्यापक संदर्भ के लिए करें, हर जगह नहीं
एआई शिक्षक के साथ Scala सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 39
- पाठ
- 143
अक्सर पूछे जाने वाले प्रश्न
क्या “Implicit Parameters” पाठ निःशुल्क है?
हाँ—“Implicit Parameters” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Implicit Parameters” में मैं क्या सीखूँगा?
Context पास करना आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“Implicit Parameters” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Implicit Parameters
- Scala 3 given/using
- Implicit Conversions
- Extension Methods