Data Type
Data Type
-
A data type defines the kind of values a variable or expression can hold (e.g., integer, string, boolean, float).
خَلِّيكَ فاهم إنّ كل قيمة بتتعامل معها في البرنامج ليها نوع: مثلا int للأرقام الصحيحة، string للنصوص، bool (صح/خطأ)، float للأرقام العشرية، وغيرها. -
Primitive types cover basic values; composite types (arrays, objects) bundle multiple values.
النوع بيحدد: كيف تُخزَّن القيمة، إيه العمليات اللي تنفع تعملها عليها، وهل لازم تتحقق قبل ما تستخدمها. -
Strongly typed languages enforce the declared type, while weakly typed ones perform implicit conversions.
في لغات زي PHP أو JavaScript النوع بيتغير لو دَخلت قيمة مختلفة (“ضعيف النوع”)، أما في Laravel/PHP لما تعلن int $age يثبت إنك لازم تمرر رقم، وإلا يطلع خطأ. -
Understanding data types helps prevent errors (e.g., treating text as numbers) and guides how values are stored and manipulated.
Data Type (Dart)
- Dart يمسك أنواع بيانات ثابتة:
int,double,String,bool,List,Map,Set,Runes,Symbol,dynamic. - تقدر تستخدم
varأوfinalوconst، والـ compiler يعرف النوع تلقائيًا (type inference) لكن يُفضل تحدده لما تحتاج دقّة. dynamicوObjectيسمحوا بمرونة أكبر لكن يخسروك التحقق المبكر، فاستعملهم لما تكون القيمة مش معروفة من البداية.- الأنواع المركبة مثل
List<String>أوMap<String, int>تحفظ نوع العناصر وتمنع أخطاء وقت التشغيل. - Dart يدعم nullable types (
int?,String?) منذ Null Safety، يعني لازم تتعامل مع القيمة اللي ممكن تكونnullبـ?أو!أو تحقق منها قبل الاستخدام.
Data Type Mentoring
- Dart يتعامل بأنواع ثابتة قوية:
int,double,String,bool, وبتقدر تستخدمvarأوfinal/constعلشان تستفيد من استنتاج النوع وتهدي أخطاء الكتابة. - لما تشغل Null Safety (افتراضي بعد Dart 2.12)، كل نوع لازم تقرر إذا كان ممكن يكون
nullبإضافة?(مثلاًString?) وتتعامل مع القيمة بأمان قبل الاستخدام. - الأنواع المركبة زي
List<String>وMap<String, int>بتحافظ على نوع العناصر؛ اعتمد عليهم بدلList<dynamic>علشان الكود يبقى واضح وقابل للصيانة. - استخدم
dynamicفقط لما تشتغل مع بيانات من مصادر خارجية (مثل JSON من API) ولسه مش عارف النوع، وبعدين حوّله لنوع محدد قبل ما تكمل. - لما تبني نموذج بيانات (class/model)، عرّف الحقول بنوعها الصحيح وخلي الـ constructors والـ methods تعيد أنواع واضحة؛ ده يساعد الـ analyzer يلقط أخطاء قبل ما تشغّل البرنامج.
عايز أساعدك تطبّق ده في كود معين؟
Data Types in Dart
-
شنو هي البيانات؟ كل قيمة تخزنها في الكود (رقم، نص، صح/خطأ) لها نوع (data type). النوع يخبر لغة دارت إزاي تتعامل مع القيمة دي.
-
أنواع أساسية (Primitive):
int: أرقام صحيحة (مثلاً5,-2).double: أرقام فيها فاصلة عشرية (3.14,0.5).String: نصوص بين تنصيصين ("مرحبا"أو'hello').bool: صح أو خطأ (trueأوfalse).null: عدم وجود قيمة.
-
كيف تعرف متغير؟
dartint age = 25; double price = 12.5; String name = "Ali"; bool isStudent = true;تكتب نوع المتغير قبل اسمه. تقدر تستخدم
varعشان تخلي دارت تستنتج النوع:dartvar city = "Cairo"; // بتتعامل كـ String -
Null Safety:
بعد Dart 2.12، المتغير الافتراضي لازم يكون فيه قيمة، إلا لو حطيت?بعد النوع:dartString? nickname; // ممكن تكون null nickname = "Mento";قبل ما تستخدم قيمة ممكن تكون
null, لازم تتحقق منها:dartif (nickname != null) { print(nickname.length); } -
أنواع مركبة:
List<String>: مصفوفة من نصوص.Map<String, int>: مفتاح نص مقابل قيمة رقمية.Set<int>: مجموعة أرقام بدون تكرار.
مثال:
dartList<String> tags = ["dart", "flutter"]; Map<String, int> scores = {"math": 90, "english": 85}; -
نوع مرن:
dynamicتخلي المتغير يقدر يغير نوعه في وقت التشغيل، بس ما ينفعش تستخدمه إلا لما تكون محتاج مرونة (مثلاً لما تجيب JSON من API).dartdynamic data = "text"; data = 42; // مش هيتكلم الـ compiler -
استخدام البيانات صح:
لما تعرف نموذج (class)، خليك واضح في أنواع الحقول:dartclass Topic { final String title; final int domainId; Topic({required this.title, required this.domainId}); } -
خلاصة خطوة بخطوة:
- قرر اگر القيمة رقم ولا نص ولا bool.
- عرّف متغير بالنوع المطلوب.
- لو ممكن تكون
null، ضيف?. - استخدم
List,Map,Setلما تتعامل مع مجموعة قيم. - خلي النموذج (class) يحدد النوع حتى لو جاي من JSON.
لو حابب نعمل مثال عملي (مثلاً تخزين موضوع جديد)، قولي ونعملها مع بعض خطوة بخطوة.