✏️ تعديل: 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`: عدم وجود قيمة. - **كيف تعرف متغير؟** ```dart int age = 25; double price = 12.5; String name = "Ali"; bool isStudent = true; ``` تكتب نوع المتغير قبل اسمه. تقدر تستخدم `var` عشان تخلي دارت تستنتج النوع: ```dart var city = "Cairo"; // بتتعامل كـ String ``` - **Null Safety:** بعد Dart 2.12، المتغير الافتراضي لازم يكون فيه قيمة، إلا لو حطيت `?` بعد النوع: ```dart String? nickname; // ممكن تكون null nickname = "Mento"; ``` قبل ما تستخدم قيمة ممكن تكون `null`, لازم تتحقق منها: ```dart if (nickname != null) { print(nickname.length); } ``` - **أنواع مركبة:** - `List<String>`: مصفوفة من نصوص. - `Map<String, int>`: مفتاح نص مقابل قيمة رقمية. - `Set<int>`: مجموعة أرقام بدون تكرار. مثال: ```dart List<String> tags = ["dart", "flutter"]; Map<String, int> scores = {"math": 90, "english": 85}; ``` - **نوع مرن:** `dynamic` تخلي المتغير يقدر يغير نوعه في وقت التشغيل، بس ما ينفعش تستخدمه إلا لما تكون محتاج مرونة (مثلاً لما تجيب JSON من API). ```dart dynamic data = "text"; data = 42; // مش هيتكلم الـ compiler ``` - **استخدام البيانات صح:** لما تعرف نموذج (class)، خليك واضح في أنواع الحقول: ```dart class Topic { final String title; final int domainId; Topic({required this.title, required this.domainId}); } ``` - **خلاصة خطوة بخطوة:** 1. قرر اگر القيمة رقم ولا نص ولا bool. 2. عرّف متغير بالنوع المطلوب. 3. لو ممكن تكون `null`، ضيف `?`. 4. استخدم `List`, `Map`, `Set` لما تتعامل مع مجموعة قيم. 5. خلي النموذج (class) يحدد النوع حتى لو جاي من JSON. لو حابب نعمل مثال عملي (مثلاً تخزين موضوع جديد)، قولي ونعملها مع بعض خطوة بخطوة.
👁️ معاينة فورية
💡 كل بلوك قابل للسحب والترتيب. يدعم
Markdown
:
## عنوان
·
**bold**
·
- قائمة
·
```dart code```
·
[[اسم الموضوع]]
💾 حفظ التعديلات