Java Tuples হলো এমন একটি ডেটা স্ট্রাকচার যা বিভিন্ন ডেটা টাইপের একাধিক মান একত্রে সংরক্ষণ করতে পারে। তবে, Java-তে Tuples এর জন্য কোনো Built-in Support নেই। এই সীমাবদ্ধতাকে কাটিয়ে উঠতে ডেভেলপাররা তৃতীয় পক্ষের লাইব্রেরি বা কাস্টম সমাধান ব্যবহার করে।
Java তে Tuples কেন Built-in নেই?
- অবজেক্ট-ওরিয়েন্টেড ডিজাইন: Java-তে Tuples এর পরিবর্তে
POJO(Plain Old Java Object) বাRecordব্যবহার উৎসাহিত করা হয়। - নামহীন ডেটা: Tuples-এর মানগুলি সাধারণত নামবিহীন থাকে (
_1,_2ইত্যাদি), যা কোডের রিডেবিলিটি কমায়। - ডেটা টাইপের ক্লারিটি:
POJOবাRecordব্যবহার করলে ডেটার টাইপ এবং উদ্দেশ্য স্পষ্ট হয়।
Tuples ব্যবহারের জন্য সমাধান
১. Custom POJO ব্যবহার করা
Tuples-এর পরিবর্তে একটি কাস্টম ক্লাস তৈরি করে স্পষ্ট এবং রিডেবল সমাধান তৈরি করা যায়।
Example:
class Person {
private final String name;
private final int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class PojoExample {
public static void main(String[] args) {
Person person = new Person("Alice", 30);
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
}
}
২. Record ব্যবহার করা (Java 14+)
Java 14 থেকে Record ব্যবহার করা যায়, যা Tuples-এর জন্য কার্যকর সমাধান।
Example:
public record Person(String name, int age) {}
public class RecordExample {
public static void main(String[] args) {
Person person = new Person("Alice", 30);
System.out.println("Name: " + person.name());
System.out.println("Age: " + person.age());
}
}
৩. Third-Party Libraries ব্যবহার করা
তৃতীয় পক্ষের লাইব্রেরি (যেমন Vavr, Apache Commons Lang, Javatuples) ব্যবহার করে Tuples তৈরি করা যায়।
a. Apache Commons Lang
Dependency:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
Example:
import org.apache.commons.lang3.tuple.Pair;
public class ApacheCommonsExample {
public static void main(String[] args) {
Pair<String, Integer> pair = Pair.of("Alice", 30);
System.out.println("Name: " + pair.getLeft());
System.out.println("Age: " + pair.getRight());
}
}
b. Vavr Library
Dependency:
<dependency>
<groupId>io.vavr</groupId>
<artifactId>vavr</artifactId>
<version>0.10.4</version>
</dependency>
Example:
import io.vavr.Tuple;
import io.vavr.Tuple2;
public class VavrExample {
public static void main(String[] args) {
Tuple2<String, Integer> tuple = Tuple.of("Alice", 30);
System.out.println("Name: " + tuple._1);
System.out.println("Age: " + tuple._2);
}
}
c. Javatuples Library
Dependency:
<dependency>
<groupId>org.javatuples</groupId>
<artifactId>javatuples</artifactId>
<version>1.2</version>
</dependency>
Example:
import org.javatuples.Pair;
public class JavatuplesExample {
public static void main(String[] args) {
Pair<String, Integer> pair = Pair.with("Alice", 30);
System.out.println("Name: " + pair.getValue0());
System.out.println("Age: " + pair.getValue1());
}
}
Tuples vs POJO/Record
| বৈশিষ্ট্য | Tuples | POJO/Record |
|---|---|---|
| রিডেবিলিটি | _1, _2 ইত্যাদি নামবিহীন ফিল্ড। | ফিল্ড নামের কারণে বেশি রিডেবল। |
| কোডের সরলতা | কম কোডে ব্যবহার করা যায়। | কিছুটা বেশি কোড প্রয়োজন। |
| টাইপ সেফটি | সাধারণত ভালো টাইপ সেফটি। | পুরোপুরি টাইপ সেফ। |
| ইন্টেনশন স্পষ্টতা | উদ্দেশ্য অস্পষ্ট হতে পারে। | উদ্দেশ্য স্পষ্ট। |
| মডেলিং | ছোট কাজের জন্য উপযুক্ত। | বড় এবং জটিল ডেটা মডেলিংয়ে কার্যকর। |
Tuples এর ব্যবহার ক্ষেত্র
- মাল্টিপল রিটার্ন ভ্যালু: একটি মেথড থেকে একাধিক মান ফিরিয়ে দিতে।
- অস্থায়ী ডেটা গ্রুপিং: একাধিক ডেটা টাইপ সাময়িকভাবে সংরক্ষণ করতে।
- ক্লায়েন্ট-সার্ভার কমিউনিকেশন: বিভিন্ন ডেটা টাইপ একত্রে পাঠাতে।
যদিও Java-তে Tuples-এর জন্য Built-in Support নেই, তবুও বিভিন্ন তৃতীয় পক্ষের লাইব্রেরি বা কাস্টম সমাধান ব্যবহার করে Tuples ব্যবহার করা যায়।
- ছোট কাজের জন্য: Vavr, Apache Commons, বা Javatuples ব্যবহার করুন।
- বড় এবং জটিল কাজের জন্য:
POJOবাRecordব্যবহার করা ভালো।
আপনার প্রয়োজন অনুযায়ী টুল বা কৌশল নির্বাচন করুন।
Read more