Java Records হলো জাভার একটি নতুন ডেটা টাইপ (Java 14 থেকে প্রবর্তিত) যা Immutable এবং Type-Safe ডেটা সংরক্ষণ এবং মডেলিংয়ের জন্য ব্যবহার করা হয়। Tuple এর মতোই, এটি একাধিক ডেটা সংরক্ষণ করতে পারে। তবে Records আরও বেশি পাঠযোগ্য এবং বোঝার জন্য সহজ, কারণ এটি প্রতিটি ডেটার জন্য অর্থবহ নাম প্রদান করে।
Tuple এবং Record এর মধ্যে পার্থক্য
| বিষয় | Tuple | Java Records |
|---|---|---|
| Type Safety | Limited (নামবিহীন ফিল্ড: _1, _2) | Strong (অর্থবহ ফিল্ড নাম সহ) |
| Readability | কম (নামবিহীন ডেটা অ্যাক্সেস) | উচ্চ (অর্থবহ ফিল্ড নামের কারণে) |
| Immutability | Immutable হতে পারে (লাইব্রেরি ভিত্তিক) | Default Immutable |
| Boilerplate Code | লাইব্রেরি প্রয়োজন (Vavr/Apache Commons) | Standard Java Feature |
| Standard Support | জাভার নিজস্ব সাপোর্ট নেই | জাভা 14+ এ নেটিভ সাপোর্ট |
Java Records এর সুবিধা
- Readable Code: প্রতিটি ফিল্ড অর্থবহ নাম পায়, যা বোঝা সহজ।
- Immutable Structure: Records ডিফল্টভাবে Immutable হয়।
- Boilerplate Reduction: কম কোড লিখে Immutable Data Class তৈরি করা যায়।
- Built-in Features:
equals,hashCode, এবংtoStringস্বয়ংক্রিয়ভাবে তৈরি হয়।
Tuple এর পরিবর্তে Java Records ব্যবহারের উদাহরণ
১. সাধারণ উদাহরণ:
Tuple ব্যবহার করে:
import io.vavr.Tuple2;
public class TupleExample {
public static void main(String[] args) {
// Tuple2 তৈরি
Tuple2<String, Integer> employee = Tuple2.of("Alice", 30);
// ডেটা অ্যাক্সেস
System.out.println("Name: " + employee._1);
System.out.println("Age: " + employee._2);
}
}
Java Record ব্যবহার করে:
public record Employee(String name, int age) {}
public class RecordExample {
public static void main(String[] args) {
// Record তৈরি
Employee employee = new Employee("Alice", 30);
// ডেটা অ্যাক্সেস
System.out.println("Name: " + employee.name());
System.out.println("Age: " + employee.age());
}
}
আউটপুট:
Name: Alice
Age: 30
২. মাল্টিপল ফিল্ড:
Tuple ব্যবহার করে:
import io.vavr.Tuple3;
public class MultiFieldTupleExample {
public static void main(String[] args) {
// Tuple3 তৈরি
Tuple3<String, Double, Boolean> product = Tuple3.of("Laptop", 999.99, true);
// ডেটা অ্যাক্সেস
System.out.println("Name: " + product._1);
System.out.println("Price: $" + product._2);
System.out.println("Available: " + product._3);
}
}
Java Record ব্যবহার করে:
public record Product(String name, double price, boolean available) {}
public class MultiFieldRecordExample {
public static void main(String[] args) {
// Record তৈরি
Product product = new Product("Laptop", 999.99, true);
// ডেটা অ্যাক্সেস
System.out.println("Name: " + product.name());
System.out.println("Price: $" + product.price());
System.out.println("Available: " + product.available());
}
}
আউটপুট:
Name: Laptop
Price: $999.99
Available: true
৩. Nested Structure:
Tuple ব্যবহার করে:
import io.vavr.Tuple;
import io.vavr.Tuple2;
public class NestedTupleExample {
public static void main(String[] args) {
// Nested Tuple তৈরি
Tuple2<String, Tuple2<Integer, Boolean>> user = Tuple.of("Alice", Tuple.of(25, true));
// ডেটা অ্যাক্সেস
System.out.println("Name: " + user._1);
System.out.println("Age: " + user._2._1);
System.out.println("Active: " + user._2._2);
}
}
Java Record ব্যবহার করে:
public record User(String name, Details details) {}
public record Details(int age, boolean active) {}
public class NestedRecordExample {
public static void main(String[] args) {
// Nested Record তৈরি
Details details = new Details(25, true);
User user = new User("Alice", details);
// ডেটা অ্যাক্সেস
System.out.println("Name: " + user.name());
System.out.println("Age: " + user.details().age());
System.out.println("Active: " + user.details().active());
}
}
আউটপুট:
Name: Alice
Age: 25
Active: true
Java Records এর সুবিধা এবং Tuple এর সীমাবদ্ধতা
Java Records এর সুবিধা:
- Readable Code:
name(),age()এর মতো অর্থবহ মেথড থাকে।_1,_2এর মতো অস্পষ্ট নাম নেই।
- Standard Java Feature:
- Java 14+ এ Records একটি বিল্ট-ইন ফিচার।
- Immutability:
- ডিফল্ট Immutable হওয়ায় Thread-Safe।
Tuple এর সীমাবদ্ধতা:
- Low Readability:
_1,_2ব্যবহার করে ডেটা অ্যাক্সেস করায় কোড বোঝা কঠিন।
- Third-Party Dependency:
- Vavr বা Apache Commons Lang লাইব্রেরি প্রয়োজন।
- Complex Structures:
- Nested Tuples ব্যবহার করলে কোড জটিল এবং কম পাঠযোগ্য হয়ে যায়।
Tuple এর পরিবর্তে Java Records ব্যবহার করার কৌশল
- Readable Data Modeling:
- যেখানে অর্থবহ ডেটা মডেল প্রয়োজন, সেখানে Tuple-এর পরিবর্তে Record ব্যবহার করুন।
- Nested Data:
- জটিল ডেটা স্ট্রাকচারের জন্য Nested Records তৈরি করুন।
- Thread-Safe Structures:
- Immutable হওয়ার কারণে Records নিরাপদ এবং Thread-Safe।
- Tuple: দ্রুত এবং অস্থায়ী ডেটা স্টোরেজের জন্য কার্যকর।
- Java Records: স্থায়ী এবং অর্থবহ ডেটা মডেল তৈরি করার জন্য আদর্শ।
Java Records একটি স্ট্যান্ডার্ড জাভা ফিচার হওয়ায় এটি ব্যবহার করা নিরাপদ, দ্রুত, এবং সহজ। যখনই কোডের পাঠযোগ্যতা এবং টাইপ সুরক্ষা গুরুত্বপূর্ণ, তখন Tuple-এর পরিবর্তে Record ব্যবহার করার পরামর্শ দেওয়া হয়।
Read more