Enhanced Object Literals

জাভাস্ক্রিপ্ট ইএস৬ (ES6) - Web Development

324

ES6 (ECMAScript 2015) তে অবজেক্ট তৈরি করার জন্য নতুন কিছু সিনট্যাক্স ফিচার পরিচয় দেওয়া হয়েছে, যা Enhanced Object Literals নামে পরিচিত। এগুলো অবজেক্টের ভ্যালু ডিফাইন করার প্রক্রিয়াকে সহজ, পরিষ্কার এবং শক্তিশালী করে তোলে। এটি অবজেক্টের প্রপার্টি ডেফিনিশন, মেথড ডেফিনিশন এবং প্যারামিটার পাসের ক্ষেত্রে অনেক সুবিধা দেয়।


1. শর্টেনড সিনট্যাক্স (Shorthand Syntax)

ES6 তে আপনি যখন অবজেক্টের প্রপার্টি এবং ভ্যালু একে অপরের নামের সমান করে দেন, তখন আপনি শর্টেনড সিনট্যাক্স ব্যবহার করতে পারেন। এতে কোড সংক্ষিপ্ত ও পরিষ্কার হয়।

উদাহরণ:

const name = "Alice";
const age = 30;

const person = {
  name,  // Same as name: name
  age    // Same as age: age
};

console.log(person);  // { name: "Alice", age: 30 }

এখানে, name এবং age এর নামের সাথে তাদের মান একই, তাই ভ্যালু ডিফাইন করার জন্য শুধু নাম লেখা যথেষ্ট।


2. মেথড শর্টকাট (Method Shorthand)

ES6 এ অবজেক্টের মেথড ডিফাইন করারও একটি শর্টকাট তৈরি করা হয়েছে, যেখানে function কিওয়ার্ড ব্যবহার করা প্রয়োজন নেই। এটি কোডকে আরও পরিষ্কার এবং সংক্ষিপ্ত করে তোলে।

উদাহরণ:

const person = {
  name: "Alice",
  greet() {  // Shortened method definition
    console.log(`Hello, ${this.name}!`);
  }
};

person.greet();  // "Hello, Alice!"

এখানে, greet() মেথডকে কোনো ফাংশন কিওয়ার্ড ছাড়াই ডিফাইন করা হয়েছে। এটি name প্রপার্টির মান ব্যবহার করে গ্রীটিং বার্তা প্রদর্শন করছে।


3. ডাইনামিক প্রপার্টি (Dynamic Property Names)

ES6 এ আপনি অবজেক্টের প্রপার্টি নাম ডাইনামিকভাবে সেট করতে পারেন। এটি খুবই দরকারী যখন প্রপার্টি নাম বা কীগুলি চলক (variables) হতে পারে, এবং তাদের মান runtime এ নির্ধারিত হয়।

উদাহরণ:

const propName = "age";
const person = {
  name: "Alice",
  [propName]: 30  // Dynamic property name
};

console.log(person.age);  // 30

এখানে, propName ভ্যারিয়েবলের মান (যা "age") অবজেক্টের প্রপার্টি হিসেবে ব্যবহার করা হয়েছে। [propName] সিনট্যাক্স ব্যবহার করে ডাইনামিক প্রপার্টি নাম নির্ধারণ করা হয়েছে।


4. অ্যারো ফাংশন মেথডে this

ES6 এর Enhanced Object Literals এ, this ব্যবহারের ক্ষেত্রে একটি গুরুত্বপূর্ণ পার্থক্য রয়েছে। যদি আপনি Arrow Functions ব্যবহার করেন, তবে this বাইরের স্কোপের this কে রেফার করে। সাধারণ মেথডে, this অবজেক্টের প্রসঙ্গে কাজ করে।

উদাহরণ:

const person = {
  name: "Alice",
  greet: function() {
    setTimeout(function() {
      console.log(`Hello, ${this.name}`);  // `this` refers to the global object, not `person`
    }, 1000);
  }
};

person.greet();  // undefined (or error in strict mode)

const personWithArrow = {
  name: "Bob",
  greet: function() {
    setTimeout(() => {
      console.log(`Hello, ${this.name}`);  // Arrow function inherits `this` from `greet`
    }, 1000);
  }
};

