ES6+ কি?
ES6 (ECMAScript 2015) এবং অন্যান্য সংস্করণগুলি জাভাস্ক্রিপ্টে শক্তিশালী নতুন বৈশিষ্ট্য যুক্ত করে যা আপনার কোডকে আরও স্বচ্ছ, সংক্ষিপ্ত এবং সুরক্ষিত করে।
Node.js JavaScript .
Node.js
সমস্ত আধুনিক Node.js সংস্করণে (10+) ES6+ বৈশিষ্ট্যগুলির জন্য আরও ভাল সমর্থন রয়েছে
নতুন বৈশিষ্ট্য
নতুন সংস্করণগুলি ES2020 এবং তার থেকে আরও সাম্প্রতিক জাভাস্ক্রিপ্ট সংযোজন সমর্থন করে৷
সুবিধা
এই আধুনিক জাভাস্ক্রিপ্ট বৈশিষ্ট্যগুলি আপনাকে সাহায্য করে:
- পরিষ্কার, আরও পঠনযোগ্য কোড লিখুন
- সাধারণ জাভাস্ক্রিপ্ট পিটফল এড়িয়ে চলুন
- আরও রক্ষণাবেক্ষণযোগ্য অ্যাপ্লিকেশন তৈরি করুন
- বাহ্যিক গ্রন্থাগারের প্রয়োজনীয়তা হ্রাস করুন
let এবং const
let এবং const কীওয়ার্ডগুলি ভেরিয়েবল ঘোষণা করার পছন্দের উপায় হিসাবে var প্রতিস্থাপিত হয়েছে:
- letআপনাকে পুনরায় বরাদ্দযোগ্য ভেরিয়েবল ঘোষণা করার অনুমতি দেয়
- constভেরিয়েবল ঘোষণা করে যেগুলি পুনরায় বরাদ্দ করা যায় না (কিন্তু বস্তুর বৈশিষ্ট্যগুলি এখনও সংশোধন করা যেতে পারে)
- উভয়ই মডিউল-ভিত্তিক, ফাংশন-ভিত্তিক var এর বিপরীতে
উদাহরণ: let এবং const
// Using let (can be changed)
let score = 10;
score = 20;
// Using const (cannot be reassigned)
const MAX_USERS = 100;
// Block scope with let
if (true) {
let message = 'Hello';
console.log(message); // Works here
}
তীর ফাংশন
তীর ফাংশন ফাংশন লেখার জন্য একটি সংক্ষিপ্ত সিনট্যাক্স প্রদান করে এবং এটিকে স্বয়ংক্রিয়ভাবে আবদ্ধ প্রেক্ষাপটে আবদ্ধ করে।
তীর ফাংশনের মূল সুবিধা:
- সহজ ফাংশন জন্য সংক্ষিপ্ত বাক্য গঠন
- এক-লাইন এক্সপোজারের জন্য পরোক্ষ আয়
- শব্দভান্ডার এই বাঁধাই (তীর ফাংশন তাদের নিজস্ব এই প্রসঙ্গ তৈরি করে না)
উদাহরণ: তীর ক্রিয়াকলাপ
// Traditional function
function add(a, b) {
return a + b;
}
// Arrow function (same as above)
const addArrow = (a, b) => a + b;
// Single parameter (no parentheses needed)
const double = num => num * 2;
// No parameters (parentheses needed)
const sayHello = () => 'Hello!';
// Using with array methods
const numbers = [1, 2, 3];
const doubled = numbers.map(num => num * 2);
console.log(doubled);
কখন তীর ফাংশন ব্যবহার করবেন না:
- অবজেক্ট পদ্ধতি (যা অবশ্যই 'এই' অবজেক্টকে উল্লেখ করবে)
- কনস্ট্রাক্টর ফাংশন ('নতুন' এর সাথে তীর ফাংশন ব্যবহার করা যাবে না)
- ইভেন্ট হ্যান্ডলারদের অবশ্যই 'এই' উপাদানটি উল্লেখ করতে হবে
টেমপ্লেট আক্ষরিক
টেমপ্লেট লিটারাল (টেমপ্লেট স্ট্রিং) ব্যাকটিক্স (`) ব্যবহার করে এমবেডেড এক্সপ্রেশন সহ স্ট্রিং তৈরি করার একটি মার্জিত উপায় প্রদান করে।
টেমপ্লেট লিটারালের মূল বৈশিষ্ট্য:
- ${expression} সিনট্যাক্স সহ স্ট্রিং ইন্টারপোলেশন
- এস্কেপ অক্ষর ছাড়া মাল্টি-লাইন স্ট্রিং
- উন্নত স্ট্রিং প্রক্রিয়াকরণের জন্য ট্যাগ করা টেমপ্লেট
উদাহরণ: টেমপ্লেট আক্ষরিক
// Basic string interpolation
const name = 'Alice';
console.log(`Hello, ${name}!`);
// Multi-line string
const message = `
This is a multi-line
string in JavaScript.
`;
console.log(message);
// Simple expression
const price = 10;
const tax = 0.2;
console.log(`Total: $${price * (1 + tax)}`);
ধ্বংস করা
ডিস্ট্রাকচারিং আপনাকে একটি সংক্ষিপ্ত সিনট্যাক্স সহ পৃথক ভেরিয়েবলে অবজেক্ট থেকে অ্যারে বা বৈশিষ্ট্য থেকে মান বের করতে দেয়।
ধ্বংসের মূল বৈশিষ্ট্য:
- একটি বিবৃতিতে একাধিক মান বের করুন
- নিষ্কাশিত বৈশিষ্ট্যগুলিতে ডিফল্ট মান বরাদ্দ করুন
- নিষ্কাশন সময় বৈশিষ্ট্য পুনঃনামকরণ
- অ্যারে উপাদান এড়িয়ে চলুন
- গভীরভাবে নেস্টেড বৈশিষ্ট্যগুলি বের করুন
উদাহরণ: অবজেক্ট ডিস্ট্রাকচারিং
// Basic object destructuring
const user = { name: 'Alice', age: 30, location: 'New York' };
const { name, age } = user;
console.log(name, age);
উদাহরণ: অ্যারে ডেস্ট্রাকচারিং
// Basic array destructuring
const colors = ['red', 'green', 'blue'];
const [first, second, third] = colors;
console.log(first, second, third);
// Skipping elements
const [primary, , tertiary] = colors;
console.log(primary, tertiary);
স্প্রেড এবং বিশ্রাম অপারেটর
স্প্রেড এবং বিশ্রাম অপারেটর (উভয়ই ... হিসাবে লেখা) আপনাকে একাধিক উপাদানের সাথে দক্ষতার সাথে কাজ করার অনুমতি দেয়।
- স্প্রেড অপারেটর:স্বতন্ত্র উপাদান হিসাবে পুনরাবৃত্তিযোগ্য (অ্যারে, অবজেক্ট, স্ট্রিং) প্রসারিত করে
- বিশ্রাম অপারেটর:একটি একক অ্যারে বা বস্তুতে একাধিক উপাদান সংগ্রহ করে
উদাহরণ: স্প্রেড অপারেটর
// Array spread - combining arrays
const numbers = [1, 2, 3];
const moreNumbers = [4, 5, 6];
const combined = [...numbers, ...moreNumbers];
console.log(combined);
// Array spread - converting string to array of characters
const chars = [...'hello'];
console.log(chars);
উদাহরণ: REST অপারেটর
// Rest parameter in functions
function sum(...numbers) {
return numbers.reduce((total, num) => total + num, 0);
}
console.log(sum(1, 2, 3, 4, 5));
ডিফল্ট পরামিতি
ES6+ আপনাকে ফাংশন প্যারামিটারের জন্য ডিফল্ট মান নির্দিষ্ট করতে দেয়, অনেক ক্ষেত্রে ম্যানুয়াল প্যারামিটার যাচাইকরণের প্রয়োজনীয়তা দূর করে।
ডিফল্ট পরামিতিগুলির প্রধান সুবিধাগুলি হল:
- ম্যানুয়াল বৈধতা ছাড়া ফাংশন সংজ্ঞা পরিষ্কার করুন
- আরো স্বচ্ছ ফাংশন স্বাক্ষর
- ডিফল্ট মানগুলি শুধুমাত্র তখনই ব্যবহৃত হয় যখন প্যারামিটারগুলি সংজ্ঞায়িত বা প্রদান করা হয় না
- ডিফল্ট মানগুলি কেবল সাধারণ মানই নয়, অভিব্যক্তিও হতে পারে
উদাহরণ: ডিফল্ট পরামিতি
// Basic default parameter
function greet(name = 'Guest') {
return `Hello, ${name}!`;
}
console.log(greet());
console.log(greet('Kai'));
ক্লাস
ES6 জাভাস্ক্রিপ্টে ক্লাস সিনট্যাক্স প্রবর্তন করেছে, যা অবজেক্ট তৈরি করতে এবং উত্তরাধিকার প্রয়োগ করার একটি পরিষ্কার এবং আরও সংক্ষিপ্ত উপায় প্রদান করে।
প্রযুক্তিগতভাবে, জাভাস্ক্রিপ্ট ক্লাসগুলি এখনও প্রোটোটাইপের উপর ভিত্তি করে।
জাভাস্ক্রিপ্ট ক্লাসের মূল বৈশিষ্ট্য:
- কনস্ট্রাক্টর ফাংশন এবং পদ্ধতি তৈরি করার জন্য সিনট্যাক্স পরিষ্কার করুন
- প্রসারিত ব্যবহার করে উত্তরাধিকারের জন্য অন্তর্নির্মিত সমর্থন
- স্ট্যাটিক পদ্ধতি একটি ক্লাসের সাথে সংযুক্ত, ঘটনা নয়
- আরও সীমিত সম্পত্তি অ্যাক্সেসের জন্য গেটার এবং সেটার পদ্ধতি
- ভাল এনক্যাপসুলেশনের জন্য ব্যক্তিগত ক্ষেত্র (ES2022+)
উদাহরণ: ক্লাস বেসিক
// Simple class with constructor and method
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
return `Hello, I'm ${this.name}!`;
}
}
// Create an instance
const person = new Person('Alice', 25);
console.log(person.greet()); // Hello, I'm Alice!
উদাহরণ: ক্লাস ইনহেরিটেন্স
// Parent class
class Animal {
constructor(name) {
this.name = name;
}
speak() {
return `${this.name} makes a sound.`;
}
}
// Child class
class Dog extends Animal {
speak() {
return `${this.name} barks!`;
}
}
const dog = new Dog('Rex');
console.log(dog.speak());
উদাহরণ: প্রাইভেট ক্লাস ফিল্ড (ES2022+)
// Class with private field (# prefix)
class Counter {
#count = 0; // Private field
increment() {
this.#count++;
}
getCount() {
return this.#count;
}
}
const counter = new Counter();
counter.increment();
console.log(counter.getCount());
// console.log(counter.#count); // Error: Private field
প্রতিশ্রুতি এবং অ্যাসিঙ্ক/অপেক্ষা করুন
আধুনিক জাভাস্ক্রিপ্ট অ্যাসিঙ্ক্রোনাস ক্রিয়াকলাপগুলি পরিচালনা করার জন্য শক্তিশালী সরঞ্জাম সরবরাহ করে যা বিলম্ব, API কল বা I/O ক্রিয়াকলাপ জড়িত এমন কোডের সাথে কাজ করা আরও সহজ করে তোলে।
প্রতিশ্রুতি
প্রতিশ্রুতিগুলি সেই মানগুলিকে বোঝায় যা এখনও উপলব্ধ নয়।
তারা কলব্যাকের তুলনায় অ্যাসিঙ্ক্রোনাস ক্রিয়াকলাপগুলি পরিচালনা করার আরও মার্জিত উপায় সরবরাহ করে।
এই রাজ্যগুলির একটিতে একটি প্রতিশ্রুতি রয়েছে:
- মুলতুবি:প্রাথমিক অবস্থা পূর্ণ বা প্রত্যাখ্যান করা হয় না
- সম্পন্ন:অপারেশন সফলভাবে সম্পন্ন হয়েছে
- প্রত্যাখ্যাত:অপারেশন ব্যর্থ হয়েছে
উদাহরণ: মৌলিক প্রতিশ্রুতি
// Creating a promise
const fetchData = () => {
return new Promise((resolve, reject) => {
// Simulating an API call
setTimeout(() => {
const data = { id: 1, name: 'Product' };
const success = true;
if (success) {
resolve(data); // Fulfilled with data
} else {
reject(new Error('Failed to fetch data')); // Rejected with error
}
}, 1000);
});
};
// Using a promise
console.log('Fetching data...');
fetchData()
.then(data => {
console.log('Data received:', data);
return data.id; // Return value is passed to the next .then()
})
.then(id => {
console.log('Processing ID:', id);
})
.catch(error => {
console.error('Error:', error.message);
})
.finally(() => {
console.log('Operation completed (success or failure)');
});
console.log('Continuing execution while fetch happens in background');
Async/Await
Async/await (ES2017-এ প্রবর্তিত) প্রতিশ্রুতি দিয়ে কাজ করার জন্য, অ্যাসিঙ্ক্রোনাস কোডের চেহারা এবং সিঙ্ক্রোনাস কোডের মতো আচরণ করার জন্য একটি পরিষ্কার সিনট্যাক্স প্রদান করে।
উদাহরণ: Async/Await
// Function that returns a promise
const fetchUser = (id) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (id > 0) {
resolve({ id, name: `User ${id}` });
} else {
reject(new Error('Invalid user ID'));
}
}, 1000);
});
};
// Using async/await
async function getUserData(id) {
try {
console.log('Fetching user...');
const user = await fetchUser(id); // Waits for the promise to resolve
console.log('User data:', user);
// You can use the result directly
return `${user.name}'s profile`;
} catch (error) {
// Handle errors with try/catch
console.error('Error fetching user:', error.message);
return 'Guest profile';
}
}
// Async functions always return promises
console.log('Starting...');
getUserData(1)
.then(result => console.log('Result:', result))
.catch(error => console.error('Unexpected error:', error));
console.log('This runs before getUserData completes');
সাধারণ অ্যাসিঙ্ক/অপেক্ষার ভুলগুলি:
- ভুলে যাওয়া যে Async ফাংশন সবসময় প্রতিশ্রুতি প্রদান করে
- চেষ্টা/ক্যাচ সহ ত্রুটিগুলি পরিচালনা করতে ব্যর্থতা
- ক্রমানুসারে ক্রিয়াকলাপ চালানো যখন সেগুলি সমান্তরালভাবে চালানো যায়
- একটি Async ফাংশনের বাইরে await ব্যবহার করে
- অ-প্রতিশ্রুতি মান আশা করা (অপ্রয়োজনীয় কিন্তু ক্ষতিকারক)
ES মডিউল
ES মডিউল (ESM) কোড সংগঠিত এবং ভাগ করার জন্য একটি প্রমিত উপায় প্রদান করে। এগুলি ES2015 এ চালু করা হয়েছিল এবং এখন Node.js-এ স্থানীয়ভাবে সমর্থিত।
ES মডিউলগুলির মূল সুবিধা:
- স্থির ব্যাচ গঠন (সংকলনের সময় আমদানি বিশ্লেষণ করা হয়)
- ডিফল্ট এবং নাম রপ্তানি/আমদানি
- উন্নত নির্ভরতা ব্যবস্থাপনা
- গাছ কাটা (অব্যবহৃত কোড অপসারণ)
উদাহরণ: ES মডিউল
File: math.js
// Named exports
export const PI = 3.14159;
export function add(a, b) {
return a + b;
}
export function multiply(a, b) {
return a * b;
}
// Default export
export default class Calculator {
add(a, b) {
return a + b;
}
subtract(a, b) {
return a - b;
}
}
File: app.js
// Import default export
import Calculator from './math.js';
// Import named exports
import { PI, add, multiply } from './math.js';
// Import with alias
import { add as mathAdd } from './math.js';
// Import all exports as a namespace
import * as MathUtils from './math.js';
const calc = new Calculator();
console.log(calc.subtract(10, 5)); // 5
console.log(add(2, 3)); // 5
console.log(mathAdd(4, 5)); // 9
console.log(MathUtils.PI); // 3.14159
console.log(MathUtils.multiply(2, 3)); // 6
Node.js ES :
আপনি হয় করতে পারেন:
- ব্যাচ ফাইলের জন্য .mjs এক্সটেনশন ব্যবহার করুন
- আপনার package.json এ "টাইপ": "মডিউল" যোগ করুন
- --পরীক্ষামূলক-মডিউল পতাকা ব্যবহার করুন (পুরনো Node.js সংস্করণ)
CommonJS মডিউল সিস্টেম (require() এবং module.exports) এখনও Node.js-এ ব্যাপকভাবে ব্যবহৃত হয়। ES মডিউল এবং CommonJS একই প্রকল্পে সহাবস্থান করতে পারে, কিন্তু তাদের আলাদা শব্দার্থ আছে।
উন্নত বস্তু আক্ষরিক
ES6+ অবজেক্ট লিটারেলে বেশ কিছু উন্নতি প্রবর্তন করেছে যা অবজেক্ট তৈরিকে আরও সংক্ষিপ্ত এবং স্বচ্ছ করে তোলে।
উদাহরণ: উন্নত বস্তুর আক্ষরিক
// Property shorthand
const name = 'Alice';
const age = 30;
// Instead of {name: name, age: age}
const person = { name, age };
console.log(person);
// Method shorthand
const calculator = {
// Instead of add: function(a, b) { ... }
add(a, b) {
return a + b;
},
subtract(a, b) {
return a - b;
}
};
console.log(calculator.add(5, 3));
ঐচ্ছিক চ্যানেলিং এবং নালিশ কোলেসিং
আধুনিক জাভাস্ক্রিপ্ট নিরাপদে নেস্টেড বৈশিষ্ট্যগুলি অ্যাক্সেস করতে এবং নেস্টেড মানগুলি ফেরত দেওয়ার জন্য সিনট্যাক্স প্রবর্তন করে।
ঐচ্ছিক চ্যানেলিং (?।)
ঐচ্ছিক চ্যানেলিং চেইনে নাল বা অনির্ধারিত মান সম্পর্কে চিন্তা না করেই আপনাকে গভীরভাবে নেস্টেড অবজেক্টের বৈশিষ্ট্যগুলি অ্যাক্সেস করার অনুমতি দেয়।
উদাহরণ: অগ্রাধিকারমূলক চ্যানেলিং
function getUserCity(user) {
return user?.address?.city;
}
const user1 = {
name: 'Alice',
address: { city: 'New York', country: 'USA' }
};
const user2 = {
name: 'Bob'
};
const user3 = null;
console.log(getUserCity(user1)); // 'New York'
console.log(getUserCity(user2)); // undefined
console.log(getUserCity(user3)); // undefined
নালিশ কোলেসিং (??)
নাল কোলেসিং অপারেটর (??) একটি ডিফল্ট মান প্রদান করে যখন একটি মান নাল বা অনির্ধারিত হয় (কিন্তু অন্যান্য মিথ্যা মান যেমন 0 বা "" এর জন্য নয়)।
উদাহরণ: নালিশ কোলেসিং
function calculatePrice(price, tax) {
// Only uses default if tax is null or undefined
return price + (tax ?? 0.1) * price;
}
console.log(calculatePrice(100, 0)); // 100 (correct! tax of 0 was used)
console.log(calculatePrice(100, null)); // 110 (using default)
আধুনিক অ্যাসিঙ্ক্রোনাস নিদর্শন
আধুনিক জাভাস্ক্রিপ্ট অ্যাসিঙ্ক্রোনাস অপারেশন পরিচালনার জন্য শক্তিশালী প্যাটার্ন প্রদান করে। অনুক্রমিক এবং সমান্তরাল অপারেশন কখন ব্যবহার করতে হবে তা বোঝা আপনার অ্যাপ্লিকেশনের কার্যকারিতা উল্লেখযোগ্যভাবে উন্নত করতে পারে।
ক্রমাগত এবং সমান্তরাল অপারেশন:
- ক্রমাগত:অপারেশনগুলি একের পর এক চালানো হয়, প্রত্যেকটি পূর্ববর্তীটির সম্পূর্ণ হওয়ার জন্য অপেক্ষা করে
- সমান্তরাল:ফাংশনগুলি একযোগে চলে, যা ফাংশনগুলি স্বাধীন হওয়ার চেয়ে বেশি কার্যকর
উদাহরণ: ক্রমাগত ফাংশন
// Helper function to simulate an API call
function fetchData(id) {
return new Promise(resolve => {
setTimeout(() => resolve(`Data for ID ${id}`), 1000);
});
}
// Sequential execution (~3 seconds total)
async function fetchSequential() {
console.time('sequential');
const data1 = await fetchData(1);
const data2 = await fetchData(2);
const data3 = await fetchData(3);
console.timeEnd('sequential');
return [data1, data2, data3];
}
// Run the sequential example
fetchSequential().then(results => {
console.log('Sequential results:', results);
});
উদাহরণ: সমান্তরাল অপারেশন
// Parallel execution (~1 second total)
async function fetchParallel() {
console.time('parallel');
const results = await Promise.all([
fetchData(1),
fetchData(2),
fetchData(3)
]);
console.timeEnd('parallel');
return results;
}
// Run the parallel example
fetchParallel().then(results => {
console.log('Parallel results:', results);
});
প্রতিটি প্যাটার্ন কখন ব্যবহার করবেন:
- ক্রমাগত ব্যবহার করুন:যখন কার্যক্রম পূর্ববর্তী সিদ্ধান্তের উপর নির্ভর করে
- সমান্তরালতা ব্যবহার করুন:যখন ফাংশন স্বাধীন হয় এবং একই সাথে কার্যকর করা যায়
- সমান্তরাল API কল করার সময় রেট সীমা সম্পর্কে সচেতন থাকুন
- নিয়ন্ত্রিত সমান্তরাল প্রক্রিয়াকরণের জন্য p-queue এর মত লাইব্রেরি ব্যবহার করুন
সারাংশ
ES6+ বেশ কিছু বৈশিষ্ট্য চালু করেছে যা কোডকে আরও পঠনযোগ্য, রক্ষণাবেক্ষণযোগ্য এবং শক্তিশালী করে তোলে:
let/const
স্পষ্ট শব্দার্থবিদ্যা সহ মডিউল-ভিত্তিক ভেরিয়েবল
তীর ফাংশন
এই বাঁধনের জন্য একটি সংক্ষিপ্ত বাক্য গঠন এবং শব্দভাণ্ডার
টেমপ্লেট আক্ষরিক
স্ট্রিং ইন্টারপোলেশন এবং মাল্টি-লাইন স্ট্রিং
ধ্বংস করা
বস্তু এবং অ্যারে থেকে সহজেই মান বের করুন
স্প্রেড/বিশ্রাম অপারেটর
প্যাকেজগুলির সাথে দক্ষতার সাথে কাজ করুন
ডিফল্ট পরামিতি
সহজ ফাংশন সংজ্ঞা
ক্লাস
অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের জন্য একটি পরিষ্কার বাক্য গঠন
প্রতিশ্রুতি এবং অ্যাসিঙ্ক/অপেক্ষা
আরও ভাল অ্যাসিঙ্ক্রোনাস কোড পরিচালনা
ES মডিউল
প্রমিত কোড কাঠামো
উন্নত বস্তু আক্ষরিক
খুব সংক্ষিপ্ত বস্তু সিনট্যাক্স
পছন্দের চ্যানেলিং এবং নালিশ সমন্বিত
নিরাপদ সম্পদ অ্যাক্সেস এবং ডিফল্ট
এই আধুনিক বৈশিষ্ট্যগুলি বর্তমান Node.js সংস্করণগুলিতে সম্পূর্ণরূপে সমর্থিত, যা আপনাকে সাধারণ জাভাস্ক্রিপ্ট ত্রুটিগুলি এড়িয়ে পরিষ্কার, আরও স্বচ্ছ কোড লিখতে দেয়৷