ट्रैक
/
JavaScript
JavaScript
/
अभ्यास
/
भाग्यशाली संख्याएँ
भाग्यशाली संख्याएँ

भाग्यशाली संख्याएँ

सीखने का अभ्यास

परिचय

JavaScript में वैल्यू अलग-अलग टाइप की हो सकती हैं। किसी वेरिएबल का टाइप बदलने के लिए स्पष्ट टाइप कन्वर्ज़न किया जा सकता है। इसके अलावा, जब संदर्भ को ज़रूरत होती है, तब JavaScript टाइप कोर्शन (अंतर्निहित टाइप कन्वर्ज़न) भी करता है।

टाइप कन्वर्ज़न

बहुत सी दूसरी भाषाओं की तरह JavaScript में किसी (दूसरे) टाइप में कास्ट करने का कोई तरीका नहीं है, लेकिन इसके बजाय कुछ बिल्ट-इन हेल्पर इस्तेमाल किए जा सकते हैं। सबसे खास बात यह है कि Boolean, Number और String को फंक्शन की तरह इस्तेमाल करके किसी वैल्यू को उसी से जुड़े टाइप में बदला जा सकता है।

बूलियन में बदलना (ट्रूथी/फॉल्सी वैल्यू)

Boolean(value) की मदद से आप किसी भी वैल्यू को बूलियन में बदल सकते हैं। वैल्यू का एक तय समूह है, जिन्हें फॉल्सी वैल्यू कहते हैं, जो false में बदल जाती हैं। सबसे ज़रूरी बात, false, 0, खाली स्ट्रिंग, null, undefined और NaN फॉल्सी होती हैं।

बाकी सभी वैल्यू के लिए Boolean true लौटाता है। ऐसी वैल्यू को ट्रूथी कहते हैं।

Boolean(-1);
// => true

Boolean(0);
// => false

Boolean(' ');
// => true

Boolean('');
// => false

ध्यान दीजिए कि बताए गए नियमों के कारण JavaScript में '0', 'false', [] और {} ट्रूथी होते हैं।

संख्या में बदलना

किसी वैल्यू को संख्या में बदलने के लिए Number(value) इस्तेमाल किया जा सकता है। स्ट्रिंग के शुरू और अंत की खाली जगहें नज़रअंदाज़ की जाती हैं, और खाली स्ट्रिंग 0 में बदल जाती है। अगर आप किसी नॉन-प्रिमिटिव वैल्यू या ऐसी स्ट्रिंग को बदलने की कोशिश करते हैं जो किसी संख्या को नहीं दर्शाती, तो परिणाम NaN होता है (संख्या नहीं)।

Number('  -12.34  ');
// => -12.34

Number('1,2');
// => NaN

Number('');
// => 0

Number({ num: 123 });
// => NaN

स्ट्रिंग में बदलना

String(value) की मदद से आप किसी वैल्यू को स्ट्रिंग में बदल सकते हैं। प्रिमिटिव वैल्यू के लिए परिणाम वही होता है जिसकी आप अपेक्षा करेंगे।

String(12.34);
// => '12.34'

String(false);
// => 'false'

String(null);
// => 'null'

String(undefined);
// => 'undefined'

ऐरे के लिए, String फंक्शन हर एलिमेंट पर स्ट्रिंग कन्वर्ज़न लागू करता है और नतीजों को कॉमा से जोड़ देता है। आप खुद भी join मेथड लागू कर सकते हैं, जैसे सेपरेटर को अपनी पसंद के मुताबिक बदलने के लिए। ध्यान दीजिए कि इन मामलों में null और undefined खाली स्ट्रिंग में बदल जाते हैं।

String([42, null, true, 'abc']);
// => '42,,true,abc'

ऑब्जेक्ट के लिए, String डिफॉल्ट रूप से एक ऐसा टेक्स्ट लौटाता है जिससे कोई खास मदद नहीं मिलती।

String({ key: 'value' });
// => '[object Object]'

टाइप कोर्शन