personWithArrow.greet();  // "Hello, Bob"

এখানে, setTimeout এর ভিতরে সাধারণ ফাংশন ব্যবহার করলে this global object (বা undefined strict mode এ) কে রেফার করবে। কিন্তু, Arrow Function এর ক্ষেত্রে this এর মান লেক্সিক্যাল স্কোপিং অনুযায়ী বাহিরের ফাংশনের this গ্রহণ করবে, যার কারণে this.name সঠিকভাবে কাজ করবে।


5. মেথডে super এর ব্যবহার (Class Inheritance)

যখন আপনি class ব্যবহার করেন, তখন super কিওয়ার্ড দিয়ে প্যারেন্ট ক্লাসের মেথড কল করা হয়। Enhanced Object Literals এ এই ধারণাটি সরাসরি অবজেক্টে ব্যবহার করা যায়, যদিও এটি ক্লাস ইনহেরিটেন্সের সাথে বেশি সম্পর্কিত।

উদাহরণ:

const person = {
  name: "Alice",
  greet() {
    console.log(`Hello, ${this.name}`);
  }
};

const employee = {
  __proto__: person,  // Inherit from person
  greet() {
    super.greet();  // Call greet() from the parent object
    console.log("Welcome to the company!");
  }
};

employee.greet();  // "Hello, Alice" and "Welcome to the company!"

এখানে, employee অবজেক্ট person অবজেক্ট থেকে ইনহেরিট করছে এবং super.greet() দিয়ে প্যারেন্ট অবজেক্টের মেথড কল করছে।


Enhanced Object Literals এর সুবিধাসমূহ

  1. কোড সংক্ষিপ্ততা: Shorthand সিনট্যাক্স এবং method shorthand কোডকে সংক্ষিপ্ত করে, ফলে কোড পড়তে এবং বুঝতে সহজ হয়।
  2. ডাইনামিক প্রপার্টি: অবজেক্টের প্রপার্টি নাম ডাইনামিকভাবে নির্ধারণ করা যায়, যা কোডের আরও ফ্লেক্সিবিলিটি বৃদ্ধি করে।
  3. এ্যারো ফাংশন এবং this: Arrow functions এর মাধ্যমে আপনি সহজে this এর মান বুঝতে পারেন এবং এটা বাইরের স্কোপের সাথে সম্পর্কিত থাকে।
  4. ক্লাস ইনহেরিটেন্স: super কিওয়ার্ডের সাহায্যে অবজেক্টের মধ্যে মেথড ইনহেরিট করা সম্ভব হয়।

সারাংশ

ES6 এর Enhanced Object Literals ফিচারটি অবজেক্টের ডিফাইনেশন, মেথড ক্রিয়েশন এবং ডাইনামিক প্রপার্টি ব্যবহারে সুবিধা প্রদান করে। এর মাধ্যমে কোড হয়ে ওঠে সংক্ষিপ্ত, সহজ এবং আরও ফ্লেক্সিবল, এবং Arrow Functions এর ব্যবহার this এর আচরণে আরও প্রেডিক্টেবলতা নিয়ে আসে।

Content added By

Object Literal Enhancement ES6 (ECMAScript 2015) এ একটি নতুন বৈশিষ্ট্য, যা অবজেক্ট তৈরি করার সময় কোডের সাদৃশ্য বাড়ায় এবং আরও সহজ করে তোলে। এর মাধ্যমে অবজেক্ট ডিফাইনেশনে নতুন কিছু সুবিধা যুক্ত হয়েছে, যেমন শর্টকাট সাইনট্যাক্স এবং ডাইনামিক প্রপার্টি কিওয়ার্ড।


