TypeScript এ নামস্পেস (Namespace) একটি প্রোগ্রামিং কনসেপ্ট যা কোডকে গ্রুপ করার এবং বিভিন্ন কার্যকারিতার মধ্যে সংঘর্ষ এড়ানোর জন্য ব্যবহৃত হয়। এটি কোডের সঙ্গতি বজায় রাখতে সাহায্য করে, বিশেষত যখন বড় প্রজেক্ট তৈরি করা হয়। নামস্পেসের মাধ্যমে আপনি একাধিক ফাংশন, কনস্ট্যান্ট, ক্লাস ইত্যাদিকে একটি নির্দিষ্ট নামের অধীনে গ্রুপ করতে পারেন, যাতে একই নামের বিভিন্ন আইটেমের মধ্যে কোনো কনফ্লিক্ট না হয়।
১. নামস্পেস তৈরি করা
TypeScript এ একটি নামস্পেস তৈরি করতে namespace কিওয়ার্ড ব্যবহার করা হয়। নিচে একটি সহজ উদাহরণ দেওয়া হলো:
namespace MyNamespace {
export class Person {
name: string;
constructor(name: string) {
this.name = name;
}
greet() {
console.log(`Hello, ${this.name}`);
}
}
export function sayGoodbye() {
console.log("Goodbye!");
}
}
এখানে:
namespace MyNamespaceদিয়ে একটি নামস্পেস তৈরি করা হয়েছে।Personক্লাস এবংsayGoodbyeফাংশনexportকরা হয়েছে, যাতে অন্য জায়গা থেকে এগুলো ব্যবহার করা যায়।
২. নামস্পেসের মধ্যে ক্লাস এবং ফাংশন ব্যবহার করা
যেহেতু আমরা Person ক্লাস এবং sayGoodbye ফাংশন export করেছি, এগুলোকে আমরা অন্য কোনো ফাইল বা স্কোপে ব্যবহার করতে পারব। নিচে এর ব্যবহার দেখানো হলো:
// অন্য ফাইলে (বা স্কোপে) নামস্পেসের সদস্য ব্যবহার করা
let person = new MyNamespace.Person("John");
person.greet(); // Output: Hello, John
MyNamespace.sayGoodbye(); // Output: Goodbye!
এখানে, MyNamespace নামস্পেসের মধ্যে থাকা Person ক্লাস এবং sayGoodbye ফাংশনকে ব্যবহার করা হয়েছে।
৩. নামস্পেসের মধ্যে কনস্ট্যান্ট এবং ভ্যারিয়েবল ব্যবহার
TypeScript নামস্পেসের মধ্যে কনস্ট্যান্ট এবং ভ্যারিয়েবলও রাখতে পারে। উদাহরণস্বরূপ:
namespace MathUtils {
export const PI = 3.14;
export function calculateArea(radius: number): number {
return PI * radius * radius;
}
}
console.log(MathUtils.PI); // Output: 3.14
console.log(MathUtils.calculateArea(5)); // Output: 78.5
এখানে:
PIকনস্ট্যান্ট এবংcalculateAreaফাংশনMathUtilsনামস্পেসের অংশ।- এগুলোকে
MathUtilsনামস্পেসের মাধ্যমে এক্সেস করা হয়েছে।
৪. নামস্পেসের মধ্যে ইন্টারফেস ব্যবহার করা
TypeScript এ নামস্পেসের মধ্যে ইন্টারফেসও রাখা যায়, যা কোডের টাইপ চেকিং উন্নত করতে সহায়তা করে। নিচে একটি উদাহরণ দেওয়া হলো:
namespace Geometry {
export interface Shape {
area(): number;
}
export class Circle implements Shape {
radius: number;
constructor(radius: number) {
this.radius = radius;
}
area() {
return Math.PI * this.radius * this.radius;
}
}
export class Rectangle implements Shape {
width: number;
height: number;
constructor(width: number, height: number) {
this.width = width;
this.height = height;
}
area() {
return this.width * this.height;
}
}
}
let circle = new Geometry.Circle(5);
console.log(circle.area()); // Output: 78.53981633974483
let rectangle = new Geometry.Rectangle(4, 6);
console.log(rectangle.area()); // Output: 24
এখানে:
Shapeইন্টারফেস একটি সাধারণareaমেথড ডিফাইন করেছে, যা বিভিন্ন জ্যামিতিক আকারে (যেমনCircleএবংRectangle) প্রয়োগ করা হয়েছে।CircleএবংRectangleক্লাসগুলোShapeইন্টারফেস ইমপ্লিমেন্ট করেছে।
৫. নামস্পেসের মধ্যে অন্তর্নিহিত নামস্থান ব্যবহার (Nested Namespaces)
TypeScript এ আপনি একাধিক নামস্পেসকে ভিতরে ভিতরে রাখতে পারেন, যা নামস্পেসকে আরও সংগঠিত এবং শ্রেণিবদ্ধ করতে সাহায্য করে।
namespace OuterNamespace {
export namespace InnerNamespace {
export function hello() {
console.log("Hello from InnerNamespace!");
}
}
}
OuterNamespace.InnerNamespace.hello(); // Output: Hello from InnerNamespace!
এখানে:
OuterNamespaceএকটি বাইরের নামস্পেস এবং তার মধ্যেInnerNamespaceনামে একটি অভ্যন্তরীণ নামস্পেস রয়েছে।InnerNamespaceএর ফাংশনhello()কল করা হয়েছে বাইরের নামস্পেসের মাধ্যমে।
৬. নামস্পেস এবং মডিউল (Modules) এর মধ্যে পার্থক্য
TypeScript এ নামস্পেস এবং মডিউল দুটি আলাদা ধারণা। নামস্পেস একসাথে কোড গ্রুপ করতে ব্যবহার করা হয়, যখন মডিউল কোডের আলাদা আলাদা ইউনিট তৈরির জন্য ব্যবহৃত হয়। মডিউলগুলি সাধারণত ফাইল ভিত্তিক হয় এবং এদের মধ্যে রপ্তানি (export) এবং আমদানি (import) করা হয়।
- নামস্পেস: একত্রিত করে কোড, সাধারণত একটি স্কোপের মধ্যে।
- মডিউল: আলাদা আলাদা ফাইল বা ইউনিটে কোড ভাগ করে।
নামস্পেস এবং মডিউল একসাথে ব্যবহার করা যায়, তবে বর্তমানে মডিউল ব্যবহারের পরামর্শ দেওয়া হয় কারণ এটি কোড ব্যবস্থাপনা এবং নির্ধারিত ইন্টারফেস সঠিকভাবে মেনে চলে।
সারাংশ
TypeScript এ নামস্পেস কোডকে আরও সংগঠিত এবং কনফ্লিক্ট-মুক্ত রাখতে সাহায্য করে। এটি বিভিন্ন ফাংশন, ক্লাস, কনস্ট্যান্ট এবং ভ্যারিয়েবলকে একটি নির্দিষ্ট নামের অধীনে গ্রুপ করতে ব্যবহৃত হয়। আপনি নামস্পেস ব্যবহার করে কোডের এক্সেসিবিলিটি নিয়ন্ত্রণ করতে পারেন এবং প্রোগ্রামের বিভিন্ন অংশের মধ্যে সংঘর্ষ এড়াতে পারেন।