Lesson ৭ মিনিট পড়া

অবজেক্ট (Objects)

কি-ভ্যালু পেয়ার (Key-value pair) যা বাস্তবের যেকোনো কিছুর মডেল তৈরি করতে দেয়

অবজেক্ট — সবকিছুরই মূল ভিত্তি (Objects — The Building Blocks of Everything)

অ্যারেকে যদি সারি করে রাখা লকার (০, ১, ২... নাম্বার দেওয়া) হিসেবে ভাবা হয়, তবে অবজেক্টগুলোকে নাম লেখা বা লেবেল করা ড্রয়ারসহ একটি ফাইলিং ক্যাবিনেটের মতো চিন্তা করতে পারেন। প্রতিটি ড্রয়ারের একটি নাম (কী (key)) থাকে এবং তার ভেতরে কিছু একটা (ভ্যালু বা মান (value)) থাকে।

অবজেক্ট আপনাকে একে অপরের সাথে যুক্ত ডেটাকে একসাথে রাখার সুযোগ দেয়। একটি গেমে একজন প্লেয়ার মানে কেবল তার একটি নাম বা তার স্কোর নয় — বরং তার নাম ও স্কোর দুটোই, সাথে তার বর্তমান লেভেল, তার কাছে থাকা জিনিসপত্র এবং আরও অনেক কিছু নিয়ে তার পরিচয়। অবজেক্ট আপনাকে এই সবকিছুকে সুন্দরভাবে এক জায়গায় সাজিয়ে রাখার সুযোগ করে দেয়।

জাভাস্ক্রিপ্টের একেবারে গভীরে গেলে প্রায় সবকিছুই এক একটি অবজেক্ট — অ্যারে, ফাংশন, তারিখ, এমনকি এরর বা ভুলগুলোও এর ব্যতিক্রম নয়। অবজেক্ট বুঝতে পারা মানেই আসল জাভাস্ক্রিপ্টকে বুঝতে পারা।

অবজেক্ট তৈরি এবং অ্যাক্সেস করা (Creating & Accessing Objects)

// Creating an object
let player = {
name: "Laboni",
level: 12,
health: 95,
isAlive: true,
inventory: ["sword", "shield", "potion"]
};
// Accessing properties — two ways:
console.log(player.name); // "Laboni" (dot notation)
console.log(player["level"]); // 12 (bracket notation)
// Bracket notation is required for:
// 1. Dynamic keys (from variables)
let key = "health";
console.log(player[key]); // 95
// 2. Keys with spaces or special characters
let weird = { "full name": "Laboni Akter" };
console.log(weird["full name"]); // "Laboni Akter"
// Adding new properties
player.score = 2500;
console.log(player.score); // 2500
// Deleting properties
delete player.isAlive;
console.log(player.isAlive); // undefined
Output
Laboni
12
95
Luna Star
2500
undefined

মেথড — যখন অবজেক্টগুলো কাজ করতে পারে (Methods — When Objects Can Do Things)

জাভাস্ক্রিপ্টে মেথড (method) হলো এমন একটি ফাংশন যা অবজেক্টের একটি প্রপার্টি হিসেবে সংরক্ষিত থাকে। এটি অবজেক্টগুলোকে শুধু ডেটা বা তথ্য ধরে রাখতেই সাহায্য করে না, তাদের দিয়ে বিভিন্ন কাজ করিয়ে নিতেও সাহায্য করে। যখন আপনি console.log() কল করেন, আপনি মূলত console অবজেক্টের log মেথডটিকেই কল করেন!

একটি মেথডের ভেতরে, this শব্দটি ঐ মেথডটি যে অবজেক্টের অন্তর্ভুক্ত তাকে নির্দেশ করে। এভাবেই মেথডটি বুঝতে পারে যে এটির ঠিক কোন অবজেক্টের ডেটা বা তথ্য ব্যবহার করা উচিত।

মেথড, কম্পিউটেড প্রোপার্টি এবং শর্টহ্যান্ড (Methods, Computed Properties & Shorthand)

