स्ट्रिंग को उलटने का मतलब है उसे दाएँ से बाएँ पढ़ना, बाएँ से दाएँ नहीं। प्रोग्रामिंग में यह काम आश्चर्यजनक रूप से बहुत आम है।
उदाहरण के लिए, बायोइन्फॉर्मेटिक्स में DNA या RNA स्ट्रिंग के अनुक्रम को उलटना कई तरह के विश्लेषणों के लिए अक्सर महत्वपूर्ण होता है। जैसे, पूरक शृंखलाएँ ढूँढना, या ऐसे पैलिंड्रोमिक अनुक्रम पहचानना जिनका जैविक महत्व होता है।
आपको दी गई स्ट्रिंग को उलटना है।
कुछ उदाहरण:
"stressed" को "desserts" में बदलिए।"strops" को "sports" में बदलिए।"racecar" को "racecar" में बदलिए।हालाँकि स्ट्रिंग के लिए #reversed और #reverseDo: मेथड मौजूद हैं, लेकिन क्या आप खुद पता लगा सकते हैं कि निचले स्तर पर अक्षरों के इटरेशन और स्ट्रीम की मदद से यह काम कैसे किया जाए?
कोड ब्राउज़ करने में मदद के लिए Pharo में एक बढ़िया कोड फाइंडर टूल है। इसे चालू करने के लिए Shift-Enter दबाइए।
ध्यान दें: हमने हल को ReverseString कहने की Exercism की परंपरा का पालन किया है, हालाँकि Smalltalk में इसके लिए ज़्यादा उपयुक्त नाम StringReverser होगा।
स्ट्रिंग के बारे में कुछ साफ़-साफ़ छोटी बातें हैं, जैसे कमेंट के लिए डबल कोट, स्ट्रिंग के लिए सिंगल कोट, और अक्षरों के लिए खास सिंटैक्स (जैसे अक्षर “x” के लिए $x)। पहली बार पढ़ते समय ये आपको उलझा सकती हैं, क्योंकि ये परंपराएँ दूसरी भाषाओं में इस्तेमाल होने वाली परंपराओं से अलग हैं।
सिंबल की एक धारणा भी है, जो ऐसी स्ट्रिंग होती है जो पूरी मेमोरी में अनोखी होती है; यानी जब इसे बनाया जाता है (आम तौर पर कंपाइल-टाइम पर), तो मेमोरी में खोज की जाती है यह देखने के लिए कि इसके जैसा कोई और पहले से मौजूद है या नहीं; और सिर्फ मूल वाला ही इस्तेमाल होता है। इसका कारण सिर्फ मेमोरी बचाना नहीं है, बल्कि सिंबल की तुलना करते समय मिलने वाली काफी तेज़ी भी है।
"this is a comment"
'this is a string'
#'this is a symbol'
#thisIsASymbolToo
Smalltalk प्रोग्राम में कॉमा बहुत कम मिलते हैं, क्योंकि सिंटैक्स में उनकी कोई भूमिका नहीं होती।
इसीलिए ऐरे लिटरल, मिसाल के तौर पर, बिना कॉमा के लिखे जाते हैं; जैसे
#(1 2 3 4 5)
हालाँकि, कॉमा अपने आप में एक ऑपरेटर है, और दो स्ट्रिंग जोड़ते समय आपको यह दिखेगा; जैसे
'string1', 'string2'
अंत में, यह जानना ज़रूरी है कि स्ट्रिंग और अक्षर अलग-अलग क्लास हैं। एक स्ट्रिंग, अक्षरों का संग्रह होती है। स्ट्रिंग पर इटरेशन करते समय यह आपको चौंका सकता है, क्योंकि हो सकता है आप ऐसे मेथड को अक्षर दे दें जो स्ट्रिंग की अपेक्षा करता हो। इसे देखिए...
(('hello' at: 2) = $e) inspect.
(('hello' at: 2) = 'e') inspect.
स्ट्रीम क्रम से पढ़ने और लिखने के लिए काम की होती हैं। ये इंडेक्स बढ़ाने की ज़रूरत से बचाकर कोड को साफ़-सुथरा बनाती हैं। स्ट्रीम किसी भी संग्रह पर काम करती हैं।
stream := WriteStream on: String new.
stream nextPut: $h ; nextPutAll: 'ell' ; nextPut: $o.
stream contents inspect
Exercism पर साइन अप कीजिए और Pharo को 50 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।
स्ट्रिंग उलटने के 14 अलग-अलग तरीके जानिए। इसमें Unicode कोडपॉइंट, ग्राफीम, स्टैक बनाम हीप एलोकेशन और पॉइंटर जैसे कई विषय शामिल हैं। आराम से बैठिए और Jeremy और Erik के साथ 45 मिनट सीखने का मज़ा लीजिए।