المتغيرات في لغة Dart
المتغيرات (Variables) هي أماكن تخزين تستخدم لحفظ البيانات داخل الذاكرة أثناء تشغيل البرنامج. في لغة Dart، يمكن تعريف المتغيرات باستخدام عدة كلمات مفتاحية مثل var
، final
، const
، أو تحديد النوع مباشرة مثل int
و String
.
🔹 أنواع المتغيرات في Dart
هناك عدة طرق لتعريف المتغيرات، وكل طريقة لها استخدام معين:
1️⃣ استخدام var
(تحديد النوع تلقائيًا)
عند استخدام var
، تقوم Dart بتحديد نوع المتغير تلقائيًا بناءً على القيمة المسندة له.
✅ مثال:
void main() {
var name = "ياسين"; // نوع المتغير String
var age = 25; // نوع المتغير int
var price = 19.99; // نوع المتغير double
var isActive = true; // نوع المتغير bool
print("الاسم: $name, العمر: $age, السعر: $price, نشط: $isActive");
}
Dart📌 ملاحظة: بعد إسناد قيمة إلى var
، لا يمكن تغييره إلى نوع آخر.
2️⃣ استخدام dynamic
(متغير ديناميكي)
عند استخدام dynamic
، يمكن تغيير نوع البيانات أثناء تشغيل البرنامج.
✅ مثال:
void main() {
dynamic variable = "مرحبا";
print(variable); // طباعة: مرحبا
variable = 42;
print(variable); // طباعة: 42
variable = true;
print(variable); // طباعة: true
}
Dart📌 متى نستخدم dynamic
؟
عندما نحتاج إلى متغير يمكنه الاحتفاظ بأنواع بيانات مختلفة خلال تنفيذ البرنامج.
3️⃣ استخدام final
و const
(متغيرات ثابتة)
عندما نريد تعريف متغير لا يمكن تغيير قيمته بعد إسنادها، نستخدم final
أو const
.
🔹 الفرق بين final
و const
الكلمة المفتاحية | التغيير مسموح؟ | يتم تعيين القيمة أثناء التشغيل أم الترجمة؟ |
---|---|---|
final | ❌ لا يمكن تغييره | أثناء التشغيل (Runtime) |
const | ❌ لا يمكن تغييره | أثناء الترجمة (Compile-time) |
✅ مثال على final
void main() {
final String city = "القاهرة";
print(city);
// city = "الإسكندرية"; // ❌ خطأ: لا يمكن إعادة تعيين قيمة لمتغير final
}
Dart✅ مثال على const
void main() {
const double pi = 3.14159;
print(pi); // pi = 3.14; // ❌ خطأ: لا يمكن تغيير قيمة const<br>}<br></code>
Dart📌 متى نستخدم final
و const
؟
- نستخدم
final
عندما نحتاج إلى تعيين قيمة ثابتة ولكن قد يتم حسابها أثناء التشغيل. - نستخدم
const
عندما تكون القيمة معروفة أثناء الترجمة ولا تتغير مطلقًا.
4️⃣ تحديد نوع البيانات صراحةً
يمكننا تحديد نوع المتغير بشكل صريح مثل int
، double
، String
، bool
، List
، إلخ.
✅ أمثلة:
void main() {
int age = 30;
double price = 49.99;
String message = "مرحبا بكم في Dart!";
bool isStudent = false;
print("العمر: $age، السعر: $price، الرسالة: $message، طالب: $isStudent");
}
Dart🔹 المتغيرات المتعددة (Multiple Variables)
يمكنك تعريف عدة متغيرات بنفس النوع في سطر واحد.
✅ مثال:
void main() {
int x = 10, y = 20, z = 30;
print("x: $x, y: $y, z: $z");
}
Dart🔹 المتغيرات غير القابلة للتعيين (late
)
عند تعريف متغير ولكن لا تريد تعيين قيمة له فورًا، يمكنك استخدام late
.
✅ مثال:
void main() {
late String welcomeMessage;
welcomeMessage = "أهلا وسهلا!";
print(welcomeMessage);
}
Dart📌 متى نستخدم late
؟
عندما يكون المتغير غير ثابت (final
) ولكن سيتم تعيين قيمته لاحقًا في وقت التشغيل.
🔹 المتغيرات داخل الدوال (Local Variables)
يمكن تعريف متغير داخل دالة واستخدامه فقط ضمن تلك الدالة.
✅ مثال:
void greet() {
var name = "ياسين"; // متغير محلي
print("مرحبا $name!");
}
void main() {
greet();
// print(name); // ❌ خطأ: لا يمكن الوصول إلى المتغير خارج الدالة
}
Dart🔹 المتغيرات العامة (Global Variables)
يمكن تعريف متغير خارج جميع الدوال ليكون متاحًا في جميع أنحاء الملف.
✅ مثال:
String globalMessage = "هذه رسالة عامة";
void printMessage() {
print(globalMessage);
}
void main() {
printMessage();
}
Dart🔹 الخلاصة
الكلمة المفتاحية | الوصف |
---|---|
var | تعريف متغير دون تحديد النوع، ويحدد Dart نوعه تلقائيًا. |
dynamic | متغير يمكن تغيير نوعه أثناء التشغيل. |
final | متغير ثابت لا يمكن تغييره بعد تعيينه، يتم تحديد قيمته أثناء التشغيل. |
const | متغير ثابت لا يمكن تغييره بعد تعيينه، يتم تحديد قيمته أثناء الترجمة. |
late | متغير لا يتم تهيئته فورًا ولكنه يجب أن يتم تهيئته قبل الاستخدام. |
int , String , double , bool | تحديد نوع المتغير صراحةً. |
بهذا الشرح، لديك الآن فهم شامل لكيفية التعامل مع المتغيرات في Dart مع أمثلة عملية. 😊🚀
✅ شروط تسمية المتغيرات في Dart
عند تسمية المتغيرات في لغة Dart، يجب الالتزام ببعض القواعد لضمان صحة الكود وعدم حدوث أخطاء. فيما يلي أهم الشروط والقواعد:
🔹 1️⃣ يجب أن تبدأ بحرف أو علامة _
(Underscore)
- يمكن أن تبدأ التسمية بحرف (
a-z
أوA-Z
) أو بالرمز_
، ولكن لا يمكن أن تبدأ برقم.
✅ أمثلة صحيحة:
dartCopyEditvar name = "ياسين";
var _privateVar = 42;
var userAge = 25;
❌ أمثلة خاطئة:
dartCopyEditvar 1name = "محمد"; // ❌ خطأ: لا يمكن أن يبدأ المتغير برقم
🔹 2️⃣ يمكن أن تحتوي على الحروف، الأرقام، والرمز _
فقط
- لا يمكن استخدام الرموز الخاصة مثل
@, #, !, %, &
في أسماء المتغيرات.
✅ مثال صحيح:
dartCopyEditvar user_name = "أحمد";
var student123 = "محمود";
❌ مثال خاطئ:
dartCopyEditvar user-name = "خالد"; // ❌ خطأ: لا يمكن استخدام `-`
var @email = "[email protected]"; // ❌ خطأ: لا يمكن استخدام `@`
🔹 3️⃣ لا يمكن استخدام الكلمات المحجوزة في Dart
- لا يمكنك تسمية المتغير باسم كلمة محجوزة في اللغة مثل
int
،var
،class
،final
، إلخ.
❌ مثال خاطئ:
dartCopyEditvar class = "Web Design"; // ❌ خطأ: `class` كلمة محجوزة
var final = 100; // ❌ خطأ: `final` كلمة محجوزة
📌 🔗 الكلمات المحجوزة في Dart:
javascriptCopyEditabstract, as, async, await, break, case, catch, class, const, continue,
default, do, else, enum, export, extends, external, factory, false,
final, finally, for, Function, get, hide, if, implements, import,
in, interface, is, late, library, mixin, new, null, on, operator,
part, required, return, set, show, static, super, switch, sync,
this, throw, true, try, typedef, var, void, while, with, yield
🔹 4️⃣ حساسة لحالة الأحرف (Case-Sensitive)
- لغة Dart تفرق بين الأحرف الكبيرة والصغيرة، لذا
username
وUserName
يعتبران متغيرين مختلفين.
✅ مثال صحيح:
dartCopyEditvar username = "Ali";
var UserName = "Omar";
print(username); // طباعة: Ali
print(UserName); // طباعة: Omar
🔹 5️⃣ يجب أن تكون الأسماء واضحة ومعبرة
- يفضل اختيار أسماء تعبر عن محتوى المتغير بدلاً من استخدام أسماء عشوائية.
✅ مثال جيد:
dartCopyEditvar studentName = "سارة"; // ✔️ واضح ومعبر
var totalPrice = 150.75; // ✔️ يعبر عن سعر إجمالي
❌ مثال سيئ:
dartCopyEditvar x = "سارة"; // ❌ غير واضح
var tp = 150.75; // ❌ لا يوضح الغرض منه
🔹 6️⃣ لا يمكن استخدام المسافات في الأسماء
- لا يمكن استخدام المسافات داخل أسماء المتغيرات، ولكن يمكن استخدام
_
أو CamelCase بدلاً منها.
✅ مثال صحيح:
dartCopyEditvar student_name = "أحمد"; // ✔️ استخدام `_`
var studentName = "علي"; // ✔️ استخدام CamelCase
❌ مثال خاطئ:
dartCopyEditvar student name = "أحمد"; // ❌ خطأ: لا يمكن وجود مسافة
🔹 7️⃣ يفضل استخدام أسلوب التسمية CamelCase أو Snake_Case
- يفضل استخدام CamelCase (بداية كل كلمة بحرف كبير عدا الأولى) أو Snake_Case (استخدام
_
بين الكلمات).
✅ أمثلة صحيحة:
dartCopyEditvar studentName = "فاطمة"; // ✔️ CamelCase
var student_name = "خالد"; // ✔️ Snake_Case
❌ أمثلة خاطئة:
dartCopyEditvar studentname = "عمر"; // ❌ غير واضح
var STUDENTNAME = "يحيى"; // ❌ غير مفضل في المتغيرات
🔹 الخلاصة
القاعدة | ✅ صحيح | ❌ خطأ |
---|---|---|
يجب أن يبدأ بحرف أو _ | var name = "أحمد"; | var 1name = "أحمد"; |
لا يحتوي على رموز خاصة | var user_name = "علي"; | var user-name = "علي"; |
لا يحتوي على مسافات | var userName = "سارة"; | var user Name = "سارة"; |
لا يكون كلمة محجوزة | var studentCount = 10; | var class = 10; |
حساسة لحالة الأحرف | var myVar = 5; var MyVar = 10; | — |
يفضل أن يكون واضحًا | var totalPrice = 200; | var tp = 200; |
🎯 نصيحة عملية
اتبع دائمًا أسلوب CamelCase أو Snake_Case في التسمية واجعل الأسماء واضحة لتعزيز قابلية القراءة والفهم.
🚀 الآن لديك فهم كامل لشروط تسمية المتغيرات في Dart! 🎯