Dart প্রোগ্রামিং ভাষায় ভেরিয়েবল এবং ডেটা টাইপস ডেটা সংরক্ষণ এবং পরিচালনার জন্য অত্যন্ত গুরুত্বপূর্ণ। এখানে Dart এ ভেরিয়েবল এবং ডেটা টাইপস সম্পর্কে বিস্তারিত আলোচনা করা হলো।
1. ভেরিয়েবল (Variables)
ভেরিয়েবল হলো ডেটা সংরক্ষণের জন্য একটি নামকৃত স্থান। Dart-এ ভেরিয়েবল ডিফাইন করতে বিভিন্ন কিওয়ার্ড ব্যবহার করা হয়:
- var: Dart কে টাইপ স্বয়ংক্রিয়ভাবে নির্ধারণ করতে দেয়।
- int, double, String, bool: নির্দিষ্ট টাইপের জন্য ডাটা টাইপের ঘোষণা।
ভেরিয়েবল ডিফাইন করার উদাহরণ:
void main() {
// var ব্যবহার করে ভেরিয়েবল
var name = "Alice"; // Dart স্বয়ংক্রিয়ভাবে টাইপ নির্ধারণ করবে
var age = 30; // একটি পূর্ণ সংখ্যা
var height = 5.6; // একটি দশমিক সংখ্যা
// নির্দিষ্ট টাইপ দিয়ে ভেরিয়েবল
int score = 100; // পূর্ণ সংখ্যা
double temperature = 36.6; // দশমিক সংখ্যা
String greeting = "Hello, Dart!"; // স্ট্রিং
bool isActive = true; // বুলিয়ান
print("Name: $name, Age: $age, Height: $height");
}
2. ডেটা টাইপস (Data Types)
Dart বিভিন্ন ধরনের ডেটা টাইপ সমর্থন করে, যা বিভিন্ন ধরনের মান সংরক্ষণ করার জন্য ব্যবহৃত হয়। নিচে Dart-এ সাধারণ ডেটা টাইপস নিয়ে আলোচনা করা হলো:
int: পূর্ণ সংখ্যা।
int age = 25;double: দশমিক সংখ্যা।
double price = 99.99;String: টেক্সট বা স্ট্রিং মান।
String name = "John Doe";bool: সত্য বা মিথ্যা (true/false)।
bool isStudent = false;List: একাধিক মান ধারণ করতে পারে, যার সূচক থাকে।
List<String> fruits = ["Apple", "Banana", "Cherry"];Map: কীগুলোর সাথে মান সংরক্ষণ করে, যেখানে প্রতিটি কীর একটি মানকে নির্দেশ করে।
Map<String, int> scores = {"Alice": 90, "Bob": 85};Set: একটি ইউনিক মানের集合।
Set<int> numbers = {1, 2, 3, 4, 5};3. টাইপ ডিফিনিশন
Dart-এ আপনি ভেরিয়েবলগুলোর টাইপ স্পষ্টভাবে ঘোষণা করতে পারেন, যা কোডের পাঠযোগ্যতা এবং ত্রুটি শনাক্তকরণের জন্য সহায়ক।
টাইপ ডিফাইন করার উদাহরণ:
void main() {
String city = "Dhaka"; // স্ট্রিং টাইপ
int population = 20000000; // পূর্ণ সংখ্যা
double area = 306; // দশমিক সংখ্যা
print("City: $city, Population: $population, Area: $area sq km");
}
Dart প্রোগ্রামিং ভাষায় ভেরিয়েবল ডিক্লারেশন এবং ইনিশিয়ালাইজেশন ডেটা সংরক্ষণের জন্য গুরুত্বপূর্ণ ধাপ। এই প্রক্রিয়ায় ভেরিয়েবল তৈরি করা হয় এবং তাদের প্রাথমিক মান নির্ধারণ করা হয়।
1. ভেরিয়েবল ডিক্লারেশন (Variable Declaration)
ভেরিয়েবল ডিক্লারেশন হল ভেরিয়েবল তৈরি করার প্রক্রিয়া, যেখানে ভেরিয়েবলের নাম এবং তার ডেটা টাইপ উল্লেখ করা হয়। Dart-এ ভেরিয়েবল ডিক্লারেশন করার জন্য বিভিন্ন কিওয়ার্ড ব্যবহার করা হয়:
- var: Dart কে স্বয়ংক্রিয়ভাবে টাইপ নির্ধারণ করতে দেয়।
- final: এটি একটি পরিবর্তনশীল যা একবার সেট করা হলে পরিবর্তন করা যায় না।
- const: এটি একটি কম্পাইল টাইম কনস্ট্যান্ট।
ভেরিয়েবল ডিক্লারেশনের উদাহরণ:
void main() {
// var ব্যবহার করে ভেরিয়েবল ডিক্লারেশন
var name; // টাইপ স্বয়ংক্রিয়ভাবে নির্ধারণ হবে
var age = 25; // age ভেরিয়েবলের টাইপ int
// নির্দিষ্ট টাইপ দিয়ে ভেরিয়েবল ডিক্লারেশন
String city; // স্ট্রিং টাইপের ভেরিয়েবল
int score; // পূর্ণ সংখ্যা টাইপের ভেরিয়েবল
print("Name: $name, Age: $age");
}
2. Initialization (ইনিশিয়ালাইজেশন)
ইনিশিয়ালাইজেশন হল ভেরিয়েবলের প্রাথমিক মান নির্ধারণ করার প্রক্রিয়া। Dart-এ ভেরিয়েবল তৈরি করার সময় তাদের ইনিশিয়ালাইজ করা হয়। যদি ভেরিয়েবল ডিক্লারেশনের পর ইনিশিয়ালাইজ না করা হয়, তাহলে সেটি null হিসাবে ডিফল্ট মান পায় (যদি এটি একটি nullable টাইপ হয়)।
ইনিশিয়ালাইজেশনের উদাহরণ:
void main() {
// ভেরিয়েবল ডিক্লারেশন এবং ইনিশিয়ালাইজেশন
String name = "Alice"; // একসাথে ডিক্লারেশন এবং ইনিশিয়ালাইজেশন
int age = 30;
// var ব্যবহার করে
var height = 5.5; // Dart স্বয়ংক্রিয়ভাবে টাইপ নির্ধারণ করবে
// final এবং const ব্যবহার করে
final String country = "Bangladesh"; // পরিবর্তনযোগ্য নয়
const double pi = 3.14; // কম্পাইল টাইম কনস্ট্যান্ট
print("Name: $name, Age: $age, Height: $height, Country: $country, Pi: $pi");
}
3. Nullable এবং Non-Nullable ভেরিয়েবল
Dart 2.12 থেকে, ভাষাটি "null safety" সমর্থন করে। আপনি একটি ভেরিয়েবলকে nullable বা non-nullable হিসাবে চিহ্নিত করতে পারেন।
Non-nullable:
String name = "Alice"; // এটি null হতে পারে নাNullable:
String? nickname; // এটি null হতে পারে
Dart প্রোগ্রামিং ভাষায় বিভিন্ন ডেটা টাইপ ব্যবহার করা হয়, যা ভেরিয়েবলগুলির জন্য মান সংরক্ষণ এবং পরিচালনার জন্য অপরিহার্য। এখানে প্রধান চারটি ডেটা টাইপ—int, double, bool, এবং String—এর সম্পর্কে বিস্তারিত আলোচনা করা হলো।
1. int
বর্ণনা: int ডেটা টাইপটি পূর্ণ সংখ্যা সংরক্ষণ করে। এটি ধনাত্মক এবং ঋণাত্মক উভয় সংখ্যা ধারণ করতে পারে।
উদাহরণ:
void main() {
int age = 25; // একটি পূর্ণ সংখ্যা
print("Age: $age");
}কিছু বৈশিষ্ট্য:
intটাইপের ভেরিয়েবলগুলি প্রায়ই গাণিতিক অপারেশন এবং কাউন্টিংয়ের জন্য ব্যবহৃত হয়।- Dart এ,
intএর মান-2^63থেকে2^63 - 1পর্যন্ত হতে পারে (64-বিট পূর্ণ সংখ্যা)।
2. double
বর্ণনা: double ডেটা টাইপটি দশমিক সংখ্যা (floating-point) সংরক্ষণ করে। এটি সঠিক গাণিতিক হিসাবের জন্য ব্যবহৃত হয়, যেখানে ভগ্নাংশ প্রয়োজন হয়।
উদাহরণ:
void main() {
double height = 5.9; // একটি দশমিক সংখ্যা
print("Height: $height");
}কিছু বৈশিষ্ট্য:
doubleটাইপের ভেরিয়েবলগুলি সাধারণত পরিমাপ এবং গাণিতিক হিসাবের জন্য ব্যবহৃত হয়।- Dart এ
doubleএর মান±1.7976931348623157 × 10^308পর্যন্ত হতে পারে (64-বিট ভাসমান পয়েন্ট সংখ্যা)।
3. bool
বর্ণনা: bool ডেটা টাইপটি বুলিয়ান মান ধারণ করে, অর্থাৎ true অথবা false।
উদাহরণ:
void main() {
bool isStudent = true; // একটি বুলিয়ান মান
print("Is Student: $isStudent");
}কিছু বৈশিষ্ট্য:
boolটাইপের ভেরিয়েবলগুলি সাধারণত শর্তাধীন লজিক এবং নিয়ন্ত্রণ স্টেটমেন্টে ব্যবহৃত হয়।- এটি Boolean লজিকের জন্য ব্যবহার করা হয়, যেমন
ifএবংwhileশর্ত।
4. String
বর্ণনা: String ডেটা টাইপটি টেক্সট বা অক্ষরের একটি সিরিজ সংরক্ষণ করে। এটি একটি বা একাধিক অক্ষর নিয়ে গঠিত হতে পারে।
উদাহরণ:
void main() {
String name = "Alice"; // একটি স্ট্রিং মান
print("Name: $name");
}কিছু বৈশিষ্ট্য:
Stringটাইপের ভেরিয়েবলগুলি সাধারণত তথ্য উপস্থাপন করার জন্য ব্যবহৃত হয়, যেমন নাম, ঠিকানা, বা অন্যান্য টেক্সট ডেটা।- Dart এ, স্ট্রিংগুলিকে একক (
') বা দ্বৈত (") উদ্ধৃতির মধ্যে লেখা হয়।
Dart প্রোগ্রামিং ভাষায় const এবং final কিওয়ার্ডগুলি ডেটা সুরক্ষার জন্য ব্যবহৃত হয়, তবে এদের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে। এই কিওয়ার্ডগুলি ব্যবহার করে আপনি ভেরিয়েবলগুলির মানকে অপরিবর্তনীয় (immutable) করতে পারেন।
1. final
বর্ণনা: final কিওয়ার্ড ব্যবহার করে আপনি একটি ভেরিয়েবল ঘোষণা করেন যার মান একবার সেট করার পর পরিবর্তন করা যায় না। এটি রানটাইমে সেট করা যায়।
ব্যবহার:
finalভেরিয়েবলগুলি সাধারণত সেই সময়ে মান প্রাপ্ত হয় যখন তাদের প্রথমবার ব্যবহার করা হয়।
উদাহরণ:
void main() {
final String name = "Alice"; // একটি final ভেরিয়েবল
print(name);
// name = "Bob"; // এটি ত্রুটি দিবে কারণ final ভেরিয়েবল পরিবর্তন করা যায় না
}
2. const
বর্ণনা: const কিওয়ার্ড ব্যবহার করে আপনি একটি ভেরিয়েবল ঘোষণা করেন যার মান কম্পাইল টাইমে স্থির থাকে। এটি একটি কনস্ট্যান্ট মান নির্দেশ করে যা কোনও অবস্থায় পরিবর্তন করা যাবে না।
ব্যবহার:
constভেরিয়েবলগুলি কম্পাইল টাইমে নির্ধারিত হয় এবং এর মান পরিবর্তন করা যাবে না।
উদাহরণ:
void main() {
const double pi = 3.14; // একটি const ভেরিয়েবল
print(pi);
// pi = 3.14159; // এটি ত্রুটি দিবে কারণ const ভেরিয়েবল পরিবর্তন করা যায় না
}
প্রধান পার্থক্য
| বৈশিষ্ট্য | final | const |
|---|---|---|
| নির্ধারণ | রানটাইমে নির্ধারিত | কম্পাইল টাইমে নির্ধারিত |
| পরিবর্তন | একবার সেট করার পর পরিবর্তন করা যায় না | সম্পূর্ণভাবে অপরিবর্তনীয় |
| মেমরি বরাদ্দ | ভেরিয়েবল ব্যবহার করার সময় মেমরি বরাদ্দ করা হয় | একটি একক ইনস্ট্যান্স তৈরি করে, যা পুনর্ব্যবহারযোগ্য |
Null Safety একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা Dart 2.12 সংস্করণ থেকে কার্যকর করা হয়েছে। এটি ডেভেলপারদের জন্য কোডের নিরাপত্তা বাড়াতে সহায়ক, বিশেষত যখন null মানের কারণে ত্রুটির সম্ভাবনা থাকে। Null Safety নিশ্চিত করে যে একটি ভেরিয়েবল null হতে পারে কিনা তা স্পষ্টভাবে চিহ্নিত করা হয়। এর ফলে কোডের মানের উন্নতি ঘটে এবং চলমান ত্রুটির সংখ্যা কমে যায়।
Null Safety এর ধারণা
Nullable এবং Non-Nullable Types:
- Non-Nullable Types: যখন একটি ভেরিয়েবলকে non-nullable হিসেবে চিহ্নিত করা হয়, তখন এটি নিশ্চিত যে সেই ভেরিয়েবলের মান কখনও null হবে না। যেমন:
int age = 30; // non-nullable int- Nullable Types: যখন একটি ভেরিয়েবলকে nullable হিসেবে চিহ্নিত করা হয়, তখন এটি null হতে পারে। এর জন্য ভেরিয়েবলের টাইপের পরে একটি
?চিহ্ন যুক্ত করতে হয়:
int? age; // nullable intনিরাপত্তা সুবিধা:
- Null Safety ভেরিয়েবলের ধরন এবং মানের অবস্থানগুলিকে নিরাপদভাবে পরিচালনা করতে সহায়ক, ফলে চলমান সময়ে NullPointerExceptions এর সম্ভাবনা কমে যায়।
ইনিশিয়ালাইজেশন:
- Non-nullable টাইপের ভেরিয়েবলগুলি ইনিশিয়ালাইজ করতে হয়, অন্যথায় কম্পাইলার একটি ত্রুটি দেখাবে:
int age; // Error: The variable 'age' must be assigned before it can be used.ডিফল্ট মান:
- Nullable টাইপের জন্য যদি মান না দেওয়া হয় তবে এটি স্বয়ংক্রিয়ভাবে null হিসাবে সেট হয়:
int? age; // age is null by defaultNull Assertion Operator:
- আপনি যদি নিশ্চিত হন যে একটি nullable ভেরিয়েবল null নয়, তবে
!চিহ্ন ব্যবহার করে null নিশ্চিত করতে পারেন। উদাহরণ:
int? age = 25;
int nonNullableAge = age!; // This asserts that age is not null.Null Aware Operators:
- Dart এ কিছু বিশেষ অপারেটর রয়েছে যা null যাচাইয়ের সময় সহায়ক:
- Null-aware Access Operator (
?.):
- Null-aware Access Operator (
String? name;
print(name?.length); // returns null instead of throwing an error- Null-aware Assignment Operator (
??=):
int? a;
a ??= 10; // a will be assigned 10 only if it is currently null
Read more