Object Literal Enhancement এর বৈশিষ্ট্য

  1. শর্টকাট প্রপার্টি সিনট্যাক্স: যখন অবজেক্টের প্রপার্টি এবং ভ্যারিয়েবলের নাম একই হয়, তখন আপনি প্রপার্টি ডিফাইন করার সময় শুধুমাত্র ভ্যারিয়েবলের নাম লিখে এটি সরাসরি প্রপার্টি হিসেবে ব্যবহার করতে পারেন।

    উদাহরণ:

    const name = "John";
    const age = 30;
    
    const person = { name, age };
    console.log(person);  // { name: "John", age: 30 }
    

    এখানে, name এবং age ভ্যারিয়েবলগুলোর নামের সাথে অভ্যন্তরীণ প্রপার্টির নাম এক হয়ে গেছে। পূর্বের সিনট্যাক্সে, আপনাকে একে একে name: name এবং age: age লিখতে হত, কিন্তু ES6 এ এটি শর্টকাট করে name, age দেওয়া সম্ভব হয়েছে।


  1. ডাইনামিক প্রপার্টি কিওয়ার্ড: ES6 এ আপনি অবজেক্টের প্রপার্টি কিওয়ার্ডকে ডাইনামিকভাবে নির্ধারণ করতে পারেন। অর্থাৎ, কিওয়ার্ডটি একটি এক্সপ্রেশন হতে পারে যা রানটাইমে মূল্যায়ন হয়।

    উদাহরণ:

    const dynamicKey = "age";
    const person = {
      name: "John",
      [dynamicKey]: 30  // ডাইনামিক কিওয়ার্ড ব্যবহার করা হচ্ছে
    };
    console.log(person);  // { name: "John", age: 30 }
    

    এখানে, [dynamicKey] ব্যবহার করে, age প্রপার্টি ডাইনামিকভাবে নির্ধারণ করা হয়েছে, যা আগে স্ট্যাটিকভাবে age: 30 থাকত। আপনি যেকোনো এক্সপ্রেশনকে কিওয়ার্ড হিসেবে ব্যবহার করতে পারেন, যেমন:

    const key = "location";
    const person = {
      name: "Alice",
      [key]: "New York"
    };
    console.log(person);  // { name: "Alice", location: "New York" }
    

  1. Method Shorthand: ES6 এ, আপনি অবজেক্টের মেথডগুলো ডিফাইন করার সময় ফাংশনের জন্য function কিওয়ার্ড ছাড়াও শর্টকাট সিনট্যাক্স ব্যবহার করতে পারেন। এটি কোডকে আরও সংক্ষিপ্ত এবং পরিষ্কার করে।

    উদাহরণ:

    const person = {
      name: "John",
      greet() {  // শর্টকাট সিনট্যাক্স
        console.log("Hello, " + this.name);
      }
    };
    person.greet();  // "Hello, John"
    

    এখানে, greet() মেথডটি function greet() এর বিকল্প, যেখানে আপনি ফাংশন ডিক্লেয়ার করার সময় function কিওয়ার্ডটি বাদ দিতে পারেন।


Object Literal Enhancement এর সুবিধা

  1. কোডের সাদৃশ্য বৃদ্ধি: Object Literal Enhancement কোডকে সংক্ষিপ্ত ও আরও পাঠযোগ্য করে তোলে, বিশেষত যখন আপনি একটি অবজেক্টের প্রপার্টি এবং ভ্যারিয়েবলের নাম একই রাখতে চান। এটি কোডের রিডেবিলিটি বাড়ায় এবং ভুল হওয়ার সম্ভাবনা কমিয়ে দেয়।
  2. ডাইনামিক প্রপার্টি তৈরি করা সহজ: ডাইনামিক প্রপার্টি কিওয়ার্ডের মাধ্যমে রানটাইমে প্রপার্টি নাম তৈরি করা সম্ভব, যা পুরোনো সিনট্যাক্সে করা যেত না। এর ফলে কোড আরও নমনীয় এবং শক্তিশালী হয়।
  3. শর্টকাট মেথড ডিফাইনেশন: মেথড শর্টকাটের মাধ্যমে কোড লেখা সহজ এবং বেশি কোড লেখার প্রয়োজন কমে যায়। এটি কোডের স্টাইলকে আরও আধুনিক এবং পরিস্কার করে তোলে।

উপসংহার

Object Literal Enhancement ES6 এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা অবজেক্ট তৈরি করার প্রক্রিয়াকে আরও সহজ, সংক্ষিপ্ত, এবং নমনীয় করে তোলে। এটি কোডের পাঠযোগ্যতা ও রিডেবিলিটি বাড়ায় এবং ডাইনামিক প্রপার্টি কিওয়ার্ড এবং শর্টকাট মেথড সাইনট্যাক্সের মাধ্যমে কোডের কার্যক্ষমতা উন্নত করে।

