ডার্টে টাইপ সিস্টেম
Dart এমন একটি Programming Language যেখানে প্রতিটি ভ্যালুর টাইপ থাকে, even যখন আপনি টাইপটা স্পষ্ট করে বলছেন না তখনও। একজন Intermediate পর্যায়ের ডেভেলপার হিসেবে, Dart এর টাইপ সিস্টেম বুঝতে পারা অত্যন্ত গুরুত্বপূর্ণ—বিশেষ করে dynamic
এবং Object
নিয়ে কাজ করার সময়।
টাইপ সিস্টেম কী?
টাইপ সিস্টেম হলো একটি নিয়ম যা বলে কোন ভ্যালু কেমন টাইপের, এবং সেই টাইপে কোন কোন অপারেশন করা যাবে। Dart এ টাইপ চেকিং হয় দুইভাবে:
Compile-time এ (স্ট্যাটিক টাইপিং)
Run-time এ (ডাইনামিক টাইপিং)
Dart মূলত একটি স্ট্যাটিকলি টাইপড ভাষা হলেও dynamic
ব্যবহার করে আপনি টাইপ সিস্টেমকে বাইপাস করতে পারেন।
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
: সবচেয়ে উপরের ক্লাস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
, 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