बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala · पाठ

for-comprehensions में Option

Options की chaining

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

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

Options को व्यवस्थित रूप से श्रृंखलाबद्ध करना

कई flatMap और map कॉल को श्रृंखलाबद्ध करना पढ़ने में कठिन हो सकता है। Scala का for-अभिव्यक्ति इसी काम के लिए अधिक साफ़ वाक्यविन्यास देता है।

यह एक सुविधा-वाक्यविन्यास है, जिसे कंपाइलर flatMap और map कॉल में फिर से लिख देता है।

मूल for-अभिव्यक्ति

for { ... } yield ... के अंदर, प्रत्येक x <- option उपलब्ध होने पर मान निकालता है। yield अंतिम परिणाम बनाता है।

यदि प्रत्येक Option Some हो, तो आपको परिणाम का एक Some मिलता है।

object Main {
  def main(args: Array[String]): Unit = {
    val a: Option[Int] = Some(3)
    val b: Option[Int] = Some(4)
    val sum = for {
      x <- a
      y <- b
    } yield x + y
    println(sum)
  }
}

None पर तुरंत रुकना

यदि कोई भी जनरेटर None हो, तो पूरी अभिव्यक्ति का परिणाम None होता है। बाकी चरण छोड़ दिए जाते हैं।

यह वही तुरंत रुकने वाला व्यवहार है जो flatMap देता है, लेकिन इसे पढ़ना आसान है।

object Main {
  def main(args: Array[String]): Unit = {
    val a: Option[Int] = Some(3)
    val b: Option[Int] = None
    val sum = for {
      x <- a
      y <- b
    } yield x + y
    println(sum)
  }
}

यह कैसे सरल रूप में बदलता है

कंपाइलर for-अभिव्यक्ति को flatMap और map में फिर से लिखता है। ये दोनों कोड-खंड समतुल्य हैं।

इसे समझने से आपको परिणाम के प्रकार का अनुमान लगाने में सहायता मिलती है।

object Main {
  def main(args: Array[String]): Unit = {
    val a: Option[Int] = Some(3)
    val b: Option[Int] = Some(4)
    val viaFor = for { x <- a; y <- b } yield x + y
    val viaFlatMap = a.flatMap(x => b.map(y => x + y))
    println(viaFor)
    println(viaFlatMap)
  }
}

पहले के मानों का उपयोग करना

बाद के जनरेटर पहले बाँधे गए मानों का संदर्भ ले सकते हैं। इससे प्रत्येक चरण पिछले चरण पर निर्भर कर सकता है।

object Main {
  def main(args: Array[String]): Unit = {
    val base: Option[Int] = Some(10)
    val result = for {
      x <- base
      y <- Some(x * 2)
    } yield x + y
    println(result)
  }
}

मध्यवर्ती बंधन

आप = (तीर के बिना) की सहायता से अभिव्यक्ति के अंदर साधारण मान प्रस्तुत कर सकते हैं। यह मध्यवर्ती गणनाओं के लिए उपयोगी है।

object Main {
  def main(args: Array[String]): Unit = {
    val a: Option[Int] = Some(6)
    val result = for {
      x <- a
      doubled = x * 2
    } yield doubled + 1
    println(result)
  }
}

if के साथ गार्ड

किसी अभिव्यक्ति में if फ़िल्टर शामिल किया जा सकता है। यदि शर्त पूरी नहीं होती, तो परिणाम None हो जाता है।

object Main {
  def main(args: Array[String]): Unit = {
    val a: Option[Int] = Some(8)
    val even = for {
      x <- a
      if x % 2 == 0
    } yield x
    println(even)
    val b: Option[Int] = Some(7)
    println(for { x <- b if x % 2 == 0 } yield x)
  }
}

लुकअप को संयोजित करना

एक सामान्य उपयोग यह है: कई कुंजियों को खोजें और केवल तभी उन्हें संयोजित करें जब सभी उपलब्ध हों।

object Main {
  val data = Map("a" -> 1, "b" -> 2)
  def main(args: Array[String]): Unit = {
    val combined = for {
      x <- data.get("a")
      y <- data.get("b")
    } yield x + y
    println(combined)
    val missing = for {
      x <- data.get("a")
      z <- data.get("c")
    } yield x + z
    println(missing)
  }
}

for-अभिव्यक्तियाँ क्यों?

वे आपको प्रदान करती हैं:

  • निर्भर Options का पठनीय क्रम
  • None पर स्वचालित रूप से रुक जाना
  • flatMap/map जैसी ही शक्ति, लेकिन अधिक सरल रूप में
  • if से फ़िल्टर करना और मध्यवर्ती = बंधन

मान पर पहुँचना

अभिव्यक्ति एक Option देती है, इसलिए साधारण मान पाने के लिए getOrElse या fold के साथ इसे पूरा करें।

object Main {
  def main(args: Array[String]): Unit = {
    val a: Option[Int] = Some(3)
    val b: Option[Int] = Some(4)
    val total = (for { x <- a; y <- b } yield x + y).getOrElse(0)
    println(total)
  }
}

इसे एक साथ लागू करना

एक पूरी पाइपलाइन: दो इनपुट पार्स करें, किसी शर्त की जाँच करें, उन्हें संयोजित करें और डिफ़ॉल्ट मान दें।

object Main {
  def parse(s: String): Option[Int] = s.toIntOption
  def main(args: Array[String]): Unit = {
    val result = for {
      x <- parse("10")
      y <- parse("5")
      if y != 0
    } yield x / y
    println(result.getOrElse(-1))
  }
}

त्वरित जाँच

Option पर for-अभिव्यक्तियों की अपनी समझ को जाँचें।

पुनरावलोकन

आपने for-अभिव्यक्तियों के साथ Options को श्रृंखलाबद्ध करना सीखा:

  • for { x <- a; y <- b } yield ... Options का पठनीय क्रम बनाता है
  • यह flatMap/map में सरल रूप से बदल जाता है
  • कोई भी None पूरे परिणाम को तुरंत None बना देता है
  • बाद के जनरेटर पहले के मानों का उपयोग कर सकते हैं; = बंधन जोड़ता है; if फ़िल्टर करता है
  • साधारण मान पाने के लिए getOrElse या fold के साथ इसे पूरा करें
शुरुआत निःशुल्क

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

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

पाठ्यक्रम
39
पाठ
143

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

क्या “for-comprehensions में Option” पाठ निःशुल्क है?

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

“for-comprehensions में Option” में मैं क्या सीखूँगा?

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

क्या बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

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

“for-comprehensions में Option” पाठ पूरा करने में कितना समय लगता है?

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

क्या मैं इस बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala पाठ में कोड लिख और चला सकता हूँ?

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

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

  1. null से बचना
  2. Option पर map और flatMap
  3. getOrElse और fold
  4. for-comprehensions में Option
← बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala पर वापस जाएँ