Generic Type Parameter - T আসলে কী?

Rifat HossainRifat Hossain
2 min read

T এখানে একটা Generic Type Parameter
মানে, এটা একটা প্লেসহোল্ডার যেটা তুমি যখন মেথড কল করবে তখন সেটার জায়গায় যে টাইপ দিবে, সেটা দিয়ে মেথডটা কাজ করবে।

উদাহরণ:

static Future<T> runAsyncTask<T>(
  BuildContext context,
  Future<T> Function() task,
) async {
  try {
    show(context);
    return await task();
  } finally {
    hide(context);
  }
}

এখানে T যেকোনো টাইপ হতে পারে:

  • যদি task() bool রিটার্ন করে, তাহলে T হবে bool

  • যদি task() String রিটার্ন করে, তাহলে T হবে String

  • যদি task() void রিটার্ন করে, তাহলে T হবে void


কেন ব্যবহার করবো?

Generic ব্যবহার করলে তোমার মেথড flexible হয়ে যায়।
আগে তুমি লিখেছিলে:

static Future<void> runAsyncTask(...)

এতে শুধু Future<void> রিটার্ন করা যাবে — মানে কোনো ভ্যালু ফেরত পাঠানো যাবে না।

কিন্তু Generic দিয়ে লিখলে:

static Future<T> runAsyncTask<T>(...)

তুমি চাইলে রিটার্ন করতে পারবে:

  • Future<bool> (যেমন OTP সফল হল কি না)

  • Future<int> (যেমন ডাউনলোড হওয়া ফাইলের সাইজ)

  • Future<MyModel> (যেমন সার্ভার থেকে পাওয়া ডাটা)

এতে কোড অনেক reusable হয়।


রান টাইমে কী হয়?

ডার্টে Generic হচ্ছে compile-time type safety এর জন্য।
যখন তুমি কল করো:

runAsyncTask<bool>(context, () async {
  return true;
});

তখন ডার্ট কম্পাইলার জানে যে T এখানে bool হবে,
এবং task() অবশ্যই bool রিটার্ন করতে হবে, নইলে কম্পাইল টাইমেই এরর দিবে।


তুমি কেন এটা ব্যবহার করবে এখানে

তুমি sendOTP() থেকে এখন bool রিটার্ন করতে চাও (OTP গেছে কি না চেক করার জন্য),
তাহলে runAsyncTask যদি Generic হয়, এটা bool সেইফলি রিটার্ন করতে পারবে এবং তোমার .then((isSent) { ... }) এর মধ্যে সরাসরি সেই ভ্যালু পাবে।


সংক্ষেপে,
T মানে একটা placeholder টাইপ, যেটা তুমি মেথড কল করার সময় ঠিক করে দিবে, আর মেথড সেটা ব্যবহার করে সেই টাইপে রেজাল্ট রিটার্ন করবে।
এতে তোমার মেথড অনেক বেশি flexible ও reusable হয়।


আমি চাইলে তোমাকে একদম রিয়েল কোড ফ্লো দিয়ে দেখাতে পারি কিভাবে sendOTP + runAsyncTask<T> একসাথে কাজ করবে OTP নেভিগেশনের সাথে।
তুমি কি চাইছো আমি সেটা বানিয়ে দিই?

0
Subscribe to my newsletter

Read articles from Rifat Hossain directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Rifat Hossain
Rifat Hossain