Content added By

Concise Properties এবং Concise Methods ES6 এর দুটি গুরুত্বপূর্ণ ফিচার যা কোডকে আরও সংক্ষিপ্ত, পরিষ্কার এবং সহজ করে তোলে। এই ফিচারগুলির মাধ্যমে আপনি অবজেক্টের প্রপার্টি এবং মেথড ডিফাইন করতে পারবেন আরও কম কোডে, যেখানে সাধারণভাবে পদ্ধতি বা প্রপার্টি ডিফাইন করতে বেশি শব্দ ব্যবহার করা হয়।


Concise Properties (সংক্ষিপ্ত প্রপার্টি)

Concise Properties এর মাধ্যমে আপনি অবজেক্ট লিটারেল ডিক্লেয়ার করার সময় প্যারামিটার নাম এবং প্রপার্টির নাম একসাথে ব্যবহার করতে পারেন, অর্থাৎ আপনি আর আলাদা করে key: value পদ্ধতি ব্যবহার করতে হবে না, যখন ভ্যালু এবং কিপথ নাম একই হয়।

উদাহরণ:

const name = "John";
const age = 30;

const person = { name, age };
console.log(person);  // { name: "John", age: 30 }

এখানে, name এবং age ভ্যারিয়েবলগুলির নামের সাথে তাদের ভ্যালু সরাসরি অবজেক্টের প্রপার্টি হিসেবে ব্যবহৃত হচ্ছে। যদি প্রপার্টির নাম এবং ভ্যালু ভ্যারিয়েবল নামের সাথে একসাথে মিলে যায়, তাহলে আপনি কোলন (:) ব্যবহার না করেও এইভাবে প্রপার্টি ডিফাইন করতে পারেন।


Concise Methods (সংক্ষিপ্ত মেথড)

Concise Methods এর মাধ্যমে আপনি অবজেক্টের মধ্যে মেথড ডিফাইন করার সময় function কিওয়ার্ডের পরিবর্তে সরাসরি ফাংশন নাম এবং প্যারেন্টেসিস দিয়ে মেথড ডিফাইন করতে পারেন। এটি কোডের দীর্ঘতা কমায় এবং কোড আরও পরিস্কার করে।

উদাহরণ:

const person = {
  name: "John",
  age: 30,
  greet() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
};

person.greet();  // "Hello, my name is John and I am 30 years old."

এখানে, greet() মেথডটি function কিওয়ার্ড ব্যবহার না করে সংক্ষিপ্তভাবে ডিফাইন করা হয়েছে। this ব্যবহার করে অবজেক্টের প্রপার্টি অ্যাক্সেস করা হয়েছে।


Concise Properties এবং Methods এর সুবিধা

  1. কোড কমানো এবং পরিষ্কার করা: Concise Properties এবং Methods কোডের আকার কমায় এবং এক লাইনে অবজেক্টের প্রপার্টি এবং মেথড ডিফাইন করতে সাহায্য করে। এটি কোডকে আরও পরিস্কার ও বোধগম্য করে।
  2. প্রপার্টি এবং মেথড ডিফাইনেশনে এককরণের সুবিধা: যখন প্যারামিটার এবং প্রপার্টি/মেথডের নাম একই হয়, তখন আলাদা করে key: value বা function কিওয়ার্ড ব্যবহার না করে একত্রে ডিফাইন করা যায়।
  3. সহজ কোড রিডেবিলিটি: কোডটি ছোট, এবং অন্যান্য ডেভেলপারদের জন্য এটি বুঝতে সহজ হয়ে ওঠে।

অতিরিক্ত উদাহরণ

Concise Properties:

const a = 10;
const b = 20;

const calc = { a, b, sum: a + b };
console.log(calc);  // { a: 10, b: 20, sum: 30 }

Concise Methods:

const person = {
  name: "Alice",
  greet() {
    console.log(`Hi, I'm ${this.name}`);
  }
};

person.greet();  // "Hi, I'm Alice"

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

