ডার্টে টাইপ সিস্টেম

Dart এমন একটি Programming Language যেখানে প্রতিটি ভ্যালুর টাইপ থাকে, even যখন আপনি টাইপটা স্পষ্ট করে বলছেন না তখনও। একজন Intermediate পর্যায়ের ডেভেলপার হিসেবে, Dart এর টাইপ সিস্টেম বুঝতে পারা অত্যন্ত গুরুত্বপূর্ণ—বিশেষ করে dynamic এবং Object নিয়ে কাজ করার সময়।


টাইপ সিস্টেম কী?

টাইপ সিস্টেম হলো একটি নিয়ম যা বলে কোন ভ্যালু কেমন টাইপের, এবং সেই টাইপে কোন কোন অপারেশন করা যাবে। Dart এ টাইপ চেকিং হয় দুইভাবে:

  • Compile-time এ (স্ট্যাটিক টাইপিং)

  • Run-time এ (ডাইনামিক টাইপিং)

Dart মূলত একটি স্ট্যাটিকলি টাইপড ভাষা হলেও dynamic ব্যবহার করে আপনি টাইপ সিস্টেমকে বাইপাস করতে পারেন।


dynamic: যখন টাইপ জানা থাকে না

dynamic টাইপ ব্যবহার করলে Dart কম্পাইলার আপনাকে কিছু বলবে না, আপনি যে টাইপের ভ্যালু চান সেটি বসাতে পারবেন। তবে সমস্যা হলো, ভুল টাইপ ব্যবহারের কারণে runtime-এ অ্যাপ ক্র্যাশ করতে পারে।

কখন ব্যবহার করবেন:

  • যখন আপনি API বা JSON থেকে টাইপ না জানা ডেটা পাচ্ছেন

  • জেনারিক ফাংশন বা হেল্পার লিখছেন

  • দ্রুত প্রোটোটাইপ তৈরি করতে চান

কখন এড়িয়ে যাবেন:

  • যখন টাইপ জানা থাকে

  • পারফরম্যান্স গুরুত্বপূর্ণ হলে

  • পাবলিক API লেখার সময়—কারণ ব্যবহারকারী টাইপ সেফটি হারিয়ে ফেলবে

উদাহরণ:

void processResponse(dynamic data) {
  if (data is Map<String, dynamic>) {
    print('Keys: ${data.keys}');
  } else {
    print('অজানা টাইপ');
  }
}

void main() {
  dynamic response = {'name': 'Dart', 'version': 3};
  processResponse(response);
}

Object: সবচেয়ে উপরের ক্লাস

Object হলো Dart-এর সব non-null টাইপের মূল ক্লাস। আপনি চাইলে যেকোনো টাইপের ভ্যালু Object টাইপে রাখতে পারেন, তবে সেই টাইপের ফিচার সরাসরি ব্যবহার করতে পারবেন না।

কখন ব্যবহার করবেন:

  • যখন ভ্যালুর টাইপ আগে থেকে জানা নেই, কিন্তু পুরোপুরি "dynamic" হওয়া লাগবে না

  • ডেটা কালেকশন বা ফাংশনে যেকোনো ইনপুট নেওয়ার দরকার পড়ে

কখন এড়িয়ে যাবেন:

  • যদি টাইপ-ভিত্তিক মেথড ব্যবহার করতে চান

  • যখন সম্পূর্ণ ফ্লেক্সিবিলিটি দরকার (তখন dynamic বেটার)

উদাহরণ:

void logData(List<Object> data) {
  for (var item in data) {
    print('টাইপ: ${item.runtimeType}, মান: $item');
  }
}

void main() {
  logData(['hello', 42, true]);
}

var, Object, আর dynamic তুলনা

ডিক্লারেশন
টাইপ চেকিং
টাইপ ইনফারেন্স
ব্যবহার

var

compile-time

হ্যাঁ

যখন টাইপ জানা বা অনুমেয়

Object

compile-time

না

সেফলি যেকোনো ভ্যালু রাখার জন্য

dynamic

runtime

না

সম্পূর্ণ ফ্লেক্সিবিলিটির জন্য

var a = 'Dart';    // টাইপ: String
Object b = 'Lang'; // টাইপ চেক থাকবে
dynamic c = 42;    // যেকোনো টাইপ চলে

বাস্তব কেস: JSON রেসপন্স হ্যান্ডলিং

এপিআই থেকে যখন টাইপ-অনির্ধারিত JSON আসে, তখন অনেকেই dynamic ব্যবহার করেন।

খারাপ উদাহরণ:

dynamic data = jsonDecode(jsonString);
print(data['name']); // runtime error হতে পারে

ভালো উদাহরণ:

Object data = jsonDecode(jsonString);
if (data is Map<String, dynamic>) {
  print('Name: ${data['name']}');
}

টিপস

করণীয়
পরামর্শ

dynamic সচেতনভাবে ব্যবহার করুন

শুধুমাত্র যখন দরকার

Object দিয়ে সেফলি টাইপহীন ভ্যালু নিন

ডেটা কালেকশনের জন্য ভালো

runtime টাইপ চেক করুন

ভুল টাইপে runtime error আটকাতে

API তে dynamic এড়িয়ে চলুন

ব্যবহারকারীর জন্য টাইপ নিশ্চিত করুন

var ইনফারেন্স ব্যবহার করুন

কোড পরিষ্কার ও কম ভুলের সম্ভাবনা


উপসংহার

Dart আপনাকে dynamic এবং Object এর মাধ্যমে শক্তিশালী ফ্লেক্সিবিলিটি দেয়। তবে এই ফ্লেক্সিবিলিটি যদি ভুলভাবে ব্যবহার করেন, তাহলে কোড হতে পারে ঝুঁকিপূর্ণ ও ধীরগতির।

  • যখন টাইপ জানা থাকে, var বা সুনির্দিষ্ট টাইপ ব্যবহার করুন

  • টাইপ আননিশ্চিত হলে, Object দিয়ে শুরু করুন

  • শুধুমাত্র প্রয়োজনে dynamic ব্যবহার করুন

Last updated