Q20. What are template literals and tagged templates?
Backtick দিয়ে string লেখা, expression বসানো আর custom tag function-এর সাথে কাজ।
Template literal হলো backtick চিহ্ন দিয়ে লেখা string — ES6-এ এসেছে। এতে string-এর ভিতরে সরাসরি expression বসানো যায় এবং একাধিক লাইনে লেখা যায়, তাই string জোড়া দিয়ে বানানোর দরকারই পড়ে না।
const name = "Rahim";
const age = 25;
// সাধারণ string জোড়া
const greeting1 = "হ্যালো, " + name + "!";
// template literal
const greeting2 = `হ্যালো, ${name}!`;
console.log(greeting2); // "হ্যালো, Rahim!"
// expression ও হিসাবও বসানো যায়
console.log(`আগামী বয়স: ${age + 1}`); // "আগামী বয়স: 26"আরেকটি সুবিধা — বিশেষচিহ্ন ও লাইন ব্রেক লেখার জন্য ব্যাকশ্ল্যাশ লাগে না।
const line = `প্রথম লাইন
দ্বিতীয় লাইন`;
console.log(line); // দুই লাইনে ছাপবে
const html = `
<div class="card">
<p>এখানে লেখা যায়</p>
</div>
`;এখন থেকে string-এর ভিতরে লিখতে চাইলে backtick-এর আগে ব্যাকশ্ল্যাশ দিন — তাহলে ${name} লেখা থাকলেও JavaScript সেটাকে expression হিসেবে বোঝাবে না। HTML বা log লেখার সময় এটি কাজে লাগে।
const name = "Rahim";
console.log(`নাম: \${name}`); // "নাম: ${name}" — হিসাব হয়নি
// নিজে expression বানাতে চাইলে tagged template
function raw(strings, ...values) {
return strings.raw.join("|") + " :: " + values.join(",");
}
console.log(raw`Hello ${name}`);Tagged template হলো এমন ফাংশন যাকে template literal-এর আগে বসিয়ে লেখা হয়। ফাংশনটি string টুকরোগুলো আর expression-এর মান আলাদা করে পায়, ফলে নিজের মতো করে ফলত্র বানাতে পারে।
function highlight(strings, ...values) {
return strings.reduce((out, part, i) => {
const value = values[i - 1];
return out + (i > 0 ? "[" + value + "]" : "") + part;
});
}
const name = "Rahim";
const msg = highlight`Hello ${name}, welcome!`;
console.log(msg); // Hello [Rahim], welcome!প্রথমে string টুকরোগুলো একটা array হিসেবে আসে, তারপর expression-এর মানগুলো আলাদা আলাদা আর্গুমেন্ট হয়ে আসে। ফাংশন চাইলে যেভাবে খুশি জোড়া লাগাতে পারে।
| বৈশিষ্ট্য | সাধারণ string | Template literal |
|---|---|---|
| চিহ্ন | ' বা \" | backtick |
| expression বসানো | + দিয়ে | ${} দিয়ে |
| লাইন ব্রেক | ব্যবহারযোগ্য নয় | সরাসরি লেখা যায় |
| HTML নিরাপত্তা | মান ঢোকে না | মান ঢুকে যেতে পারে |
| ব্যবহার | এক লাইনের string | বড় string, log, HTML |
ব্যবহারকারীর দেওয়া মান সরাসরি template literal-এ বসালে XSS-এর ঝুঁকি তৈরি হয়। তাই innerHTML-এ বসানোর আগে মান escape বা sanitize করুন, অথবা textContent ব্যবহার করুন।