আমরা এই অনুশীলনীতে অবজেক্ট সম্পর্কে যা শিখেছি এটি হল তার পর্যালোচনা।
জাভাস্ক্রিপ্টের চলকের মধ্যে অনেক ধরণের মান সংরক্ষণ করা যায় এবং অনেক সময় পরস্পর সম্পর্কযুক্ত মানগুলোকে একসাথে সংরক্ষণ করা প্রয়োজনীয় হয়: এক্ষেত্রেই অবজেক্ট ব্যবহার করা হয়!
অবজেক্ট হল এমন একধরনের ডাটা যা একটিমাত্র চলকের মধ্যে একাধিক বৈশিষ্ট্য সংরক্ষণ করতে দেয়। অবজেক্ট তৈরী করার জন্য, সাধারণভাবে একটি চলক তৈরি করতে হয় এবং তারপর দ্বিতীয় বন্ধনীর মধ্যে key-value বৈশিষ্ট্য জোড়টি রাখা হয়:
var objectName = { 
  propertyName: propertyValue,
  propertyName: propertyValue,
  ...
};
এখানে একটি অবজেক্ট রয়েছে যেটা উইন্সটনকে বর্ণনা করে - এই অবজেক্টের দুইটি বৈশিষ্ট্য আছে, hometown এবং hair। আর প্রতিটি বৈশিষ্ট্যের মানগুলো এখানে হল স্ট্রিং:
var aboutWinston = {
  hometown: "Mountain View, CA",
  hair: "no"
};
এখানে আরও জটিল একটি অবজেক্ট রয়েছে যেটা একটি বিড়ালকে বর্ণনা করছে, বিড়াল অবজেক্টটির চারটি বৈশিষ্ট্য হল- age, furColor, likes এবং birthday
var lizzieTheCat = {
  age: 18,
  furColor: "grey",
  likes: ["catnip", "milk"],
  birthday: {"month": 7, "day": 17, "year": 1994}
};
লক্ষ্য কর, প্রত্যেকটি বৈশিষ্ট্য কিভাবে বিভিন্ন ধরণের ডাটা সংরক্ষণ করে থাকে- age বৈশিষ্ট্যটি একটি সংখ্যা সংরক্ষণ করে, furColor বৈশিষ্ট্যটি একটি স্ট্রিং সংরক্ষণ করে, likes বৈশিষ্ট্যটি একটি অ্যারে সংরক্ষণ করে এবং birthday বৈশিষ্ট্যটি আরেকটি অবজেক্ট সংরক্ষণ করে। এটি অবজেক্টের অন্যতম মজার একটি বৈশিষ্ট্য (এটি ছাড়াও অবজেক্টের আরও অনেক মজার বৈশিষ্ট্য রয়েছে) - তারা অন্য অবজেক্টকে নিজেদের মধ্যে সংরক্ষণও করতে পারে! এজন্য জটিল ডাটা ধারণ করার ক্ষেত্রে নেস্টেড অবজেক্ট (nested objects) ব্যবহার করা হয়।
আবার বৈশিষ্ট্যের নাম উদ্ধৃতি চিহ্নের মধ্যে ব্যবহার করেও অবজেক্ট সংজ্ঞায়িত করা যেতে পারে, যেমন:
var aboutWinston = {
  "hometown": "Mountain View, CA",
  "hair": "no"
};
এটা আগের কোডের মতই কিন্তু আগের কোডে উদ্ধৃতি ব্যবহার করা হয়নি। বৈশিষ্ট্যের নামে শুধুমাত্র তখনই এই উদ্ধৃতি চিহ্ন ব্যবহার করা আবশ্যক যখন এই বৈশিষ্ট্যের নামের পাশে ফাঁকাস্থান থাকবে, যেমন:
var aboutWinston = {
  "his hair": "none"
};
এমন ক্ষেত্রেই শুধু উদ্ধৃতি চিহ্ন ব্যবহার করতে হয়, নইলে জাভাস্ক্রিপ্টের ইন্টারপ্রেটার স্পেস দেওয়া নাম বুঝতে পারে না। তোমার জন্য মূল্যবান একটি উপদেশ হল: ফাঁকাস্থান রেখে বৈশিষ্ট্যের নাম শুরু করা উচিৎ নয়! স্পেস না রাখলে, উদ্ধৃতি দেওয়ার কোন দরকার নেই।

অবজেক্টের বৈশিষ্ট্য নিয়ে কাজ করা

