স্ট্রিং উল্টো করা (ডান থেকে বামে পড়া, বাম থেকে ডানে নয়) প্রোগ্রামিংয়ে আশ্চর্যজনকভাবে কমন একটি কাজ।
যেমন বায়োইনফরম্যাটিকসে DNA বা RNA স্ট্রিংয়ের অনুক্রম উল্টো করা প্রায়ই নানা বিশ্লেষণের জন্য গুরুত্বপূর্ণ, যেমন পরিপূরক স্ট্র্যান্ড খুঁজে বের করা বা জৈবিক তাৎপর্য আছে এমন প্যালিনড্রোমিক অনুক্রম শনাক্ত করা।
আপনার কাজ হলো একটি প্রদত্ত স্ট্রিং উল্টে দেওয়া।
কিছু উদাহরণ:
"stressed"-কে "desserts"-এ পরিণত করুন।"strops"-কে "sports"-এ পরিণত করুন।"racecar"-কে "racecar"-এ পরিণত করুন।স্ট্রিংয়ের জন্য #reversed এবং #reverseDo: মেথড থাকলেও, আপনি কি নিম্নস্তরের ক্যারেক্টার ইটারেশন এবং স্ট্রিম ব্যবহার করে এটি নিজে করার উপায় বের করতে পারবেন?
কোড ব্রাউজ করতে সাহায্য করার জন্য Pharo-তে একটি চমৎকার কোড ফাইন্ডার টুল আছে। এটি সক্রিয় করতে Shift-Enter চাপুন।
দ্রষ্টব্য: আমরা Exercism-এর রীতি অনুসরণ করে সমাধানটির নাম ReverseString রেখেছি, তবে আরও 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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।
একটি স্ট্রিং উল্টানোর ১৪টি ভিন্ন উপায় ঘুরে দেখুন, যেখানে Unicode কোডপয়েন্ট, গ্রাফিম, স্ট্যাক বনাম হিপ অ্যালোকেশন আর পয়েন্টার-সহ নানা বিষয় থাকবে। আরাম করে বসুন, Jeremy ও Erik-এর সঙ্গে ৪৫ মিনিটের শেখা উপভোগ করুন।