ডার্টে টাইপ সিস্টেম
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