- 1 ১. ভূমিকা
- 2 ৩. this‑এর প্রধান ব্যবহার ক্ষেত্রগুলো
- 3 4. this ব্যবহার করার সময় গুরুত্বপূর্ণ নোট
- 4 5. ব্যবহারিক কোড উদাহরণ
- 4.1 5.1 মেম্বার এবং লোকাল ভেরিয়েবলগুলি আলাদা করা
- 4.2 5.2 কনস্ট্রাক্টর চেইনিং
- 4.3 5.3 মেথড চেইনিং
- 4.4 5.4 বর্তমান ইনস্ট্যান্স পাস করা
- 4.5 6. প্রায়শই জিজ্ঞাসিত প্রশ্ন (FAQ)
- 4.6 Q1. আমাকে কি সবসময় “this” লিখতে হবে?
- 4.7 Q2. স্ট্যাটিক মেথডের ভিতরে this ব্যবহার করলে কী হয়?
- 4.8 Q3. this এবং super এর মধ্যে পার্থক্য কী?
- 4.9 Q4. মেথড চেইনিং-এ this রিটার্ন করার সুবিধা কী?
- 4.10 Q5. প্রয়োজনের সময় this ব্যবহার করতে ভুলে গেলে কী হয়?
- 4.11 7. উপসংহার
১. ভূমিকা
যখন আপনি জাভা প্রোগ্রামিং শিখতে শুরু করবেন, তখন বিভিন্ন কীওয়ার্ডের মুখোমুখি হবেন। এর মধ্যে, “this” ক্লাস এবং অবজেক্ট‑ওরিয়েন্টেড ধারণা বোঝার জন্য খুবই গুরুত্বপূর্ণ ভূমিকা পালন করে। তবে, ইংরেজিতে “this” শব্দের অর্থ “এই/এইটি” হওয়ায়, অনেক নবীন প্রারম্ভিকভাবে বুঝতে পারেন না কেন প্রোগ্রামিংয়ে এটি ব্যবহার করা হয়।
এই প্রবন্ধটি জাভায় “this” কীওয়ার্ডের ভূমিকা ও ব্যবহার স্পষ্ট ও নবীন‑বন্ধুস্বভাবেরভাবে ব্যাখ্যা করে। আপনি সদস্য ভেরিয়েবল ও লোকাল ভেরিয়েবল পার্থক্য করা এবং কনস্ট্রাক্টরের ভিতরে “this” ব্যবহার করা ইত্যাদি মূল বিষয়গুলো শিখবেন, পাশাপাশি ব্যবহারিক কোড উদাহরণও পাবেন।
আমরা সাধারণ প্রশ্ন, ভুল এবং গুরুত্বপূর্ণ নোটও আলোচনা করব। এই গাইডের শেষে, আপনি this কীওয়ার্ড কীভাবে কাজ করে এবং মৌলিক থেকে উন্নত পরিস্থিতি পর্যন্ত আত্মবিশ্বাসের সঙ্গে কীভাবে ব্যবহার করবেন তা বুঝতে পারবেন।
২. “this” কীওয়ার্ড কী?
জাভায়, “this” বর্তমান অবজেক্টকে নির্দেশ করে। যখন একটি ক্লাস থেকে একটি ইনস্ট্যান্স (অবজেক্ট) তৈরি হয়, তখন সেই নির্দিষ্ট অবজেক্টকে উল্লেখ করতে “this” কীওয়ার্ড ব্যবহার করা হয়।
একই ক্লাস থেকে একাধিক অবজেক্ট তৈরি হলেও, প্রতিটি অবজেক্টের this ভিন্ন ইনস্ট্যান্সকে নির্দেশ করে। এটি আপনার কোডের মধ্যে “কোন অবজেক্ট বর্তমানে কাজ করছে” তা স্পষ্ট করতে সাহায্য করে।
this‑এর মৌলিক ভূমিকা
- ইনস্ট্যান্স ভেরিয়েবল ও মেথডে প্রবেশ
this.variableNameঅথবাthis.methodName()ব্যবহার করে নির্দিষ্ট অবজেক্টের ভেরিয়েবল ও মেথডে প্রবেশ করা যায়। - লোকাল ভেরিয়েবল ও ইনস্ট্যান্স ভেরিয়েবল পার্থক্য করা যখন কনস্ট্রাক্টর প্যারামিটার বা মেথড প্যারামিটার সদস্য ভেরিয়েবলের নামের সঙ্গে একই হয়, তখন “this” ব্যবহার করে তাদের পার্থক্য করা হয়।
কেন “this” দরকার?
জাভায়, আপনি একটি ক্লাস থেকে একাধিক অবজেক্ট তৈরি করতে পারেন, প্রতিটি স্বতন্ত্র অবস্থা ও আচরণ নিয়ে। এই অবজেক্টগুলোর ভিতরে “এই অবজেক্ট নিজেই”কে উল্লেখ করার একটি উপায় প্রয়োজন।
এটাই “this” কীওয়ার্ডের কাজ।
উদাহরণস্বরূপ, Person ক্লাসের ভিতরে “this” ব্যবহার করলে আপনি “এই নির্দিষ্ট Person অবজেক্ট” প্রকাশ করতে পারেন।
সংক্ষিপ্তসার
“this” অবজেক্ট‑ওরিয়েন্টেড প্রোগ্রামিংয়ে একটি অত্যন্ত গুরুত্বপূর্ণ ধারণা। এটি একটি সেতু হিসেবে কাজ করে, যা অবজেক্টকে তার নিজস্ব ডেটা ও আচরণে প্রবেশের সুযোগ দেয়।
৩. this‑এর প্রধান ব্যবহার ক্ষেত্রগুলো
“this” কীওয়ার্ড জাভার বিভিন্ন স্থানে দেখা যায়। নিচে কোড উদাহরণসহ প্রতিনিধিত্বমূলক উদাহরণগুলো দেওয়া হল।
৩.১ সদস্য ভেরিয়েবল ও লোকাল ভেরিয়েবল পার্থক্য করা
কনস্ট্রাক্টর প্যারামিটার ও সদস্য ভেরিয়েবলের নাম প্রায়শই একই হয়। এ ধরনের ক্ষেত্রে “this” ব্যবহার করে তাদের পার্থক্য করা হয়।
উদাহরণ: সদস্য ভেরিয়েবল ও লোকাল ভেরিয়েবল পার্থক্য করা
public class Student {
private String name;
public Student(String name) {
this.name = name; // Left: member variable, Right: constructor parameter
}
}
যদি this বাদ দেন, তবে লোকাল ভেরিয়েবলকে অগ্রাধিকার দেওয়া হবে, এবং সদস্য ভেরিয়েবল সঠিকভাবে অ্যাসাইন হবে না।
৩.২ কনস্ট্রাক্টরে this ব্যবহার করা
কনস্ট্রাক্টর ওভারলোডিংয়ের মাধ্যমে জাভা একাধিক কনস্ট্রাক্টর অনুমোদন করে। আপনি this() ব্যবহার করে অন্য একটি কনস্ট্রাক্টরকে কল করতে পারেন, যা পুনরাবৃত্তি কমায়।
উদাহরণ: this() দিয়ে অন্য কনস্ট্রাক্টর কল করা
public class Book {
private String title;
private int price;
public Book(String title) {
this(title, 0); // calls another constructor
}
public Book(String title, int price) {
this.title = title;
this.price = price;
}
}
এটি ইনিশিয়ালাইজেশন লজিককে কেন্দ্রীভূত করতে এবং ডুপ্লিকেট কোড এড়াতে সাহায্য করে।
৩.৩ মেথড চেইনিং
this রিটার্ন করলে একই ইনস্ট্যান্সে ধারাবাহিকভাবে মেথড কল করা সম্ভব হয়।
উদাহরণ: মেথড চেইনিং
public class Person {
private String name;
private int age;
public Person setName(String name) {
this.name = name;
return this;
}
public Person setAge(int age) {
this.age = age;
return this;
}
}
// Method chaining
Person p = new Person().setName("佐藤").setAge(25);
এটি বিল্ডার প্যাটার্ন এবং কনফিগারেশন ক্লাসগুলিতে ব্যাপকভাবে ব্যবহৃত হয়।
3.4 বর্তমান ইনস্ট্যান্স পাস করা
আপনি “this” ব্যবহার করতে পারেন যখন আপনার বর্তমান ইনস্ট্যান্সটি অন্য মেথড বা ক্লাসে পাস করতে হয়।
উদাহরণ: বর্তমান অবজেক্ট পাস করা
public class Printer {
public void print(Person person) {
System.out.println(person);
}
}
public class Person {
public void show(Printer printer) {
printer.print(this); // passes this instance
}
}
4. this ব্যবহার করার সময় গুরুত্বপূর্ণ নোট
যদিও খুবই উপকারী, “this” সতর্কতার সাথে ব্যবহার করতে হবে যাতে ত্রুটি এড়ানো যায়।
4.1 স্ট্যাটিক কনটেক্সটে this ব্যবহার করা যায় না
একটি static মেথড বা ভেরিয়েবল ক্লাসের নিজস্ব—ইনস্ট্যান্সের নয়—তাই “this” ব্যবহার করা যায় না।
অবৈধ উদাহরণ
public class Example {
private int value;
public static void printValue() {
// System.out.println(this.value); // Compile error
}
}
4.2 অতিরিক্ত this ব্যবহার কোডের পাঠযোগ্যতা কমাতে পারে
অপ্রয়োজনীয়ভাবে “this” ব্যবহার করলে কোড পড়া কঠিন হয়ে যেতে পারে। শুধুমাত্র প্রয়োজন হলে ব্যবহার করুন।
অপ্রয়োজনীয় ব্যবহারের উদাহরণ
public class Test {
private int x;
public void setX(int x) {
this.x = x; // needed
// this.x = this.x + 1; // excessive use
}
}
4.3 this কে super এর সাথে বিভ্রান্ত করবেন না
- this → বর্তমান ইনস্ট্যান্স
- super → প্যারেন্ট (সুপারক্লাস)
উদাহরণ: this বনাম super ব্যবহার
public class Parent {
public void greet() {
System.out.println("Parent method");
}
}
public class Child extends Parent {
public void greet() {
System.out.println("Child method");
super.greet();
}
}
5. ব্যবহারিক কোড উদাহরণ
5.1 মেম্বার এবং লোকাল ভেরিয়েবলগুলি আলাদা করা
public class Account {
private String owner;
public Account(String owner) {
this.owner = owner;
}
public void printOwner() {
System.out.println("Account Owner: " + this.owner);
}
}