Content added By

ES6 (ECMAScript 2015) এ Computed Property Names ফিচারটি পরিচিতি পেয়েছে, যা আপনাকে অবজেক্টের প্রোপার্টির নামের জন্য ডাইনামিকভাবে এক্সপ্রেশন ব্যবহার করতে দেয়। এর মাধ্যমে আপনি অবজেক্টের প্রোপার্টি নাম হিসেবে ভ্যারিয়েবল, এক্সপ্রেশন বা কোনো ফাংশন রিটার্ন ভ্যালু ব্যবহার করতে পারবেন।


Computed Property Names এর সিনট্যাক্স

Computed Property Names ব্যবহার করতে হলে, আপনি অবজেক্টের প্রোপার্টি নামের আগে [] (ব্র্যাকেট) ব্যবহার করবেন। এই ব্র্যাকেটের ভিতরে আপনি যেকোনো এক্সপ্রেশন লিখতে পারেন, যেটি একটি বৈধ প্রোপার্টি নাম হিসেবে রেজাল্ট দিবে।

উদাহরণ:

const propName = "age";
const person = {
  [propName]: 30
};

console.log(person.age);  // 30

এখানে, propName ভ্যারিয়েবলটি age স্ট্রিং ধারণ করছে, এবং [propName] ব্যবহার করে সেই প্রোপার্টি অবজেক্টে তৈরি করা হয়েছে।


উদাহরণ সহ ব্যাখ্যা

1. ডাইনামিক প্রোপার্টি নাম

আপনি যেকোনো ডাইনামিক এক্সপ্রেশন ব্যবহার করে প্রোপার্টি নাম তৈরি করতে পারেন। যেমন ভ্যারিয়েবল, কনস্ট্যান্ট বা যেকোনো ক্যালকুলেশন।

const num1 = 10;
const num2 = 20;

const sum = {
  [`sum_${num1}_${num2}`]: num1 + num2
};

console.log(sum.sum_10_20);  // 30

এখানে, প্রোপার্টি নাম sum_10_20 ডাইনামিকভাবে তৈরি করা হয়েছে, এবং তার মান হিসেবে num1 + num2 এর ফলাফল ৩০ দেওয়া হয়েছে।

2. ফাংশন বা এক্সপ্রেশন ব্যবহার করা

এক্সপ্রেশন বা ফাংশন রিটার্ন ভ্যালু দিয়েও প্রোপার্টি নাম নির্ধারণ করা যেতে পারে।

const obj = {
  [`${2 + 3}`]: "five"
};

console.log(obj['5']);  // "five"

এখানে, ${2 + 3} এর মাধ্যমে প্রোপার্টি নাম হিসেবে "5" রিটার্ন হচ্ছে, এবং "five" মান হিসাবে সেট করা হচ্ছে।


অন্য একটি উদাহরণ: অবজেক্টে মেথড যুক্ত করা

Computed Property Names ব্যবহার করে আপনি অবজেক্টে মেথডও তৈরি করতে পারেন, যেখানে মেথডের নাম ডাইনামিকভাবে নির্ধারণ করা হয়।

const dynamicMethodName = "greet";

const person = {
  [dynamicMethodName]() {
    console.log("Hello!");
  }
};

person.greet();  // "Hello!"

এখানে, dynamicMethodName ভ্যারিয়েবলটি greet ধারণ করছে এবং সেটি ব্যবহার করে একটি মেথড ডাইনামিকভাবে তৈরি করা হয়েছে।


Computed Property Names এর সুবিধা

  1. ডাইনামিক প্রোপার্টি নাম: আপনি চাইলে অবজেক্টের প্রোপার্টি নাম ডাইনামিকভাবে নির্ধারণ করতে পারবেন, যা সাধারণভাবে সম্ভব ছিল না।
  2. কনফিগারযোগ্য কোড: কোড আরও কনফিগারযোগ্য এবং পড়তে সুবিধাজনক হয়, কারণ আপনি স্ট্যাটিক প্রোপার্টি নামের পরিবর্তে ডাইনামিক এক্সপ্রেশন ব্যবহার করতে পারেন।
  3. কমপ্লেক্স অবজেক্ট এবং ফাংশন তৈরি: ফাংশন বা এক্সপ্রেশন ব্যবহার করে আরও জটিল অবজেক্ট এবং মেথড তৈরি করা সহজ হয়ে যায়।

