যেখানে ডট(.) সেখানেই object?

আপনি যদি একজন javascript programmer হন তাহলে অবশ্যই ডট নোটেশনে object access এর সাথে আপনি পরিচিত। মানে কোডের যেখানেই আপনি ডট পাবেন সেখানেই আপনি objectও পাবেন।

js auto boxing



যেমন ধরেন আপনাদের পরিচিত একটা স্টেটমেন্ট 

console.log("Hello World!"); // output: Hello World!


এখানে ডট আছে। এবং ডটের সাহায্যে দুটি অংশে বিভক্ত।  একটা console, আরেকটা log("")। এখানে console হচ্চে একটা object এবং তার একটা method হচ্চে log(). এখানে console এবং  log() দুইটাই জাভাস্ক্রিপ্ট এর বিল্টইন object এবং method. 

তবে এইবার আপনি সিউর বিভ্রান্ত হবেন। এই স্টেটমেন্টাটা দেখেন:


"hello".toUpperCase(); // output: "HELLO"


এই স্টেটমেন্টেও ডট আছে এবং যেহেতু এই স্টেটমেন্টে ডট আছে এর মানে এখানে Objectও আছে। কিন্তু আমরা তো দেখতেছি এখানে "hello" একটা স্ট্রিং যা কিনা primitive data type.  তাহলে এটা object হলো কখন?  


এখানেই মজাটা৷ আসলে জাভাস্ক্রিপ্ট এর একটা  স্পেশাল behaviour হচ্ছে autoboxing বা automatic boxing. এর কাজ কি? এর কাজ হচ্ছে primitive data type যেমন string, number, boolean এইগুলোকে temporary object এ রাপান্তর করা। মানে হচ্ছে যেই আপনি "hello" string এ ডট(.) নোটেশন দিয়ে toUpperCase() method চালনা করতেছেন তখনই এটা auto boxing behaviour এর কারনে temporary object এ রাপান্তর হচ্ছে। এবং আপনি এই কারনেই ডট(.) দিয়ে object টাকে এক্সেস করতে পারতেছেন।


 এইবার প্রশ্ন হলো যেহেতু এটা  temporary object এ রুপান্তরিত হচ্ছে তাহলে ঔ data type এর ভবিষ্যত কি? মানে ধরেন আপনি একটা string কে auto boxing এর মাধ্যমে এক্সেস নিলেন। তাহলে ঔ string টা কি string ঔ রইলো নাকি অন্য কোনো ডাটা টাইপে রুপান্তর হবে? 

উত্তর হলো auto boxing behaviour data type change করতে পারে না। তাহলে কি হয়? auto boxing করার আগে যে ডাটা টাইপ থাকে ঔ ডাটা টাইপ ই আবার ফেরত আসে। simple ভাবে বললে


string>>> temporary object>>>string✅

string>>>temporary object >>>number ❌


তাহলে "hello".toUpperCase() // output: "HELLO" এর ব্যাখ্যা কি? এটা প্রথমে string ছিল, এর পর খুবই অল্প সময়ে জন্য object এ রুপান্তর হলো তারপর আবার string ই  হলো। তার আউটপুটের দিকে তাকান তাহলে বুঝতে পারবেন।

তো চলেন এইবার এটাকে ব্যাখ্যা করি:


"hello".toUpperCase().charAt(0); // output: "H"



এখানে "hello".toUpperCase() অংশটুকু কি object? হ্যা এটা একটা object তবে কিছুখনের জন্য।  যখন  আপনি charAt(0) method টা চালনা করবেন তখন এটি কিছুক্ষণের জন্য  obejct হয়।  আর যদি charAt(0) method টা চালনা না করেন তাহলে এটা একটা string ই থেকে যেতো। তাহলে ঘটনা কি ঘটলো?

প্রথমে "hello" string এ toUpperCase()  method চালনা করে আবার string "HELLO" তে রুপান্তর করা হলো।  এরপর আবার যখন "hello".toUpperCase() এ মানে "HELLO".charAt(0)  method টা চালনা করা হলো তখন এটা আবার string ই রইলো কিন্তু কিছুক্ষণের জন্য object হয়েছিল।


"hello".toUpperCase() // output: "HELLO"

"hello".toUpperCase().charAt(0); // output: "H"

অথবা
"HELLO".charAt(0) // output: "H"


ভূল হলে জানাবেন। 

লেখা : Nebula SCI

Previous Post
No Comment
Add Comment
comment url