5.2 কনস্ট্রাক্টর চেইনিং
public class Rectangle {
private int width;
private int height;
public Rectangle(int width) {
this(width, 1);
}
public Rectangle(int width, int height) {
this.width = width;
this.height = height;
}
public void printSize() {
System.out.println("Size: " + width + " x " + height);
}
}
5.3 মেথড চেইনিং
public class BuilderExample {
private String name;
private int age;
public BuilderExample setName(String name) {
this.name = name;
return this;
}
public BuilderExample setAge(int age) {
this.age = age;
return this;
}
public void printInfo() {
System.out.println("Name: " + name + ", Age: " + age);
}
}
BuilderExample person = new BuilderExample().setName("山田").setAge(30);
person.printInfo();
5.4 বর্তমান ইনস্ট্যান্স পাস করা
public class Notifier {
public void notifyUser(User user) {
System.out.println(user.getName() + " has been notified.");
}
}
public class User {
private String name;
public User(String name) { this.name = name; }
public String getName() { return this.name; }
public void sendNotification(Notifier notifier) {
notifier.notifyUser(this);
}
}
Notifier notifier = new Notifier();
User user = new User("佐藤");
user.sendNotification(notifier);
6. প্রায়শই জিজ্ঞাসিত প্রশ্ন (FAQ)
Q1. আমাকে কি সবসময় “this” লিখতে হবে?
A.
সবসময় নয়। এটি ব্যবহার করুন যখন:
- লোকাল এবং মেম্বার ভেরিয়েবলের নামগুলি ওভারল্যাপ করে
- আপনি স্পষ্টভাবে বর্তমান ইনস্ট্যান্স উল্লেখ করতে চান
Q2. স্ট্যাটিক মেথডের ভিতরে this ব্যবহার করলে কী হয়?
A.
আপনি কম্পাইল ত্রুটি পাবেন। স্ট্যাটিক মেথডগুলি ক্লাসের, ইনস্ট্যান্সের নয়।
Q3. this এবং super এর মধ্যে পার্থক্য কী?
- this : বর্তমান ইনস্ট্যান্স
- super : প্যারেন্ট ক্লাস
Q4. মেথড চেইনিং-এ this রিটার্ন করার সুবিধা কী?
এটি একই ইনস্ট্যান্সে ধারাবাহিক কল করার অনুমতি দেয়, যা পাঠযোগ্যতা বাড়ায়।
Q5. প্রয়োজনের সময় this ব্যবহার করতে ভুলে গেলে কী হয়?
লোকাল ভেরিয়েবলগুলো মেম্বার ভেরিয়েবলকে ওভাররাইড করতে পারে, যার ফলে ভুল অ্যাসাইনমেন্ট এবং বাগ সৃষ্টি হয়।
7. উপসংহার
এই প্রবন্ধে মৌলিক থেকে ব্যবহারিক প্রয়োগ পর্যন্ত Java “this” কীওয়ার্ড ব্যাখ্যা করা হয়েছে। আপনি শিখেছেন:
- মেম্বার ভেরিয়েবল এবং লোকাল ভেরিয়েবল কীভাবে পার্থক্য করা যায়
- কনস্ট্রাক্টর লজিক কীভাবে কেন্দ্রীভূত করা যায়
- মেথড চেইন কীভাবে তৈরি করা যায়
- বর্তমান ইনস্ট্যান্সকে অন্যান্য মেথডে কীভাবে পাস করা যায়
আমরা এছাড়াও নিম্নলিখিত গুরুত্বপূর্ণ নোটগুলো কভার করেছি:
- “this” স্ট্যাটিক কনটেক্সটে ব্যবহার করা যায় না
- “this” অতিরিক্ত ব্যবহার করবেন না
- “super” এর সাথে সঠিকভাবে ব্যবহার করুন
কীভাবে “this” কাজ করে তা বোঝা আপনার Java ক্লাস ডিজাইনকে স্পষ্ট করবে এবং বাগ কমাবে। Java মৌলিক বিষয়গুলো অন্বেষণ চালিয়ে যান এবং বাস্তব কোডে এই ধারণাগুলো প্রয়োগ করুন।
