Char Crystal में एक डेटा टाइप है, जो 32-बिट Unicode कोड पॉइंट को दर्शाता है।
इनका आकार इन्हें मेमोरी की दृष्टि से कुशल बनाता है और इन्हें कुछ ऐसी खास विशेषताएँ देता है जो स्ट्रिंग में नहीं होतीं।
इन्हें सिंगल कोट्स (') से बनाया जाता है और इनके अंदर सिर्फ एक Unicode कोड पॉइंट ही रखा जा सकता है।
'a' # => 'a'
'a'.class # => Char
Crystal में स्ट्रिंग के साथ काम करते समय Char के साथ काम करना काफी आम है, क्योंकि स्ट्रिंग क्लास के कई मेथड Char लौटाते हैं या आर्गुमेंट के रूप में Char लेते हैं।
जैसे String#[] मेथड एक Char लौटाता है, और String#chars मेथड Char का एक संग्रह लौटाता है।
Char चूँकि एक 32-बिट Unicode कोड पॉइंट है, यह बढ़ाने और घटाने का समर्थन करता है। इसी वजह से अगर आपके पास 'a' है, तो उसमें एक जोड़कर आप 'b' पा सकते हैं।
'a' + 5
# => 'f'
'z' - 25
# => 'a'
Char#succ नाम का एक मेथड भी है, जो Unicode टेबल में अगला Char लौटाता है, और Char#pred भी, जो Unicode टेबल में पिछला Char लौटाता है।
'a'.succ
# => 'b'
'z'.pred
# => 'y'
चूँकि Char का उद्देश्य सिर्फ 32-बिट Unicode को दर्शाना है, दो Char आपस में जोड़े नहीं जा सकते। इसलिए Char को सिर्फ स्ट्रिंग के साथ जोड़ा जा सकता है।
'a' + "bc"
# => "abc"
'a' + 'b'
# => error: expected argument #1 to 'Char#+' to be Int or String, not Char
Crystal में किसी अक्षर के बारे में जानकारी पाने के लिए कुछ मेथड हैं। जैसे, वह संख्या है या अक्षर, या वह छोटे अक्षर में लिखा है या बड़े अक्षर में। यहाँ ऐसे कुछ मेथड की सूची दी गई है, पूरी सूची के लिए Char API देखिए:
| मेथड | विवरण |
|---|---|
Char#number? |
अगर Char संख्या है तो true लौटाता है |
Char#letter? |
अगर Char अक्षर है तो true लौटाता है |
Char#lowercase? |
अगर Char छोटे अक्षर में है तो true लौटाता है |
Char#uppercase? |
अगर Char बड़े अक्षर में है तो true लौटाता है |
Char#ascii? |
अगर Char एक ASCII अक्षर है तो true लौटाता है |
Char#whitespace? |
अगर Char एक व्हाइटस्पेस अक्षर है तो true लौटाता है |
चूँकि Char एक 32-बिट Unicode कोड पॉइंट है, आप Char और कोड पॉइंट (Int) के बीच बदल सकते हैं। यह Char#ord मेथड से किया जा सकता है, जो Char का कोड पॉइंट लौटाता है, या Int#chr मेथड से, जो कोड पॉइंट का Char लौटाता है।
'a'.ord
# => 97
97.chr
# => 'a'
दूसरे डेटा टाइप की तरह Char में भी टाइप बदलने के लिए कुछ मेथड हैं। सबसे आम है Char#to_s मेथड, जो Char को स्ट्रिंग में बदलता है। इसके अलावा Char#to_i मेथड भी है, जो Char को Int में बदलता है, और Char#to_f मेथड, जो Char को Float में बदलता है।
'a'.to_s
# => "a"
'4'.to_i
# => 4
'a'.to_i
# => Error: Invalid integer: a (ArgumentError)
लूटन का पुस्तकालय एक बड़ा पुस्तकालय है, जहाँ किताबों से लेकर कला तक, साहित्य का विशाल संग्रह है। पुस्तकालय में एक ऐसा विभाग है जहाँ साहित्य का अध्ययन किया जाता है और किताबें कंप्यूटर सिस्टम में जोड़ी जाती हैं।
पुस्तकालय के कुछ हिस्सों को स्वचालित करना है और आपसे इसमें मदद करने के लिए कहा गया है। इस मदद में किताबें दर्ज करने की प्रक्रिया के फॉर्म स्वचालित करने से लेकर टेक्स्ट डिक्रिप्ट करने तक, सब कुछ शामिल है।
पुस्तकालय की किताबें ऐसी होनी चाहिए कि आसानी से मिल जाएँ, इसलिए उन्हें शीर्षक के पहले अक्षर के हिसाब से लगाया जाता है।
Library.first_letter मेथड बनाइए, जो एक आर्गुमेंट title लेता है, जिसमें किताब का शीर्षक होता है।
यह मेथड शीर्षक का पहला अक्षर लौटाता है।
Library.first_letter("Mystery of the Crystal Skull")
# => 'M'
पुस्तकालय में अलग-अलग लेखकों की बहुत सारी किताबें हैं।
लेखकों को अक्सर उनके नाम के पहले अक्षरों से पहचाना जाता है, इसलिए पुस्तकालय ने ऐसा सिस्टम माँगा है जिसमें लेखक का पहला नाम और उपनाम डालने पर उसके नाम के पहले अक्षर मिलें।
ये अक्षर इस तरह बनने चाहिए: {first_letter_of_first_name}.{first_letter_of_last_name}
Library.initials मेथड बनाइए, जो दो आर्गुमेंट first_name और last_name लेता है।
इनमें लेखक का पहला नाम और उपनाम होता है।
यह मेथड लेखक के नाम के पहले अक्षर लौटाता है।
Library.initials("William", "Shakespeare")
# => "W.S"
कुछ साहित्य एन्क्रिप्ट किया गया है और पुस्तकालय के पास बहुत सारे एन्क्रिप्ट किए गए टेक्स्ट हैं। पुस्तकालय एक खास एन्क्रिप्शन के लिए नया डिक्रिप्शन सिस्टम चाहता है।
एन्क्रिप्शन इस तरह काम करता है: अक्षर लेकर उसे वर्णमाला में उससे ठीक पहले आने वाले अक्षर से बदल दिया जाता है।
जैसे a से z बन जाता है, b से a, c से b, और इसी तरह।
पुस्तकालय चाहता है कि यह बड़े और छोटे दोनों अक्षरों को डिक्रिप्ट कर सके और मूल अक्षर का केस वैसा ही बनाए रखे।
Library.decrypt_character मेथड बनाइए, जो एक आर्गुमेंट character लेता है, जिसमें डिक्रिप्ट किया जाने वाला अक्षर होता है।
यह मेथड डिक्रिप्ट किया गया अक्षर लौटाता है।
Library.decrypt_character('a')
# => 'z'
पुस्तकालय पूरे टेक्स्ट को भी डिक्रिप्ट करना चाहता है, उसी एन्क्रिप्शन से जो वर्णमाला में पहले आने वाला अक्षर लेता है।
डिक्रिप्टर को सिर्फ अक्षरों को ही डिक्रिप्ट करना चाहिए, बाकी सब कुछ वैसा ही रहने देना चाहिए।
Library.decrypt_text मेथड बनाइए, जो एक आर्गुमेंट text लेता है, जिसमें डिक्रिप्ट किया जाने वाला टेक्स्ट होता है।
यह मेथड डिक्रिप्ट किया गया टेक्स्ट लौटाता है।
Library.decrypt_text("Ifmmp Xpsme!")
# => "Hello World!"
Exercism पर साइन अप कीजिए और Crystal को 26 कॉन्सेप्ट142 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।