कुछ संदर्भों में, JavaScript किसी स्टेटमेंट का मूल्यांकन करने से पहले किसी वैल्यू को अपने आप दूसरे डेटा टाइप में बदल देता है। इस अंतर्निहित कन्वर्ज़न को टाइप कोर्शन कहते हैं।

बूलियन संदर्भ

जब किसी बूलियन संदर्भ में कोई गैर-बूलियन वैल्यू इस्तेमाल होती है, तो JavaScript उस वैल्यू को अपने आप बदलने के लिए Boolean फंक्शन जैसे ही नियम लागू करता है।

बूलियन में कोर्शन आम तौर पर इन जगहों पर होता है

  • if स्टेटमेंट की शर्त
  • टर्नरी ऑपरेटर ? का पहला ऑपरेंड
  • लॉजिकल नॉट ऑपरेटर ! का ऑपरेंड
  • लॉजिकल ऐंड && और ऑर || ऑपरेटर के ऑपरेंड (एक्सप्रेशन का परिणाम उन ऑपरेंड में से एक होता है, ज़रूरी नहीं कि वह बूलियन हो)
const num = 0;
if (num) {
  // this block is NOT executed because 0 is falsy
}

स्ट्रिंग संदर्भ

अगर जोड़ने वाला ऑपरेटर + प्रिमिटिव वैल्यू पर इस्तेमाल होता है और एक ऑपरेंड स्ट्रिंग है, तो दूसरा ऑपरेंड भी स्ट्रिंग में बदल दिया जाता है। कन्वर्ज़न का तरीका वही है जो String फंक्शन इस्तेमाल करने पर होता है। इसके बाद, दोनों स्ट्रिंग जोड़ दी जाती हैं।

let name;
'hello ' + name;
// => 'hello undefined'

संख्यात्मक संदर्भ

बहुत से ऑपरेटर ऊपर बताए गए Number फंक्शन के तरीके के मुताबिक ऑपरेंड को (ज़रूरत पड़ने पर) संख्याओं में बदल देते हैं।

  • गणितीय ऑपरेटर: + (अगर कोई स्ट्रिंग शामिल न हो), -, *, /, %, **
  • यूनरी प्लस और यूनरी निगेशन ऑपरेटर: +, -
  • तुलना ऑपरेटर (गैर-स्ट्रिंग ऑपरेंड के लिए): >, >=, <, <=
  • बिटवाइज़ ऑपरेटर: |, &, ^, ~

इनमें से किसी भी ऑपरेटर के बारे में ज़्यादा जानकारी के लिए MDN ऑपरेटर सूची देखिए।

गलतियों से बचने के लिए यह अच्छी आदत है कि इन ऑपरेटरों को लगाने से पहले हमेशा Number को स्पष्ट रूप से कॉल कीजिए।

निर्देश

आपका दोस्त Kojo को संख्याओं से बहुत लगाव है। उसकी 'fun-with-numbers' नाम की एक छोटी वेबसाइट है। Kojo प्रोग्रामिंग में उतना अच्छा नहीं है, इसलिए उसने आपसे मदद माँगी है।

आपको Kojos की वेबसाइट पर संख्याओं के नए खेलों के लिए दो सहायक फंक्शन बनाने हैं, और एक तीसरा फंक्शन बनाना है जो उपयोगकर्ता के डाले गए इनपुट की जाँच करेगा।

1. स्लॉट मशीन पर दिखने वाली संख्याओं का जोड़ निकालिए

Kojos की वेबसाइट के खेलों में से एक स्लॉट मशीन जैसा दिखता है, जिस पर अंकों वाले पहियों के दो समूह दिखाई देते हैं। अंकों का हर समूह एक संख्या दर्शाता है। खेल के नियमों के लिए Kojo को इन दोनों संख्याओं का जोड़ पता होना चाहिए।