let dog = {
name: "Pixel",
breed: "Corgi",
energy: 100,
// Method — shorthand syntax
bark() {
console.log(`${this.name} says: Woof!`);
},
play() {
this.energy -= 20;
console.log(`${this.name} played! Energy: ${this.energy}`);
}
};
dog.bark(); // "Pixel says: Woof!"
dog.play(); // "Pixel played! Energy: 80"
dog.play(); // "Pixel played! Energy: 60"
// Computed property names
let field = "color";
let shirt = { [field]: "blue", size: "M" };
console.log(shirt.color); // "blue"
// Shorthand: when variable name matches key name
let x = 10, y = 20;
let point = { x, y }; // same as { x: x, y: y }
console.log(point); // { x: 10, y: 20 }
Output
Pixel says: Woof!
Pixel played! Energy: 80
Pixel played! Energy: 60
blue
{ x: 10, y: 20 }

ডিস্ট্রাকচারিং, স্প্রেড এবং কাজের মেথডসমূহ (Destructuring, Spread & Useful Methods)

অ্যারের মতোই অবজেক্টও সাপোর্ট বা সমর্থন করে ডিস্ট্রাকচারিং (destructuring) (প্রপার্টিগুলো টেনে ভ্যারিয়েবলে বের করে আনা) এবং স্প্রেড অপারেটর (spread operator) (অবজেক্টগুলো কপি করা বা একত্রে মেশানো)।

Object-এর ভেতরে সরাসরি তিনটি অত্যন্ত কার্যকরী স্ট্যাটিক মেথড (static method) থাকে:

  • Object.keys(obj) — সবগুলো কী-এর (key) নামের তালিকা বা অ্যারে রিটার্ন করে
  • Object.values(obj) — অবজেক্টের সব ভ্যালু বা মানের তালিকা বা অ্যারে রিটার্ন করে
  • Object.entries(obj)[key, value] জোড়ার বা পেয়ারের একটি অ্যারে রিটার্ন করে (লুপ চালানোর জন্য দারুণ!)

ডিস্ট্রাকচারিং, স্প্রেড এবং Object.keys/values/entries

let movie = { title: "Inception", year: 2010, rating: 8.8 };
// Destructuring — pull out properties
let { title, year } = movie;
console.log(title); // "Inception"
console.log(year); // 2010
// Rename while destructuring
let { rating: score } = movie;
console.log(score); // 8.8
// Default values
let { director = "Unknown" } = movie;
console.log(director); // "Unknown" (movie has no 'director' key)
// Spread — copy and merge objects
let base = { a: 1, b: 2 };
let extra = { b: 99, c: 3 };
let merged = { ...base, ...extra };
console.log(merged); // { a: 1, b: 99, c: 3 } (later values win!)
// Object.keys, values, entries
let pet = { name: "Mochi", type: "cat", age: 3 };
console.log(Object.keys(pet)); // ["name", "type", "age"]
console.log(Object.values(pet)); // ["Mochi", "cat", 3]
// Loop over entries
for (let [key, value] of Object.entries(pet)) {
console.log(`${key}: ${value}`);
}
Output
Inception
2010
8.8
Unknown
{ a: 1, b: 99, c: 3 }
["name", "type", "age"]
["Mochi", "cat", 3]
name: Mochi
type: cat
age: 3
Note: যখন আপনি { ...a, ...b } ব্যবহার করে অবজেক্টগুলোকে স্প্রেড বা একত্রে মেলানোর (merge) চেষ্টা করেন, তখন যদি দুটো অবজেক্টেই একই নামের কি (key) থাকে, তবে একেবারে শেষের কি-টিই জয়ী হয় বা সেটির ভ্যালুই অবজেক্টে টিকে থাকে। একে অনেকটা রং করার মতো চিন্তা করতে পারেন: রংয়ের দ্বিতীয় প্রলেপটি প্রথমটিকে ঢেকে দেয়। সেটিং আপডেট করার ক্ষেত্রে এটি একটি খুবই সাধারণ প্যাটার্ন — { ...defaults, ...userPreferences }।
চ্যালেঞ্জ

ছোট কুইজ

যখন কি (key) একটি ভ্যারিয়েবলে সংরক্ষণ করা থাকে, তখন আপনি কীভাবে একটি প্রপার্টিতে অ্যাক্সেস বা প্রবেশ করবেন?

পড়া চালিয়ে যান

ArraysFunctions