অবজেক্টের বিভিন্ন বৈশিষ্ট্য নিয়ে কাজ করাই এটা ব্যবহারের আসল উপকারিতা। আমরা এটা দুইটি পদ্ধতি ব্যবহার করে কাজটি করতে পারি - প্রথম পদ্ধতিতে আমরা, "বিন্দু প্রতীক" ব্যবহার করবো, এই পদ্ধতিতে চলকের নাম লিখে, তারপর "." (বিন্দু) ব্যবহার করে বৈশিষ্ট্যের নাম লিখতে হয়:
var aboutWinston = {
  hometown: "Mountain View, CA",
  hair: "no"
};

text("Winston is from " + aboutWinston.hometown, 100, 100);
text("Winston has " + aboutWinston.hair + " hair", 100, 150);
দ্বিতীয় পদ্ধতিটি হল "বন্ধনী প্রতীক" ব্যবহার করা, অ্যারের মান নেয়ার সময় যেরকম আমরা ব্যবহার করে থাকি এটা তার মত, এই পদ্ধতিতে চলকের নাম লিখে, তারপর তৃতীয় বন্ধনীর মধ্যে উদ্ধৃতি চিহ্নসহ বৈশিষ্ট্যের নামটি লিখতে হয়:
var hisHometown = aboutWinston["hometown"];
var hisHair = aboutWinston["hair"];
অবজেক্টের মধ্যে নির্দিষ্ট বৈশিষ্ট্যটি না থাকলে,"অসংজ্ঞায়িত" দেখাবে:
text("Winston's life goal is " + aboutWinston.lifeGoal, 100, 150);

অবজেক্টের বৈশিষ্ট্য পরিবর্তন করা

চলকের মধ্যে ভিন্ন ধরণের ডাটা সংরক্ষণ করার মতই, যে কোনো সময় প্রোগ্রামে ব্যবহৃত অবজেক্টের বৈশিষ্ট্যের মান, বিন্দু বা বন্ধনী প্রতীক ব্যবহার করে পরিবর্তন করা যায়:
aboutWinston.hair = "curly"; // Winston gets a wig!
আরও নতুন বৈশিষ্ট্য যুক্ত করা যায়!
aboutWinston.lifeGoal = "teach JavaScript";
আমাদের যদি কোনো বৈশিষ্ট্য নিয়ে কাজ করা শেষ হয়ে যায়, তাহলে আমরা সেটা ডিলিট করে দিতে পারি (কিন্তু বেশিরভাগ ক্ষেত্রে শুধু মান পরিবর্তন করাই যথেষ্ট):
delete aboutWinston.hair;

অবজেক্টের অ্যারে

এখন যেহেতু আমাদের অ্যারে এবং অবজেক্ট সম্পর্কিত জ্ঞান আছে, এ দুইটি কে একসাথে করে অবজেক্টের অ্যারে তৈরী করা যায়, যা প্রোগ্রামে ডাটা সংরক্ষণের সবচেয়ে উত্তম উপায়। উদাহরণস্বরূপ, বিড়ালের অ্যারেটি হল:
var myCats = [
  {name: "Lizzie", 
   age: 18},
  {name: "Daemon",
   age: 1}
];

for (var i = 0; i < myCats.length; i++) {
  var myCat = myCats[i];
  println(myCat.name + ' is ' + myCat.age + ' years old.');
}
লক্ষ্য করি, যেভাবে সংখ্যা বা স্ট্রিং এর অ্যারে পুনরাবৃত্তি করা হয়, একইভাবে লুপ ব্যবহার করে, অবজেক্টের অ্যারের মান বের করা হয়। লুপের প্রতিটি ধাপে, বন্ধনী প্রতীক দ্বারা বর্তমান অ্যারের মান এবং বিন্দু প্রতীক দ্বারা সেই অ্যারের বৈশিষ্ট্যকে পাই।
এখানে আরেকটি ব্যবহারিক উদাহরণ আছে যা তুমি যেকোন প্রোগ্রামে ব্যবহার করতে পারবে, একটি স্থানাঙ্ক অবস্থানের অ্যারে:
var positions = [
    {x: 200, y: 100},
    {x: 200, y: 200},
    {x: 200, y: 300}
];

for (var i = 0; i < positions.length; i++) {
    var position = positions[i];
    ellipse(position.x, position.y, 100, 100);
}
খুবই পরিপাটি, তাই না? প্রথমদিকে অবজেক্ট বিভ্রান্তিকর হতে পারে, কিন্তু এটি ব্যবহার করা উচিত এবং ক্রমান্বয়েই এতে অভ্যস্ততা ও দক্ষতা লাভ করা সম্ভব। তখন অবজেক্ট নিয়ে কাজ করাই সহজ বলে মনে হবে!
লোড করা হচ্ছে