twoSum नाम का एक फंक्शन लिखिए जो पैरामीटर के रूप में दो ऐरे लेता है। हर ऐरे में 0 से 9 के बीच की एक या अधिक संख्याएँ होती हैं। फंक्शन को हर ऐरे को एक संख्या के रूप में समझना चाहिए और उन दोनों संख्याओं का जोड़ लौटाना चाहिए।

twoSum([1, 2, 3], [0, 7]);
//=> 130

// [1, 2, 3] represents 123 and [0, 7] represents 7.
// 123 + 7 = 130

2. जाँचिए कि कोई संख्या पैलिंड्रोम है या नहीं

वेबसाइट पर एक और खेल है, "Lucky Numbers" नाम का एक छोटा क्विज़। उपयोगकर्ता एक संख्या दर्ज कर सकता है और फिर देखता है कि वह संख्या किसी गुप्त क्रम या पैटर्न में आती है या नहीं। "lucky numbers" का क्रम या पैटर्न हर महीने बदलता है, और हर उपयोगकर्ता के पास इसे अनुमान लगाने के सीमित मौके होते हैं।

इस महीने की लकी संख्याएँ वे संख्याएँ होनी चाहिए जो पैलिंड्रोम हों। पैलिंड्रोम संख्याएँ अंकों को उलट देने पर भी वही रहती हैं।

नया luckyNumber फंक्शन बनाइए जो पैरामीटर के रूप में एक संख्या लेता है। अगर संख्या पैलिंड्रोम है तो फंक्शन को true लौटाना चाहिए, वरना false। इनपुट में दी गई संख्या हमेशा एक धनात्मक पूर्णांक होगी।

luckyNumber(1441);
//=>  true

luckyNumber(123);
//=> false

3. अमान्य उपयोगकर्ता इनपुट के लिए एरर संदेश बनाइए

वेबसाइट पर कई जगहों पर ऐसे इनपुट फील्ड हैं जहाँ उपयोगकर्ता संख्याएँ दर्ज कर सकते हैं और कोई काम शुरू करने के लिए बटन पर क्लिक कर सकते हैं। Kojo अपनी साइट का उपयोगकर्ता अनुभव बेहतर बनाना चाहता है। वह ऐसी स्थिति में एरर संदेश दिखाना चाहता है जब उपयोगकर्ता बटन पर क्लिक करे, लेकिन फील्ड में अमान्य इनपुट वैल्यू हो।

यहाँ कुछ और जानकारी दी गई है कि किसी इनपुट फील्ड की वैल्यू कैसे मिलती है।

  • अगर उपयोगकर्ता फील्ड में कुछ टाइप करता है, तो जुड़ी हुई वैल्यू हमेशा एक स्ट्रिंग होती है, भले ही उपयोगकर्ता ने सिर्फ संख्याएँ टाइप की हों।
  • अगर उपयोगकर्ता कुछ टाइप करके उसे फिर मिटा देता है, तो उस वेरिएबल में एक खाली स्ट्रिंग होगी।
  • उपयोगकर्ता के टाइप करना शुरू करने से पहले भी वेरिएबल undefined या null हो सकता है।

errorMessage नाम का एक फंक्शन लिखिए जो पैरामीटर के रूप में उपयोगकर्ता का इनपुट लेता है। अगर उपयोगकर्ता ने कोई इनपुट नहीं दिया, तो errorMessage को 'Required field' लौटाना चाहिए। अगर इनपुट किसी गैर-शून्य संख्या को नहीं दर्शाता (JavaScript के रूपांतरण नियमों के अनुसार), तो 'Must be a number besides 0' लौटाया जाना चाहिए। बाकी सभी मामलों में आप मान सकते हैं कि इनपुट मान्य है, और रिटर्न वैल्यू एक खाली स्ट्रिंग होनी चाहिए।

errorMessage('123');
// => ''

errorMessage('');
// => 'Required field'

errorMessage('abc');
// => 'Must be a number besides 0'
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
JavaScript Exercism

भाग्यशाली संख्याएँ शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और JavaScript को 37 कॉन्सेप्ट159 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।