উপসংহার

Computed Property Names ES6 এর একটি শক্তিশালী ফিচার, যা অবজেক্টে ডাইনামিক প্রোপার্টি নাম নির্ধারণের সুবিধা দেয়। এটি কোডের ফ্লেক্সিবিলিটি এবং কনফিগারেবিলিটি বাড়িয়ে দেয়, এবং একাধিক ক্ষেত্রে বিশেষভাবে উপকারী, যেমন অবজেক্টের প্রোপার্টি নাম নির্ধারণ করা যেটি রানটাইমে পরিবর্তিত হতে পারে।

Content added By

ES6 এ Object Literal এর মাধ্যমে শর্টহ্যান্ড নোটেশন ব্যবহার করা হয়েছে, যা কোড লেখা এবং পড়া সহজ করে তোলে। যখন একটি অবজেক্টের প্রপার্টি বা মেথডের নাম এবং তার মান একই হয়, তখন আপনি শর্টহ্যান্ড নোটেশন ব্যবহার করে কোডের আকার কমিয়ে ফেলতে পারেন।


Object Literal Short-Hand (শর্টহ্যান্ড)

যখন অবজেক্টের প্রপার্টি বা মেথডের নাম এবং তার মান একে অপরের সাথে মিলে যায়, তখন আপনি সহজে শর্টহ্যান্ড সিনট্যাক্স ব্যবহার করতে পারেন।

উদাহরণ:

ধরা যাক, আপনি একটি অবজেক্ট তৈরি করতে চান যার প্রপার্টি name এবং age। সাধারণভাবে আপনি কোডটি লিখতে পারেন:

const name = "John";
const age = 30;

const person = {
  name: name,
  age: age
};

console.log(person);  // { name: "John", age: 30 }

এখানে, name এবং age ভ্যারিয়েবলগুলির মানকে অবজেক্টে যুক্ত করা হয়েছে। কিন্তু ES6 তে আপনি একই কাজ শর্টহ্যান্ড নোটেশনে করতে পারেন:

const name = "John";
const age = 30;

const person = {
  name,
  age
};

console.log(person);  // { name: "John", age: 30 }

এখানে, name এবং age ভ্যারিয়েবলগুলির নাম এবং তাদের মান একই হওয়ায়, আমরা শুধু নামগুলো দিয়েই অবজেক্টটি তৈরি করেছি। এইভাবে কোড অনেক বেশি সংক্ষিপ্ত এবং পরিষ্কার হয়ে যায়।


Method Short-Hand (মেথড শর্টহ্যান্ড)

ES6-এ অবজেক্টের মেথড ডিফাইন করার সময়ও শর্টহ্যান্ড নোটেশন ব্যবহার করা সম্ভব।

উদাহরণ:

const person = {
  name: "John",
  greet: function() {
    console.log("Hello!");
  }
};

person.greet();  // "Hello!"

এখানে, greet মেথডটি সাধারণভাবে function কিওয়ার্ড দিয়ে ডিফাইন করা হয়েছে। কিন্তু ES6 তে শর্টহ্যান্ড নোটেশনে এটি এভাবে লিখতে পারেন:

const person = {
  name: "John",
  greet() {
    console.log("Hello!");
  }
};

person.greet();  // "Hello!"

এখানে, greet() মেথডটি আর function কিওয়ার্ড ছাড়াই ডিফাইন করা হয়েছে, যা কোডকে আরও সংক্ষিপ্ত এবং পরিষ্কার করে তোলে।


উপসংহার

ES6-এর Object Literal Short-Hand এবং Method Short-Hand ব্যবহার করে আপনি অবজেক্ট এবং মেথড ডিফাইন করার সময় কোডের আকার কমাতে পারেন এবং কোডটি আরও পরিষ্কার ও সংক্ষিপ্ত রাখতে পারেন। এটি কোডের রিডেবিলিটি এবং মান বজায় রাখতে সহায়ক।

Content added By
Promotion

Are you sure to start over?

Loading...