हममें से हर व्यक्ति को अपने जैविक माता-पिता से DNA के रूप में जानी जाने वाली रासायनिक सूचनाओं का एक समूह विरासत में मिलता है, जो तय करता है कि हमारा शरीर किस तरह बनता है। ज्ञात सारा जीवन DNA पर निर्भर है!
ध्यान दें: इस अभ्यास को पूरा करने के लिए आपको न्यूक्लियोटाइड या DNA के बारे में कुछ भी समझने की ज़रूरत नहीं है।
DNA अन्य रसायनों की एक लंबी शृंखला है, और इनमें सबसे महत्वपूर्ण हैं चार न्यूक्लियोटाइड: एडेनीन, साइटोसीन, ग्वानीन और थाइमीन। DNA की एक अकेली शृंखला में इन चार न्यूक्लियोटाइड की अरबों प्रतियाँ हो सकती हैं, और यह बहुत मायने रखता है कि वे किस क्रम में आती हैं! DNA के किसी हिस्से में इन न्यूक्लियोटाइड के इसी क्रम को हम "DNA सीक्वेंस" कहते हैं।
हम एक DNA सीक्वेंस को इन चार न्यूक्लियोटाइड के एक क्रमबद्ध संग्रह के रूप में दर्शाते हैं, और ऐसा करने का एक आम तरीका है अक्षरों की एक स्ट्रिंग, जैसे छह न्यूक्लियोटाइड वाले DNA सीक्वेंस के लिए "ATTACG"। यहाँ 'A' का मतलब एडेनीन, 'C' का साइटोसीन, 'G' का ग्वानीन और 'T' का थाइमीन है।
आपको एक ऐसी स्ट्रिंग दी जाएगी जो एक DNA सीक्वेंस को दर्शाती है। गिनिए कि हर न्यूक्लियोटाइड कितनी बार आता है। अगर स्ट्रिंग में A, C, G या T के अलावा कोई और अक्षर है, तो वह अमान्य है और आपको एरर का संकेत देना चाहिए।
उदाहरण के लिए:
"GATTACA" -> 'A': 3, 'C': 1, 'G': 1, 'T': 2
"INVALID" -> error
Either का एक आम उपयोग ऐसी गणना दिखाना है जिसके परिणामस्वरूप एरर मिल सकती है (अगर असली एरर में कोई दिलचस्पी न हो, तो सरल Option टाइप बेहतर विकल्प हो सकता है)।
एरर न होने पर परिणाम आम तौर पर Right होता है (याद रखने का तरीका: यह "सही" वैल्यू है), जबकि एरर होने पर Left, जैसे कि एरर संदेश वाला Left[String]।
ध्यान दीजिए कि Scala 2.12 में Either डिफ़ॉल्ट रूप से राइट-बायस्ड होता है, इसलिए यह filter, map, flatMap जैसे ऑपरेशनों में या किसी for-कॉम्प्रिहेंशन में अपेक्षा के अनुसार काम करता है।
अगर आप Either से परिचित नहीं हैं, तो आप यह ट्यूटोरियल पढ़ सकते हैं। लेकिन ध्यान रखिए कि यह ट्यूटोरियल 2.12 से पहले के Scala वर्शनों के बारे में है। Scala 2.12 में आप RightProjection को बेझिझक नज़रअंदाज़ कर सकते हैं और .right हटा सकते हैं।
Either को मोनैड कहा जाता है, जो एक "गणना संबंधी पहलू" को कवर करता है, इस मामले में एरर हैंडलिंग।
मोनैड का सही उपयोग बहुत संक्षिप्त, फिर भी सुंदर और पढ़ने योग्य कोड दे सकता है। गलत उपयोग से आसानी से उल्टा नतीजा मिल सकता है।
और जानने के लिए यह वीडियो देखिए।
Either के लिए कुछ व्यावहारिक नियम हैं:
Either का उपयोग न कीजिए। इसके बजायdef add1(x: Int): Either[String, Int] = Right(x + 1)
बेहतर यह होगा
def add1(x: Int): Int = x + 1
(ऐसे सरल फंक्शन लगाने के लिए Either.map मौजूद है, इसलिए उन्हें Either से भरने की ज़रूरत नहीं पड़ती)।
2. अगर वाकई ज़रूरत न हो, तो "अनरैप" न कीजिए।
अक्सर आपके उद्देश्य के लिए बिल्ट-इन फंक्शन मौजूद होते हैं। समय से पहले अनरैप करने के संकेत isLeft/isRight या पैटर्न मैचिंग हैं। उदाहरण के लिए, इसके बजाय
val x: Either[String, Int] = ...
if (x.isRight) x.right.get + 1 else x.left.get
// or
x match {
case Right(n) => n + 1
case Left(s) => s
}
बेहतर यह होगा
x fold (identity, _ + 1)
Either इंस्टेंस को "जोड़ना" चाहते हैं, तब यह करना बेहतर होता है। इसके बजायval xo: Either[String, Int] = ...
val yo: Either[String, Int] = ...
val zo: Either[String, Int] = ...
xo.flatMap(x =>
yo.flatMap(y =>
zo.map(z =>
x + y + z)))
बेहतर यह होगा
for {
x <- xo
y <- yo
z <- zo
} yield x + y + z