মিউট থাক immutable স্ট্রিং

তুই আগে থেকে জানস, String হচ্ছে এক বা একাধিক বর্ণের সমষ্টি। তবে string-এর একটা গোপন বিষয় হচ্ছে, String জিনিসটা কিন্তু অনেকটা array-এর মতো, এটা দেখে প্রথম প্রথম বিশ্বাস কম হবে, তবে একটু পরে বিশ্বাস হবে। তবে তার আগে কয়েকটা স্ট্রিংয়ের উদাহরণ দেখ—
const country = 'Bangladesh';
const division = "Noakhali";
এখন আবার একটা অ্যারে ডিক্লেয়ার করলি—
const numbers = [54, 98, 78, 21, 65]; অ্যারের মধ্যে অনেকগুলো উপাদান আছে এবং সবগুলো উপাদানই কমা(,) দিয়ে আলাদা করা রয়েছে। তুই জানস যে, অ্যারের উপাদানগুলোকে এক্সেস করার জন্য তার index ব্যবহার করতে হয় এবং array-এর indexing শুরু হয় শূন্য থেকে। যেমন, 0 ইনডেক্সে আছে 54, 1 ইনডেক্সে আছে 98, 2 ইনডেক্সে আছে 78, 3 ইনডেক্সে আছে 21, 4 ইনডেক্সে আছে 65 এবং তুই এটাও জানস যে, numbers.length লিখে array-এর length বের করতে পারবি।
এই জিনিসটা স্ট্রিংয়ের সাথেও সেইম।
যেমন ধর, তুই একটা স্ট্রিং ডিক্লেয়ার করলি—
const capital = ‘Dhaka’; এখন তুই চাইলে capital.length লিখে console.log করে দেখবি, output-এ 5 দেখাচ্ছে। এটা দিয়ে কী বুঝাচ্ছে? এটা দিয়ে বুঝায়, capital নামক ভেরিয়েবলের মধ্যে যে স্ট্রিং আছে, সেটার মধ্যে পাঁচটা ক্যারেক্টার আছে।
const capital = "Dhaka";
console.log(capital.length);
Output: 5এখন যদি তুই ঢাকার মধ্যে একটু ফাঁকা করে দিলি। অর্থাৎ Dha-এর পর একটু স্পেস বা গ্যাপ দিয়ে দিলি, তাহলেও দেখলে capital নামক ভেরিয়েবলের মধ্যে 5টা ক্যারেক্টারই থাকে। তবে লেংথ কি 5 হবে? সেটা দেখার জন্য আউটপুটটা দেখ—
const capital = "Dha ka";
console.log(capital.length);
Output: 6তাহলে এটা বোঝা যাচ্ছে যে, সব সময় যে .length দিয়ে total character বুঝাবে, তা কিন্তু না। এখানে বুঝাচ্ছে, কতটুকু জায়গা সে নিয়েছে। Dha আর ka-এর মধ্যে যে একটা খালি জায়গা আছে, সেটাও কিন্তু একটা জিনিস। সেখানে খালি রাখার জন্যও কিন্তু সে একটু জায়গা রেখেছে। অনেকটা রাস্তা, ড্রেন বা খালের জন্য মাঝেমধ্যে জায়গা খালি রাখলেও সেটা কিন্তু একটা জায়গা হিসেবে কাউন্ট হবে। সেজন্যই লেংথ একটা বেড়ে গেছে।
শুধু length না; বরং তুই যেভাবে অ্যারের প্রতিটা উপাদান index-এর মাধ্যমে এক্সেস করতে পারতি, ঠিক একইভাবেও string-এর সব উপাদান একসেস করতে পারবি।
const capital = "Dhaka";
console.log(capital[0]);
Output: Dআছে কি নাই?
অ্যারের মতো কোনো স্ট্রিংয়ে নির্দিষ্ট অক্ষর বা শব্দ আছে কি না, তা যাচাই করতে includes() মেথড ব্যবহার করতে পারবি।
const name = 'Abid';
console.log(name.includes('d'));
Output: trueএমনকি indexOf দিয়ে চেক করতে পারবি, কোনো একটা উপাদান (বা একাধিক ক্যারেক্টার) স্ট্রিংয়ের মধ্যে কোন ইনডেক্সে আছে। যদি থাকে, তাহলে সেই ইনডেক্স রিটার্ন করবে। আর যদি না থাকে, তাহলে -1 ইনডেক্স হিসেবে রিটার্ন করবে।
const language = 'javascript';
console.log(language.indexOf('rip'));
console.log(language.indexOf('py'));
Output:
6
-1এর মাধ্যমে বোঝাই যাচ্ছে যে, string কিছুটা অ্যারের মতো। কিছুটা বলেছি, পুরোপুরি যে সেইম, তা কিন্তু বলিনি। এইবার তোর মনে প্রশ্ন জাগতে পারে, কিন্তুটা কই? কিন্তু হচ্ছে, তুই চাইলে index দিয়ে অ্যারের যেকোনো পজিশনের উপাদানের মান চেইঞ্জ করতে পারবি। নিচের মতো করে।
const numbers = [ 54, 98, 78, 21, 65];
numbers[1] = 11;
console.log(numbers);
Output:[ 54, 11, 78, 21, 65 ]কিন্তু এই কাজ string-এ করতে পারবি না। তুই ইনডেক্স দিয়ে স্ট্রিংয়ের মধ্যে কিছু আপডেট করতে পারবি না।
const capital = "Dhaka";
capital[ 0 ] = "F";
console.log(capital);
Output: Dhakaএইখানে ঘটনা হচ্ছে— স্ট্রিং চেইঞ্জেবল না। এইটাকে একবার সেট করলে আর চেইঞ্জ করা যায় না। এই যে চেইঞ্জ করা যায় না, এইটাকে কঠিনভাবে বললে, কেউ কেউ বলে স্ট্রিং হচ্ছে immutable। এইটা একটা কঠিন শব্দ। তবে এইটাকে ভাঙলে বুঝা যায়, immutable মানে হচ্ছে not mutable বা not changeable।
অন্য দিকে অ্যারে চেইঞ্জ করা যায় বলে সেটাকে changeable বা mutable বলে। চেইঞ্জ করতে পারবি মানে— কোনো পজিশনে আগের মান চাইলে পরিবর্তন করে নতুন আরেক মান দেয়া যায়। আবার দরকার হলে উপাদান push করা যায়। pop করে বের করা যায়।
এত কিছু কঠিন মনে হলে জাস্ট আরেকবার খেয়াল কর, অ্যারে হচ্ছে mutable আর স্ট্রিং হচ্ছে immutable।
শেষ কথা হচ্ছে, স্ট্রিং অ্যারে না। তবে তারা বেশি দূরেরও না।
Practice:
- একটা স্ট্রিং বানা city, যার মান হবে Chattogram। এবার indexOf দিয়ে বের কর, g কোন ইনডেক্সে আছে।
- একটা স্ট্রিং বানা division, যার মান হবে Sylhet। includes দিয়ে দেখ, এই স্ট্রিংয়ের মধ্যে y আছে কি না।
- const name = 'Rifat'; স্ট্রিংয়ের শেষ ক্যারেক্টার বের কর।
- একটা স্ট্রিং বানা language, যার মান হবে javascript। এবার indexOf দিয়ে চেক কর, rip কোন ইনডেক্সে শুরু হয়েছে।
- const text = 'Immutable'; স্ট্রিংয়ের দৈর্ঘ্য বের কর এবং চেক কর এটি mutable কি না।