Full Transcript

‫برمجة األجهزة الذكية ‪٢‬‬ ‫مدرب املقرر ‪ :‬خالد مضواح‬ ‫أوال‪ :‬لغة البرمجة دارت ‪Dart‬‬ ‫ملاذا ‪: dart‬‬ ‫تم اتاحة ‪ dart‬للجمهور...

‫برمجة األجهزة الذكية ‪٢‬‬ ‫مدرب املقرر ‪ :‬خالد مضواح‬ ‫أوال‪ :‬لغة البرمجة دارت ‪Dart‬‬ ‫ملاذا ‪: dart‬‬ ‫تم اتاحة ‪ dart‬للجمهور في ‪2011‬‬ ‫ ‬ ‫تستخدم دارت لبناء تطبيقات الجوال ‪ ،‬الويب ‪ ،‬والسيرفر‬ ‫ ‬ ‫دارت سريعة ويتم ترجمتها مباشرة إلى لغة اآللة وهي ال تحتاج إلى جسر للوصول إلى موارد الجهاز‬ ‫ ‬ ‫‪ Dart‬هي لغة برمجة شيئية )كائنية التوجه ‪(object-oriented programming language -OOP-‬‬ ‫ ‬ ‫تشبه لغات البرمجة ‪c,c++,java‬‬ ‫ ‬ ‫ما هي بعض فوائد استخدام دارت؟‬ ‫➤ درات هي ‪:(ahead-of-time compiled to native code) AOT‬‬ ‫وهذا يجعل تطبيق ‪ Flutter‬سري ًعا‪.‬بعبارة أخرى ‪ ،‬ال يوجد وسيط لترجمة لغة إلى أخرى ‪ ،‬وال توجد جسور‬ ‫يتم استخدام تجميع ‪ AOT‬عند تجميع تطبيقك لغرض اإلصدار )مثل ‪ Apple App Store‬و ‪.(Google Play‬‬ ‫➤ دارت هي ‪:(just-in-time compiled) JIT‬‬ ‫والذي جعله سري ًعا لعرض تغييرات التعليمات البرمجية الخاصة بك عبر ميزة إعادة التحميل السريع )‪ (hot reload‬في‬ ‫‪Flutter‬‬ ‫يتم استخدام تجميع ‪ JIT‬عند تصحيح أخطاء تطبيقك عن طريق تشغيله في املحاكي‪.‬‬ ‫نظرا ألن ‪ Flutter‬يستخدم ‪ ، Dart‬فإن جميع أكواد واجهة املستخدم )‪ (UI‬مكتوبة بلغة ‪ ، Dart‬مما يلغي الحاجة إلى‬‫➤ ً‬ ‫استخدام لغات منفصلة )الترميز( إلنشاء واجهة املستخدم‪.‬‬ ‫إطارا في الثانية )لألجهزة القادرة على ‪ 120‬هرتز(‪.‬‬ ‫ً‬ ‫إطارا في الثانية )‪ (fps‬و ‪120‬‬ ‫ً‬ ‫➤ يعمل عرض ‪ Flutter‬بمعدل ‪60‬‬ ‫كلما زاد عدد اإلطارات في الثانية ‪ ،‬كان التطبيق أكثر سالسة‪.‬‬ ‫دالة ) (‪: main‬‬ ‫يجب أن يحتوي كل تطبيق على دالة ‪ main‬عالية املستوى ‪ ،‬وهي نقطة الدخول إلى التطبيق‪.‬‬ ‫يمكن كتابة دالة ‪ main‬بأحد الطريقتني التالية‪:‬‬ ‫‪1. Arrow syntax‬‬ ‫;) ) (‪void main( ) => runApp( MyApp‬‬ ‫‪2. Normal syntax‬‬ ‫};) ) (‪void main( ) { runApp( MyApp‬‬ ‫األساسيات | ‪Basics‬‬ ‫املتغيرات ‪Variables‬‬ ‫ٍ‬ ‫مرحلة ما إلى التعامل مع البيانات‪.‬وعند رغبتك في تخزين تلك‬ ‫أثناء عملك مع لغة ‪ ،Dart‬ستحتاج في‬ ‫البيانات‪ ،‬فإنك ستحتاج إلى شيء يقوم بتخزينها لك‪ ،‬وهذا هو عمل املتغيرات‪.‬يمكن تخيل املتغيرات‬ ‫والنظر إليها على أنها األوعية أو الحاويات التي تحتوي وتُخزن كل ما يوضع فيها‪.‬إذا ً يمكن النظر‬ ‫للمتغير على أنه أسلوب بسيط لتخزين البيانات واسترجاعها بشكل مؤقت أثناء عمل البرنامج‪.‬‬ ‫تعريف املتغيرات باستخدام ‪var‬‬ ‫لتعريف متغير في ‪ Dart‬نستخدم كلمة ‪ ،var‬ولتوضيح الفكرة نالحظ املثال التالي‪:‬‬ ‫;‪var age‬‬ ‫في املثال أعاله قمنا بإنشاء وتعريف متغير باسم ‪ ،age‬وذلك لحفظ قيمة ال ُعمر بداخله‪.‬اآلن سنقوم‬ ‫بإسناد قيمة ال ُعمر ‪ 26‬له‪:‬‬ ‫;‪age = 26‬‬ ‫ِ‬ ‫هذه املرة بدون استخدام التعبير ‪ ،var‬وذلك ألنها تستخدم مرة واحدة‬ ‫قمنا باستخدام املتغير ‪ age‬في‬ ‫فقط وهي أثناء تعريف املتغير‪ ،‬وبعد ذلك سنتعامل مع املتغير بشكل مباشر من خالل اسمه فقط‪ ،‬وفي‬ ‫أيضا اختصار الخطوتني السابقتني في خطوة واحدة كما يلي‪:‬‬‫هذه الحالة هو ‪.age‬يمكن ً‬‫ِ‬ ‫;‪var age = 26‬‬ ‫نالحظ في املثال أعاله أنه يمكننا تعريف املتغير وإسناد القيمة إليه في ٍ‬ ‫آن واحد‪.‬إذاً‪ُ ،‬يمكن للمبرمج‬ ‫استخدام ‪ age‬في أماكن ُمختلفة من البرنامج‪ ،‬وسيتم استبدالها بالقيمة ‪.26‬باإلضافة إلى ذلك‪ ،‬يمكن‬ ‫للمبرمج أن يقوم بتغيير قيمة املتغير أثناء البرنامج‪.‬فمثالً‪ ،‬بعد تعريفنا للمتغير السابق ‪ ،age‬يمكننا‬ ‫تغيير قيمته إن أردنا‪ ،‬ولتوضيح الفكرة نالحظ املثال التالي‪:‬‬ ‫;‪age = 30‬‬ ‫تعريف أكثر من متغير في سطر واحد‬ ‫يمكنك تعريف أكثر من متغير في سطر واحد ‪-‬كطريقة ُمختصرة بدالً من تعريف كل متغير على حدة‪-‬‬ ‫وذلك باستخدام الفاصلة ‪.،‬يوضح السطر التالي هذه الفكرة‪:‬‬ ‫;‪var name = "Khaled", age = 21, isMarried = false‬‬ ‫قمنا باستخدام ‪ var‬مرة واحدة فقط‪ ،‬ومن ثم فصلنا بني املتغيرات بالفاصلة العادية ‪ ,‬بدالً من‬ ‫استخدام ‪ var‬ثالث مرات‪ ،‬أي مرة في كل سطر لكل متغير‪.‬‬ ‫في ‪ ، Dart‬يتم اإلعالن عن جميع املتغيرات عامة )متاحة للجميع( افتراضيًا ‪ ،‬ولكن ببدء اسم املتغير‬ ‫بشرطة سفلية )_( ‪ ،‬يمكنك إعالنه على أنه خاص‪.‬بالتصريح عن متغير خاص ‪ ،‬فأنت تقول إنه ال يمكن‬ ‫الوصول إليه من فئات ‪ /‬دوال خارجية ؛ بمعنى آخر ‪ ،‬يمكن استخدامه فقط من داخل فئة ‪ /‬دالة اإلعالن‪.‬‬ ‫‪) Public‬يبدأ اسم املتغير بدون شرطة سفلية(‬ ‫;'‪String userName = 'Sandy‬‬ ‫‪) Private‬يبدأ اسم املتغير بشرطة سفلية(‬ ‫;'‪String _userID = 'XW904‬‬ ‫الثوابت ‪Constants‬‬ ‫تختلف الثوابت ‪ Constants‬عن املُتغيرات ‪ Variables‬في أنه ال يمكن تغيير قيمتها بعد إسناد أول قيمة لها‪،‬‬ ‫وستظل قيمة الثابت كما هي طيلة فترة البرنامج‪.‬‬ ‫لتعريف ثابت في ‪ Dart‬نستخدم كلمة ‪ const‬أو ‪final‬‬ ‫لتوضيح الفكرة نالحظ املثال التالي‪:‬‬ ‫;‪const weekDays = 7‬‬ ‫دائما ‪ 7‬أيام‪ ،‬أي أنه ال يمكننا تغيير عدد أيام األسبوع‪ ،‬وعليه يمكن تمثيلها في ثابت‬ ‫ً‬ ‫أيام األسبوع هي‬ ‫في البرنامج كما رأينا ساب ًقا‪.‬ومن األمثلة على الثوابت تاريخ امليالد‪ ،‬فالتاريخ الذي ولدت فيه ثابت ولن‬ ‫يتغير‪.‬يوضح السطر التالي تعريف ثابت لتمثيل تاريخ امليالد‪:‬‬ ‫;"‪const dateOfBrith = "10/02/1990‬‬ ‫التعليقات ‪Comments‬‬ ‫في حاالت معينة أثناء كتابة الكود‪ ،‬قد يحتاج املبرمج إلى وضع بعض املالحظات أو التعليقات‪.‬فمثالً قد‬ ‫يحتاج إلى وضع مالحظة لتذكيره بتعديل كود معني‪ ،‬فيقوم املبرمج حينها بكتابة بعض املالحظات بجانب‬ ‫ذلك الكود للعودة إليه فيما بعد‪.‬وفي حاالت أخرى‪ ،‬قد يعمل على امللف البرمجي أو املشروع البرمجي‬ ‫أكثر من شخص‪ ،‬وقد يحتاج أحد املبرمجني إلى أن يضع بعض املالحظات ألعضاء الفريق‪ ،‬وهكذا‪.‬توفر‬ ‫التعليقات في ‪ Dart‬طريقة تُساعد املبرمج على كتابة ما يود من مالحظات في البرنامج‪ ،‬وبالنسبة للغة‬ ‫‪ Dart‬فإنها ستتجاهل تلك التعليقات‪ ،‬ولن تنظر لها على أنها تعليمات ستقوم بتنفيذها‪.‬‬ ‫سنتحدث في هذا الجزء عن أنواع التعليقات في ‪ Dart‬وهي‪:‬‬ ‫تعليق السطر الواحد ‪.Single Line Comment‬‬ ‫ ‬ ‫تعليق متعدد األسطر ‪.Multi-Line Comment‬‬ ‫ ‬ ‫تعليق السطر الواحد ‪Single Line Comment‬‬ ‫عند رغبتنا في وضع تعليق في سطر واحد أو ‪ ،Single-line comment‬والذي سينتهي بنهاية‬ ‫السطر‪ ،‬وسنستخدم ‪ //‬كعالمة لبداية التعليق‪.‬يوضح السطر التالي هذه الفكرة‪:‬‬ ‫‪// This is a comment.‬‬ ‫ليس بالضرورة أن يبدأ التعليق من بداية السطر‪ ،‬فقد يكون التعليق هو جزء من سطر برمجي‪.‬لتوضيح‬ ‫الفكرة نالحظ املثال التالي‪:‬‬ ‫‪var age = 25; // This is my age.‬‬ ‫تعليق متعدد األسطر ‪Multi-line Comments‬‬ ‫في بعض الحاالت قد نحتاج إلى كتابة تعليق طويل يمتد على أكثر من سطر‪.‬في هذه الحالة يمكننا‬ ‫استخدام أسلوب التعليق متعدد األسطر ‪.Multi-Line Comment‬ونقوم بذلك عن طريق كتابة‬ ‫املالحظات بني ‪.‬يوضح املثال التالي هذا األمر‪:‬‬ ‫‪‬‬ ‫قد يستخدم البعض أسلوب التعليق متعدد األسطر كتعليق سطر واحد‪.‬الحظ املثال التالي‪:‬‬ ‫‪‬‬ ‫وبنفس األسلوب يمكنك استخدامها عند وجود سطر برمجي‪.‬ولتوضيح الفكرة نالحظ املثال التالي‪:‬‬ ‫‪var age = 25; ‬‬ ‫التسميات ‪Naming‬‬ ‫للتسميات في لغة ‪ Dart‬شروط ومن غير املمكن تسمية املتغيرات أو الثوابت إذا خالفت هذه الشروط‪.‬‬ ‫‪.١‬ال يمكن تسمية متغير يحتوي على كلمتني‪ ،‬ولتوضيح الفكرة نالحظ املثال التالي‪:‬‬ ‫‪var my name = "khalid"; // Wrong‬‬ ‫وعوضا عن ذلك نقوم بتسمية املتغيرات‬‫ً‬ ‫لن يقبل البرنامج استخدام الكلمتني ‪ my name‬كاسم للمتغير‬ ‫التي تحتوي على كلمتني عن طريق استخدام أسلوب كتابة ‪ ،Camel case‬ويكون ذلك عن طريق كتابة‬ ‫كبيرا‪.‬الحظ املثال التالي‪:‬‬ ‫ً‬ ‫أول كلمة بحرف صغير ثم أول حرف من كل كلمة بعدها يكون حرفًا‬ ‫‪var myName = "Khalid"; // Correct‬‬ ‫الحظ كيف تمت كتابة الكلمتني في كلمة واحدة وأن الحرف األول من الكلمة الثانية كبير‬ ‫‪.٢‬ال يمكن التسمية بأسماء تحتوي في داخلها على إحدى الرموز الخاصة بالعمليات مثل عالمة الجمع‬ ‫‪ +‬وعالمة الطرح وإلى آخره‪ ،‬ولتوضيح الفكرة نالحظ املثال التالي‪:‬‬ ‫‪var +name = "Khalid" // Wrong‬‬ ‫‪.٣‬ال يمكن التسمية بأسماء محجوزة في اللغة مثل كلمة ‪ var‬الخاصة بتعريف املتغيرات أو‬ ‫كلمة ‪ const‬الخاصة بتعريف الثوابت‪.‬‬ ‫‪var const = "Khalid" // Wrong‬‬ ‫أنواع البيانات‬ ‫أنواع البيانات ‪Datatype‬‬ ‫تدعم لغة ‪ Dart‬عدد من أنواع البيانات‪ ،‬ويوضح الجدول التالي هذه األنواع‪:‬‬ ‫الوصف‬ ‫النوع‬ ‫لتمثيل األعداد الصحيحة‪.‬‬ ‫‪int‬‬ ‫يستخدم لتمثيل األرقام التي تحتوي على النقطة العشرية‪.‬‬ ‫‪double‬‬ ‫يستخدم لتمثيل أنواع البيانات النصية مثل ‪ characters‬والنصوص ‪.strings‬‬ ‫‪String‬‬ ‫أي بيانات من هذا النوع تكون ضمن قيمتني وهما ‪ true‬و ‪.false‬‬ ‫‪Boolean‬‬ ‫ِ‬ ‫هذه األنواع بشكل مفصل‪.‬‬ ‫سيتم فيما يلي مناقشة كل نوع من‬ ‫تعريف متغير من نوع ‪String‬‬ ‫استخدام عالمات التنصيص املفردة ‪.Single Quote‬‬ ‫ ‬ ‫;'‪var message = 'Welcome to Dart‬‬ ‫استخدام عالمات التنصيص املزدوجة ‪.Double Quote‬‬ ‫ ‬ ‫;”‪var message = "Welcome to Dart‬‬ ‫استخدام ‪ String‬لتعريف املتغير‪.‬‬ ‫ ‬ ‫;"‪String message = "Welcome to Dart‬‬ ‫طريقة دمج النصوص باستخدام عالمة “‪”+‬‬ ‫نصا واح ًدا‪ ،‬كما يمكننا دمج متغير ونص على النحو التالي‪:‬‬ ‫يمكننا دمج نصني أو أكثر ليكونا ً‬ ‫;"‪var itemTwo = "Dart‬‬ ‫;‪var message = "Welcome to " + itemTwo‬‬ ‫إسناد قيم باستخدام عالمة “‪) ”$‬سلسلة االقحام(‬ ‫يمكننا إسناد قيم متغيرات أو ثوابت بداخل العبارات النصية لتكون العبارة النصية تحتوي على قيمة‬ ‫املتغير أو الثابت على النحو التالي‪:‬‬ ‫;‪var num = 1‬‬ ‫;"‪var message = "the value of num is $num‬‬ ‫النصوص ومفهوم ‪Escape Character‬‬ ‫ِ‬ ‫هذه العمليات داخل النص ‪ String‬وكل واحدة منها تقوم بعملية محددة فعلى سبيل املثال ‪\n‬‬ ‫تستخدم‬ ‫يجعل ما بعده على سطر جديد‪ ،‬ويوضح الجدول التالي عمليات ‪:Escape Character‬‬ ‫وظيفتها‬ ‫رمز العملية‬ ‫اسم العملية‬ ‫يضيف عدد من املسافات في مكان وضعه‬ ‫‪\t‬‬ ‫‪Horizontal Tab‬‬ ‫يقوم بجعل ما بعده على سطر جديد‬ ‫‪\n‬‬ ‫‪Newline‬‬ ‫تقوم بإضافة ' مكان وضعها‬ ‫\‬ ‫‪Single quote‬‬ ‫تقوم بإضافة " مكان وضعها‬ ‫"\‬ ‫‪Double quote‬‬ ‫تقوم بإضافة \ مكان وضعها‬ ‫\\‬ ‫‪Backslash‬‬ ‫تعريف متغير من نوع ‪Number‬‬ ‫عرف املتغير من نوع ‪ number‬كتعريف املتغير العادي‪ ،‬و ُيسند إليه قيمة رقم‪ ،‬نالحظ املثال التالي‪:‬‬ ‫ُي ّ‬ ‫;‪var valueType = 2‬‬ ‫تعريف متغير من نوع ‪Double‬‬ ‫عرف املتغير من نوع ‪ Double‬كتعريف املتغير العادي‪ ،‬و ُيسند إليه قيمة رقم عشري‬ ‫ُي ّ‬ ‫;‪var valueType = 2.0‬‬ ‫تعريف متغير من نوع ‪Boolean‬‬ ‫عرف املتغير من نوع ‪ boolean‬كسائر املتغيرات‪ ،‬ولكن يتميز النوع ‪ boolean‬عن غيره من بقية األنواع‬ ‫يُ ّ‬ ‫أنه يحتوي على قيمتني فقط‪ ،‬بمعنى أن أي متغير يكون نوعه ‪ boolean‬ستكون قيمته‬ ‫إما ‪ true‬أو ‪ false‬ولتوضيح الفكرة نالحظ املثال التالي‪:‬‬ ‫;‪var value = true‬‬ ‫تعريف املتغيرات بنوع املتغير‬ ‫تحتوي لغة ‪ Dart‬على ميزة ‪ ،safe type‬أي أنها تمتلك ميزة األمان عند تعريف املتغيرات‪ ،‬نالحظ املثال‬ ‫التالي‪:‬‬ ‫;‪int intValue = 2‬‬ ‫في هذا املثال قنا بتعريف متغير من نوع عدد صحيح‪ ،‬بمعنى أنه ال يمكننا إسناد قيمة غير قيم األعداد‬ ‫الصحيحة ولو أسندنا له قيمة عدد بخالف هذا النوع فسوف يظهر لنا خطأ ألننا أسندنا قيمة ملتغير ال‬ ‫يقبل هذا النوع من القيم‪ ،‬نالحظ املثال التالي‪:‬‬ ‫;‪int intValue‬‬ ‫;"‪intValue = "Not int‬‬ ‫‪// Error: A value of type 'String' can't be assigned to a‬‬ ‫‪variable of type 'int'.‬‬ ‫كذلك يمكننا تعريف بقية األنواع األخرى باستخدام نوع املتغير كما هو موضح في املثال التالي‪:‬‬ ‫;‪int intValue = 2‬‬ ‫;‪double doubleValue = 2.1‬‬ ‫;"‪String stringVale = "StringValue‬‬ ‫;‪bool boolValue = true‬‬ ‫التحويل بني املتغيرات‪:‬‬ ‫تحويل عدد إلى نص‬ ‫;‪num x = 30‬‬ ‫;))(‪print(x.toString‬‬ ‫تحويل نص إلى عدد صحيح‬ ‫;"‪var y = "2‬‬ ‫;))‪print(10 + int.parse(y‬‬ ‫تحويل عدد عشري إلى عدد صحيح‬ ‫;‪double n = 10.01‬‬ ‫;))(‪print(n.toInt‬‬ ‫املعامالت‬ ‫العمليات ‪Operators‬‬ ‫هناك عدد من العمليات املختلفة التي يمكنك استخدامها أثناء البرمجة‪ ،‬مثل العمليات الرياضية وعمليات‬ ‫املقارنة والعمليات املنطقية وغيرها من العمليات املُختلفة‪ ،‬سنتحدث في هذا الجزء عن مجموعة من أهم‬ ‫العمليات التي توفرها لغة ‪.Dart‬‬ ‫العمليات الحسابية ‪Arithmetic Operators‬‬ ‫ببساطة‪ ،‬يمكنك تنفيذ العمليات الرياضية املختلفة باستخدام الصيغة التالية‪:‬‬ ‫;‪result = left op right‬‬ ‫حيث يمثل ‪ op‬نوع العملية الرياضية املُراد استخدامها‪ ،‬ويمثل كل من ‪ left‬و ‪ right‬القيمتني )أو‬ ‫املتغيرين أو الثابتني( اللذين سيتم تنفيذ العملية ‪ op‬عليهما ويوضح الجدول التالي أنواع العمليات‬ ‫الحسابية‪:‬‬ ‫وظيفتها‬ ‫رمز العملية‬ ‫اسم العملية‬ ‫تقوم بتنفيذ عملية الجمع‪.‬‬ ‫‪+‬‬ ‫‪Addition‬‬ ‫تقوم بتنفيذ عملية الطرح‪.‬‬ ‫‪-‬‬ ‫‪Subtraction‬‬ ‫قسمة والناتج عدد عشري‬ ‫‪/‬‬ ‫‪Division‬‬ ‫قسمة والناتج عدد صحيح‬ ‫‪~/‬‬ ‫‪Division‬‬ ‫تقوم بتنفيذ عملية الضرب‪.‬‬ ‫*‬ ‫‪Multiplication‬‬ ‫لتوضيح الفكرة‪ ،‬دعنا نقوم باستبدال ‪ op‬بأحد العمليات السابقة‪ ،‬وسنقوم هنا باختيار الجمع ‪ +‬كمثال‬ ‫يمكن تطبيقه على باقي العمليات األخرى‪.‬يوضح السطر التالي هذا األمر‪:‬‬ ‫;‪var result = 5 + 2‬‬ ‫في املثال أعاله‪ ،‬قمنا بتنفيذ عملية الجمع باستخدام ‪ +‬وسيتم تخزين ناتج العملية وهو في هذه الحالة ‪7‬‬ ‫في املتغير ‪.result‬‬ ‫عمليات املقارنة ‪Comparison Operators‬‬ ‫يمكنك تنفيذ عمليات املقارنة املختلفة باستخدام الصيغة التالية مع التنبيه على أنه يمكنك استخدامها في‬ ‫سياقات برمجية أخرى دون إسنادها إلى قيمة‪ ،‬مثل استخدامها كشرط مع جملة ‪ if‬كما سنرى الح ًقا‪:‬‬ ‫;‪result = left op right‬‬ ‫يمثل ‪ op‬نوع عملية املقارنة املُراد استخدامها ويمثل كل من ‪ left‬و ‪ right‬القيمتني )أو املتغيرين أو‬ ‫الثابتني( اللذين سيتم تنفيذ العملية ‪ op‬عليهما‪.‬وستكون نتيجة عمليات املقارنة هي قيمة من‬ ‫نوع ‪ ،boolean‬أي أن ناتج املقارنة سيكون إما ‪ true‬أو ‪ ،false‬يوضح الجدول التالي هذا األمر‪:‬‬ ‫وظيفتها‬ ‫رمز العملية‬ ‫اسم العملية‬ ‫تعيد ‪ true‬في حال كان ‪ left‬أكبر من ‪.right‬‬ ‫>‬ ‫‪Greater Than‬‬ ‫تعيد ‪ true‬في حال كان ‪ left‬أصغر من ‪.right‬‬ ‫‬ ‫‪Greater Than or Equal‬‬ ‫تعيد ‪ true‬في حال كان ‪ left‬أصغر من أو يساوي ‪.right‬‬ ‫= ‪ ،‬ونستخدمها‬ ‫بصيغة ‪ Dart‬على النحو التالي‪:‬‬ ‫;‪var result = 5 > 2‬‬ ‫في هذه الحالة‪ ،‬قمنا بتنفيذ عملية املقارنة باستخدام > وسيتم تخزين الناتج ‪-‬وهو ‪ -true‬في‬ ‫املتغير ‪.result‬‬ ‫العمليات املنطقية ‪Logical Operators‬‬ ‫هناك ثالث عمليات منطقية‪ ،‬اثنتان منهما تكتب بالصيغة التالية )مع التنبيه على أنه يمكنك استخدامها‬ ‫في سياقات برمجية أخرى دون إسنادها إلى قيمة‪ ،‬مثل استخدامها كشرط مع جملة ‪ if‬كما سنرى‬ ‫الح ًقا‪:‬‬ ‫;‪result = left op right‬‬ ‫يمثل ‪ op‬نوع العملية املنطقية املُراد استخدامها ويمثل كل من ‪ left‬و ‪ right‬القيمتني )أو املتغيرين‬ ‫أو الثابتني( اللذين سيتم تنفيذ العملية ‪ op‬عليهما‪.‬وستكون نتيجة العمليات املنطقية هي قيمة من‬ ‫نوع ‪ ،boolean‬أي أن ناتج املقارنة سيكون ‪ true‬أو ‪.false‬‬ ‫أما بالنسبة للعملية املتبقية‪ ،‬أي العملية الثالثة‪ ،‬فهي تكتب بالصيغة التالية‪:‬‬ ‫;‪result = op right‬‬ ‫يوضح الجدول التالي العمليات املنطقية‪:‬‬ ‫وظيفتها‬ ‫رمز العملية‬ ‫اسم العملية‬ ‫ستكون النتيجة ‪ true‬في حالة واحدة فقط‪ ،‬وهي إن كانت ‪ left‬و ‪ right‬كالهما ‪.true‬‬ ‫&&‬ ‫‪And‬‬ ‫ستكون النتيجة ‪ false‬في حالة واحدة فقط‪ ،‬وهي إن كانت ‪ left‬و ‪ right‬كالهما ‪.false‬‬ ‫||‬ ‫‪Or‬‬ ‫يقوم بعكس قيمة ‪.right‬في حال كانت ‪ right‬تساوي ‪ true‬فستكون النتيجة هي ‪،false‬‬ ‫!‬ ‫‪Not‬‬ ‫والعكس صحيح‪.‬‬ ‫توضح األسطر التالية استخدام العمليات السابقة برمجيًا‪:‬‬ ‫‪var‬‬ ‫;‪first = true, second = false‬‬ ‫‪var‬‬ ‫‪andResult = first && second; // false‬‬ ‫‪var‬‬ ‫‪orResult = first || second; // true‬‬ ‫‪var‬‬ ‫‪notResult = !first // false‬‬ ‫معامالت اختبار النوع ) ‪( Type test operators‬‬ ‫مثال‬ ‫وصف‬ ‫املعامل‬ ‫;‪import 'travelpoints.dart' as travel‬‬ ‫يستخدم لتغيير النوع وفي جملة ‪import‬‬ ‫‪as‬‬ ‫;”‪String value1 = "Dart Language‬‬ ‫صواب إذا كان الكائن من النوع املحدد‬ ‫‪is‬‬ ‫;)‪print(value1 is String‬‬ ‫;‪int age2 = 10‬‬ ‫صواب إذا لم يكن الكائن من النوع املحدد‬ ‫!‪is‬‬ ‫;)‪print(age2 is! int‬‬ ‫معامالت التعيني أو االسناد ) ‪( Assignment operators‬‬ ‫مثال‬ ‫وصف‬ ‫املعامل‬ ‫‪var x=3‬‬ ‫اسناد قيمة‬ ‫=‬ ‫;‪var x=10‬‬ ‫;‪x??=5‬‬ ‫اسناد قيمة اذا كان املتغير له قيمة ‪Null‬‬ ‫=??‬ ‫‪print(x); // 10‬‬ ‫‪var x=7; x+= 3; // 10‬‬ ‫اضافة للقيمة السابقة‬ ‫=‪+‬‬ ‫‪var x=7; x -= 3; // 4‬‬ ‫يطرح من القيمة الحالية‬ ‫=‪-‬‬ ‫‪var x=7; x *= 3; // 21‬‬ ‫يضرب في القيمة الحالية‬ ‫=*‬ ‫‪var x=7; x /= 3; // 2.33‬‬ ‫يقسم من القيمة الحالية‬ ‫=‪/‬‬ ‫التعبيرات الشرطية‪ :‬املعامل الثالثي ‪ternary operator‬‬ ‫مثال‬ ‫وصف‬ ‫املعامل‬ ‫;‪var x=10‬‬ ‫‪ condition ? value1 : value2‬يقوم مقام ‪if else‬‬ ‫;)'أصغر'(‪') : print‬أكبر'(‪(x>20) ? print‬‬ ‫‪ -٧‬رمز التتالي أو الترميز التعاقبي ) ‪( Cascade notation‬‬ ‫مثال‬ ‫وصف‬ ‫املعامل‬ ‫)(‪Matrix4.identity‬‬ ‫يتم تمثيل الترميز التعاقبي بنقاط مزدوجة )‪ (..‬ويسمح لك‬ ‫)‪..scale(1.0, 1.0‬‬ ‫‪..‬‬ ‫;)‪..translate(30,30‬‬ ‫بإجراء تسلسل من العمليات على نفس الكائن‬ ‫نظرة على ‪ Increment‬و ‪Decrement‬‬ ‫من العمليات املتكررة أثناء البرمجة‪ ،‬عملية زيادة واحد على قيمة املتغير الحالية أو إنقاص واحد منها‪،‬‬ ‫وتسمى عملية الزيادة في هذه الحالة ‪ Increment‬وتُسمى عملية اإلنقاص ‪ ،Decrement‬لتوضيح‬ ‫الفكرة العامة‪ ،‬نالحظ األسطر التالية‪:‬‬ ‫;‪var number = 5‬‬ ‫‪number = number + 1; // 6‬‬ ‫‪number = number - 1; // 5‬‬ ‫في السطر الثاني‪ ،‬قمنا بزيادة واحد على قيمة ‪ ،number‬لتصبح القيمة ‪ ،6‬وهذا هو املقصود بمفهوم‬ ‫‪.Increment‬وقمنا في السطر الثالث بإنقاص واحد من قيمة ‪ ،number‬لتصبح ‪ ،5‬وهذا هو املقصود‬ ‫بمفهوم ‪.Decrement‬‬ ‫توفر لغة ‪ Dart‬طريقة ُمختصرة لتنفيذ كلتا العمليتني السابقتني‪ ،‬وذلك من خالل استخدام معامل‬ ‫الزيادة ‪ ++‬لزيادة واحد على قيمة املتغير‪ ،‬ومعامل اإلنقاص ‪ --‬إلنقاص واحد من قيمة املتغير‪،‬‬ ‫ولتوضيح الفكرة سنقوم بإعادة كتابة املثال السابق بالطريقة املُختصرة في املثال التالي‪:‬‬ ‫;‪var number = 5‬‬ ‫)‪print(number++); // number = number + 1 (increment‬‬ ‫)‪print(number--); // number = number - 1 (decrement‬‬ ‫الحظ أن ‪ number++‬تطبع ‪ ٥‬النها تطبع ثم تقوم بالزيادة‬ ‫ولكن لو أبدلناها بـ ‪ ++number‬فانها تطبع ‪ ٦‬النها تزيد ثم تطبع‬ ‫وباملثل النقصان‬ ‫أخذ املدخالت من املستخدم في دارت‪:‬‬ ‫ألخذ قيمة نصية‪:‬‬ ‫;)"‪print("Enter name:‬‬ ‫;)(‪var myname = stdin.readLineSync‬‬ ‫;)”}‪print("The entered name is ${myname‬‬ ‫ألخذ قيمة عددية‪:‬‬ ‫;)"‪print("Enter number:‬‬ ‫;)!)(‪var number = int.parse(stdin.readLineSync‬‬ ‫)"}‪print("The entered number is ${number + 5‬‬ ‫;‬ ‫الجمل الشرطية‬ ‫الشروط ‪Conditions‬‬ ‫عند القيام بكتابة برنامج ستواجه عدد من الحاالت التي تريد فيها تنفيذ أوامر معينة عند تحقق شرط‬ ‫محدد‪ ،‬أي أنك ال تريد تنفيذ تلك األوامر بشكل مباشر‪ ،‬بل تريد أن يتم تنفيذها ”فقط” عند تحقق شرط أو‬ ‫مجموعة من الشروط‪ ،‬ولتوضيح الفكرة افترض أنك تريد تنفيذ مجموعة من األوامر في حال كان عمر‬ ‫الطالب أكبر من ‪ 20‬وتريد تنفيذ أوامر أخرى في حال لم يكن كذلك‪ ،‬هنا سنكون بحاجة إلى استخدام‬ ‫ما يُسمى بالشروط ‪ Conditions‬لنتمكن من تحقيق هذا الغرض‪.‬‬ ‫نظرة على ‪if statement‬‬ ‫أحد الطرق التي يمكنك استخدامها لربط األوامر بالشروط هي استخدام ُجملة ‪ ،if‬ببساطة‪ ،‬كل ما‬ ‫ستقوم به هو ربط مجموعة من األوامر “بشرط أو بمجموعة من الشروط”‪ ،‬وعندها لن يتم تنفيذ تلك األوامر‬ ‫إال إذا تحقق ذلك الشرط أو تلك الشروط‪ ،‬ولفهم الفكرة األساسية الحظ الشكل العام لجملة ‪ if‬في‬ ‫األسطر التالية‪:‬‬ ‫{)‪if(condition‬‬ ‫‪statement1‬‬ ‫‪statement2‬‬ ‫‪...‬‬ ‫‪statementN‬‬ ‫}‬ ‫سيتم تنفيذ جميع األوامر املوجودة بني األقواس }{‪ ،‬واملشار إليها هنا بكلمة ‪ statement‬فقط عندما‬ ‫يتحقق الشرط أو مجموعة الشروط التي أُشير لها بكلمة ‪ ،condition‬أي أن جميع األوامر املوجودة‬ ‫بداخل جملة ‪ if‬هي أوامر لن يتم تنفيذها حتى يتحقق الشرط ‪) condition‬أي تكون‬ ‫نتيجته ‪ ،(true‬عدا ذلك سيتم تجاوزها‪ ،‬وتوضح األسطر التالية مثال على استخدام جملة ‪ if‬في‬ ‫‪:Dart‬‬ ‫;‪var age = 25‬‬ ‫{)‪if(age > 18‬‬ ‫;)"‪print("You are an adult‬‬ ‫}‬ ‫في هذا املثال‪ ،‬ستتم طباعة الرسالة في حالة واحدة فقط‪ ،‬وهي أن يكون ‪ age‬أكبر من ‪ ،18‬وبما أن‬ ‫الشرط تحقق ً‬ ‫فعال في هذه الحالة‪ ،‬فستتم طباعة الرسالة‪.‬‬ ‫‪:‬املخرجات‬ ‫‪You are an adult‬‬ ‫استخدام ‪ else‬مع ‪if‬‬ ‫في حال عدم تحقق الشرط في ‪ if statement‬سيتم تجاهل األوامر‪ ،‬ولكن ماذا لو أردنا تنفيذ‬ ‫أوامر برمجية أخرى عند “عدم تحقق الشرط” داخل ‪ ،if statement‬عندها يمكننا‬ ‫استخدام ‪ else‬لهذا الغرض‪ ،‬ولتوضيح الفكرة دعنا نُعيد كتابة املثال السابق ليحتوي على ‪ else‬على‬ ‫النحو املوضح في األسطر التالية‪:‬‬ ‫;‪var age = 17‬‬ ‫{)‪if(age > 18‬‬ ‫;)"‪print("You are an adult‬‬ ‫}‬ ‫{‪else‬‬ ‫;)'‪print('You are a minor‬‬ ‫}‬ ‫في هذه الحالة ستتم طباعة الرسالة املوجودة في جزء ‪ ،else‬ألن الشرط في ‪ if‬لم يتحقق‪ ،‬وذلك لكون‬ ‫العمر املخزن في املتغير ‪ age‬أقل من ‪.18‬‬ ‫املخرجات‪You are a minor :‬‬ ‫اختبار أكثر من شرط باستخدام ‪else if‬‬ ‫هناك حاالت برمجية نحتاج فيها إلى اختبار أكثر من مسار وليس مسارين فقط مثل ‪.if-else‬لتوضيح‬ ‫الفكرة‪ ،‬دعنا ننظر إلى إشارة املرور كمثال‪ ،‬ففيها سنجد أن لدينا ثالث خيارات أحمر‪ ،‬أصفر‪ ،‬أخضر‪.‬‬ ‫في كل حالة أو لون من ألوان اإلشارة سيكون لدينا أمر أو أكثر سيتبعه أصحاب املركبات‪.‬ففي حالة‬ ‫األحمر‪ ،‬قف‪ ،‬وفي حالة األصفر‪ ،‬خفض السرعة‪ ،‬وفي حالة األخضر‪ ،‬سر‪.‬‬ ‫يمكنك استخدام ‪ else if‬مع جملة ‪ if‬في حال كان لديك أكثر من شرط‪ ،‬ولتوضيح الفكرة دعنا نقوم بتنفيذ‬ ‫مثال إشارة املرور على النحو املوضح في األسطر التالية‪:‬‬ ‫;"‪var trafficLight = "red‬‬ ‫{)"‪if(trafficLight == "green‬‬ ‫};)"!‪print(“Go‬‬ ‫{)"‪else if(trafficLight == "yellow‬‬ ‫};)”‪print("Slow Down‬‬ ‫{‪else‬‬ ‫;)"!‪print("Stop‬‬ ‫}‬ ‫املخرجات‪stop! :‬‬ ‫ببساطة‪ ،‬سيتم اختبار الشرط األول‪ ،‬إذا لم يتحقق‪ ،‬سيتم االنتقال للشرط الثاني‪ ،‬إذا لم يتحقق‪ ،‬سيتم‬ ‫اإلنتقال لجزء ‪ else‬وتنفيذه بشكل مباشر كونه غير مرتبط بشرط‪ ،‬الحظ كيف تم استخدام ‪ else if‬والتي‬ ‫سيتم التحقق منها في حال عدم تحقق الشرط املوجود في ‪.if‬‬ ‫استخدام ‪Ternary Operator‬‬ ‫باستخدام ‪ Ternary Operator‬يمكننا كتابة عبارة ‪ if else‬بشكل مختصر وفي سطر واحد فقط الحظ‬ ‫املثال التالي‪:‬‬ ‫;‪var age = 17‬‬ ‫‪(age > 18) ? print("You are an adult") : print("You are a‬‬ ‫;)"‪minor‬‬ ‫املخرجات‪:‬‬ ‫‪You are a minor‬‬ ‫ببساطة تكون العبارة املكتوبة بعد ? بمثابة إذا تم تنفيذ الشرط‪ ،‬والعبارة املكتوبة بعد ‪ :‬بمثابة عبارة‬ ‫‪ else‬في ‪.if else‬‬ ‫نظرة على ‪Switch statement‬‬ ‫تستخدم ‪ switch‬عند الحاجة التخاذ قرار في حال وجود احتماالت متعددة‪ ،‬تستقبل ‪ switch‬قيمة‬ ‫وتقارنها بعدد من االحتماالت‪ ،‬وتنفذ مجموعة التعليمات البرمجية التابعة للحالة ‪ case‬املتوافقة‪،‬‬ ‫ولتوضيح الفكرة الحظ املثال التالي‪:‬‬ ‫;"‪var trafficLight = "red‬‬ ‫{ )‪switch (trafficLight‬‬ ‫‪case "green":‬‬ ‫;)"!‪print("Go‬‬ ‫;‪break‬‬ ‫‪case "yellow":‬‬ ‫;)"‪print("Slow Down‬‬ ‫;‪break‬‬ ‫‪case "red":‬‬ ‫;)"!‪print("Stop‬‬ ‫;‪break‬‬ ‫‪default:‬‬ ‫;)"‪print("Invalid light‬‬ ‫}‬ ‫املخرجات‪Stop! :‬‬ ‫في املثال السابق قمنا بإنشاء متغير ‪ traf cLight‬وأسندنا إليه القيمة ‪ ،red‬ثم قمنا باستخدام‬ ‫‪ switch‬وأسندنا إليها قيمة ‪ traf cLight‬لتتم عملية املقارنة عليها وتنفيذ مجموعة التعليمات البرمجية‬ ‫التابعة للحالة املطابقة لها حتى تصل إلى ‪ break‬والتي بدورها سوف تنهي عملية ‪) switch‬إن لم‬ ‫تكن ‪ break‬موجودة فإن البرنامج سوف يستمر في تنفيذ األوامر إلى نهاية ‪switch‬‬ ‫‪.(statement‬‬ ‫‪fi‬‬ ‫‪fi‬‬ ‫استخدام ‪ default‬للتعامل مع الحاالت الغير متوقعة‬ ‫تستخدم ‪ default‬في نهاية ‪ switch‬وتقوم بالتعامل مع الحاالت الغير متوقعة مما يعني أنها تنفذ في‬ ‫حال لم تتحقق أي ‪ case‬من الحاالت السابقة‪ ،‬لفهم هذا األمر الحظ املثال التالي‪:‬‬ ‫;"‪var trafficLight = "blue‬‬ ‫{ )‪switch (trafficLight‬‬ ‫‪case "green":‬‬ ‫;)"!‪print("Go‬‬ ‫;‪break‬‬ ‫‪case "yellow":‬‬ ‫;)"‪print("Slow Down‬‬ ‫;‪break‬‬ ‫‪case "red":‬‬ ‫;)"!‪print("Stop‬‬ ‫;‪break‬‬ ‫‪default:‬‬ ‫;)"‪print("Invalid light‬‬ ‫}‬ ‫املخرجات‪:‬‬ ‫‪Invalid light‬‬ ‫في املثال السابق قمنا بتعديل قيمة املتغير ‪ traf cLight‬وأسندنا إليه القيمة ‪ ،blue‬الحظ أنه في عملية‬ ‫املقارنة لم تتطابق القيمة املسندة مع أي ‪ case‬وبالتالي تم تنفيذ مجموعة التعليمات التابعة للحالة‬ ‫االفتراضية ‪.default‬‬ ‫بدال من ‪ if‬بل إنه قد يفضل في بعض الحاالت‬ ‫مالحظة‪ :‬يمكنك استخدام ‪ً switch‬‬ ‫استخدام ‪ switch‬حيث أنها تستخدم ملقارنة قيمة متغير واحد فقط بعدة حاالت‪.‬‬ ‫الفرق بني ‪ switch statement‬و ‪if statement‬‬ ‫تستقبل ‪ switch statement‬قيمة ‪ value‬ويتم تنفيذ األوامر التابعة للحالة ‪ case‬املتطابقة‪.‬‬ ‫ ‬ ‫تستقبل ‪ if statement‬شرط ‪ condition‬ويتم تنفيذ األوامر التابعة للشرط املتحقق‪.‬‬ ‫ ‬ ‫‪fi‬‬ ‫التكرار | ‪Loop‬‬ ‫التكرار ‪Loop‬‬ ‫تكرار العملية باستخدام ‪for‬‬ ‫قد نحتاج في بعض الحاالت إلى تكرار مجموعة من التعليمات البرمجية لعدد من املرات‪ ،20 ،10 ،‬أو‬ ‫ً‬ ‫فبدال من تكرار كتابة التعليمات البرمجية يمكننا استخدام ‪for.‬‬ ‫حتى ‪ 100‬مرة أو أكثر‪،‬‬ ‫;‪var len = 5‬‬ ‫{)‪for(var i = 0; i < len; i++‬‬ ‫;)‪print(i‬‬ ‫}‬ ‫املخرجات‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫تكرار العملية باستخدام ‪while‬‬ ‫يمكننا تكرار تنفيذ أمر برمجي وف ًقا لشرط معني باستخدام ‪ while‬على النحو التالي‪:‬‬ ‫كتابة املتغير الذي سيتم قياس تحقق الشرط على قيمته‪.‬‬ ‫ ‬ ‫استخدام ‪ while‬لكتابة الشرط الذي سيتم تكرار تنفيذ األمر حال تحققه وهو أن تكون قيمة املتغير‬ ‫ ‬ ‫‪ number‬أكبر من أو تساوي ‪.1‬‬ ‫األوامر التي سيتم تكرار تنفيذها حال تحقق الشرط هي كالتالي‪:‬‬ ‫ ‬ ‫‪.1‬طباعة قيمة املتغير ‪.number‬‬ ‫‪.2‬طرح ‪ 1‬من املتغير ‪.number‬‬ ‫;‪var number = 5‬‬ ‫{)‪while(number >= 1‬‬ ‫;)‪print(number‬‬ ‫;‪number--‬‬ ‫}‬ ‫املخرجات‬ ‫‪5‬‬ ‫‪4‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫تكرار العملية باستخدام ‪do-while‬‬ ‫يمكننا تكرار تنفيذ أمر برمجي وف ًقا لشرط معني باستخدام ‪ do-while‬على النحو التالي‪:‬‬ ‫تختلف ‪ do-while‬عن ‪ while‬بحيث أنها تنفذ األمر املوجود بداخلها مرة واحدة بغض النظر عن الشرط‪.‬‬ ‫ ‬ ‫في املثال التالي سوف يكون الشرط‪ number >=1‬ولكن قيمة ‪ number‬تساوي ‪ ١-‬حيث أنه لن يتم‬ ‫تنفيذ الشرط‪.‬‬ ‫;‪var number = -1‬‬ ‫{‪do‬‬ ‫;)‪print(number‬‬ ‫;‪number--‬‬ ‫;)‪}while(number >= 1‬‬ ‫املخرجات‬ ‫‪-1‬‬ ‫إيقاف التكرار واستخدام ‪break‬‬ ‫تقوم ‪ break‬بإنهاء عملية التكرار بشكل كامل‪ ،‬ويوضح املثال التالي كيفية الخروج من ‪ for‬عندما‬ ‫نحصل على الرقم الزوجي األول‪:‬‬ ‫{)‪for(var i = 1; i < 10; i++‬‬ ‫{)‪if(i % 2 == 0‬‬ ‫;‪break‬‬ ‫}‬ ‫;)‪print(i‬‬ ‫}‬ ‫تجاوز خطوة من التكرار واستخدام ‪continue‬‬ ‫تقوم ‪ continue‬بإيقاف التعليمات البرمجية واالنتقال لتكرار التعليمات البرمجية للعنصر التالي‪،‬‬ ‫ويوضـح املثـال كيفية استخدام عبـارة ‪ continue‬لطباعـة األرقام الفرديـة فقط ‪:‬‬ ‫{)‪for(var i = 1; i < 10; i++‬‬ ‫{)‪if(i % 2 == 0‬‬ ‫;‪continue‬‬ ‫}‬ ‫;)‪print(i‬‬ ‫}‬ ‫القوائم ‪List‬‬ ‫فكر في القوائم على أنها متغير أو ثابت يتكون من مجموعة من القيم‪ ،‬ويمكن الوصول لكل خانة أو قيمة‬ ‫من تلك القيم من خالل رقم يدعى ‪ index‬وهو ترتيب القيمة بني القيم‪.‬‬ ‫لتعريف مصفوفة في ‪ Dart‬سنستخدم األقواس املربعة ][ وسنقوم بوضع القيم بداخلها‪ ،‬ونفصل بني كل‬ ‫قيمة واألخرى بفاصلة ‪ ،,‬ولتوضيح الفكرة دعنا نقوم بتعريف مصفوفة تحتوي على ثالثة ألوان‪،‬‬ ‫األحمر ‪ red‬واألخضر ‪ green‬واألزرق ‪ blue‬كما هو موضح في السطر التالي‪:‬‬ ‫;]"‪var colors = ["red", "green", "blue‬‬ ‫كذلك يمكننا تعريف القائمة باستخدام نوع القائمة كما هو موضح في التالي‪:‬‬ ‫‪// Integer List‬‬ ‫;]‪List ages = [10, 30, 23‬‬ ‫‪// String List‬‬ ‫;]"‪List names = ["Raj", "John", "Rocky‬‬ ‫‪// Mixed List‬‬ ‫;]‪var mixed = [10, "John", 18.8‬‬ ‫الوصول لقيمة من خالل الرقم ‪Index‬‬ ‫ذكرنا ساب ًقا أن املصفوفة تحتوي على أكثر من قيمة‪ ،‬وأن كل قيمة ُمرتبطة برقم يُسمى ‪ ،index‬والذي‬ ‫يساعدنا على الوصول إلى تلك القيمة سواء لجلبها أو لتغييرها إلى قيمة أخرى‪ ،‬يبدأ ترقيم خانات وقيم‬ ‫املصفوفة من اليسار لليمني‪ ،‬ويبدأ العد من ‪ index‬رقم ‪ ،0‬ولتوضيح الفكرة سنقوم بوضع‬ ‫رقم ‪ index‬فوق كل خانة أو قيمة من قيم املصفوفة كما هو موضح في املثال التالي‪:‬‬ ‫‪//index:‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫;]"‪var colors = ["red", "green", "blue‬‬ ‫مثال‪ ،‬فسنجد أن رقم ‪ index‬الخاص بها هو ‪ ،1‬لذلك‬‫اآلن لو أردنا الوصول للقيمة ‪ green‬لطباعتها ً‬ ‫سنستخدم اسم املصفوفة ‪ colors‬مع الرقم ‪ 1‬للوصول إليها على النحو التالي‪:‬‬ ‫;)]‪print(colors[1‬‬ ‫أعاله‪ ،‬قمنا بطباعة قيمة املتغير ‪ colors‬املوجود في ‪ index‬رقم ‪.1‬‬ ‫‪:‬املخرج‬ ‫‪green‬‬ ‫الحظ أنها تمت طباعة القيمة ‪ green‬وذلك ألن الرقم ‪ index‬املرتبط بقيمة ‪ green‬يساوي ‪.1‬‬ ‫تعديل قيمة من قيم املصفوفة‬ ‫عند رغبتنا في تعديل أو تحديث قيمة معينة من قيم املصفوفة سنقوم باستخدام الرقم ‪ index‬بنفس‬ ‫الطريقة السابقة للوصول إلى املكان الذي نُريد وضع القيمة فيه‪ ،‬على سبيل املثال لو أردنا تعديل قيمة‬ ‫اللون ‪ blue‬لتصبح ‪ black‬في مصفوفة ‪ colors‬السابقة‪ ،‬عندها سنقوم بكتابة السطر التالي‪:‬‬ ‫;"‪colors = "black‬‬ ‫عدد عناصر املصفوفة واستخدام ‪length‬‬ ‫يمكننا معرفة عدد العناصر املوجودة داخل مصفوفة معينة عن طريق استخدام خاصية ‪ lengt‬ولتوضيح‬ ‫الفكرة نالحظ املثال التالي‪:‬‬ ‫;]"‪var colors = ["red", "green", "black‬‬ ‫;)‪print(colors.length‬‬ ‫‪:‬املخرجات‬ ‫‪3‬‬ ‫إضافة عنصر جديد للمصفوفة‬ ‫يمكنك إضافة عنصر جديد إلى املصفوفة بعدة طرق ومنها استخدام دالة ‪ ،add‬لتوضيح الفكرة نفرض‬ ‫أننا نريد إضافة اللون األبيض ملصفوفة ‪ colors‬السابقة‪ ،‬عندها سنقوم باستخدام ‪ add‬على النحو‬ ‫املوضح في السطر التالي‪:‬‬ ‫;)"‪colors.add("white‬‬ ‫قراءة عناصر القائمة‬ ‫يمكنك قراءة جميع العناصر املوجودة بداخل القائمة عن طريق استخدام ‪ for-loop‬على النحو املوضح‬ ‫في السطر التالي‪:‬‬ ‫;]"‪var colors = ["red", "green", "black", "white‬‬ ‫{)‪for (var color in colors‬‬ ‫;)‪print(color‬‬ ‫}‬ ‫حيث أن املتغير ‪ color‬سوف يحصل على قيمة من القيم املوجودة في القائمة في كل تكرار‪.‬‬ ‫املخرجات‬ ‫‪red‬‬ ‫‪green‬‬ ‫‪black‬‬ ‫‪white‬‬ ‫ويمكن استخدام حلقة ‪ forEach‬مع القوائم‪:‬‬ ‫;]'‪List footballplayers=['Ronaldo','Messi','Neymar‬‬ ‫;))‪footballplayers.forEach( (names)=>print(names‬‬ ‫املخرجات‬ ‫‪Ronaldo‬‬ ‫‪Messi‬‬ ‫‪Neymar‬‬ ‫ويمكن طباعة ‪ index‬حلقة ‪ forEach‬مع القوائم كالتالي‪:‬‬ ‫;]'‪List f=['Ronaldo','Messi','Neymar‬‬ ‫‪f.asMap().forEach((index, value) => print("$value index is‬‬ ‫;))"‪$index‬‬ ‫املخرجات‬ ‫‪Ronaldo index is 0‬‬ ‫‪Messi index is 1‬‬ ‫‪Neymar index is 2‬‬ ‫أنواع القوائم‪:‬‬ ‫‪.1‬ثابتة الطول ‪xed length list‬‬ ‫هنا يتم انشاء قائمة ثابتة الطول من النوع ‪ int‬عدد عناصرها ‪ 5‬وقيمة كل عنصر صفر‬ ‫{ )(‪void main‬‬ ‫;)‪var list = List.filled(5,0‬‬ ‫;)‪print(list‬‬ ‫}‬ ‫املخرجات‬ ‫]‪[0, 0, 0, 0, 0‬‬ ‫مالحظة‪ :‬ال يمكنك إضافة عنصر جديد إلى قائمة ثابتة الطول ‪ ،‬ولكن يمكنك تغيير قيم القائمة‪.‬‬ ‫‪.2‬قابلة للنمو أو الزيادة ‪ growable list‬وهي األكثر استخدا ًما‬ ‫تسمى القائمة بدون طول محدد قائمة قابلة للنمو‪.‬ويمكن تغيير طولها في وقت التشغيل‪.‬‬ ‫;]‪var list1 = [210,21,22,33,44,55‬‬ ‫;)‪print(list1‬‬ ‫‪fi‬‬ :‫الحصول على فهرس من القيمة‬ var list = [210, 21, 22, 33, 44, 55]; print(list.indexOf(22)); print(list.indexOf(33)); ‫املخرجات‬ 2 3 Mutable And Immutable List ‫قائمة متغيرة وثابتة‬ ‫ وتعني القائمة غير القابلة للتغيير أنه ال‬، ‫تعني القائمة القابلة للتغيير أنه يمكن التغيير بعد اإلعالن‬ ‫يمكنهم التغيير بعد اإلعالن‬ List names=["Raj","John","Rocky"]; // Mutable List names = "Bill"; // possible names = "Elon"; // possible const List names=["Raj","John"];//Immutable List names = "Bill"; // not possible names = "Elon"; // not possible List Properties var x = [100, 2, 6, 20, 50]; var y=["ali"]; print(x.first); // ‫ﯾﻌﯿﺪ ﻟﻨﺎ اﻟﻌﻨﺼﺮ اﻷول‬ print(x.last);// ‫ﯾﻌﯿﺪ اﻟﻌﻨﺼﺮ اﻷﺧﯿﺮ‬ print(x.isEmpty);// ‫ھﻞ اﻟﻘﺎﺋﻤﺔ ﻓﺎرﻏﺔ؟‬ print(x.isNotEmpty);// ‫ھﻞ اﻟﻘﺎﺋﻤﺔ ﻟﯿﺴﺖ ﻓﺎرﻏﺔ؟‬ print(x.length);// ‫ﻃﻮل اﻟﻘﺎﺋﻤﺔ‬ print(x.reversed);// ‫ﻋﻜﺲ ﻋﻨﺎﺻﺮ اﻟﻘﺎﺋﻤﺔ‬ print(y.single);// ‫اذا ﻛﺎﻧﺖ اﻟﻘﺎﺋﻤﺔ ﺗﺤﻮي ﻋﻨﺼﺮ واﺣﺪ ﻓﯿﻌﯿﺪه‬ print(x.isEven);//‫ھﻞ اﻟﻌﺪد زوﺟﻲ‬ print(x.isOdd);//‫ھﻞ اﻟﻌﺪد ﻓﺮدي‬ ‫املخرجات‬ 100 50 false true 5 (50, 20, 6, 2, 100) Ali true false ‫إضافة عنصر إلى القائمة‬ ‫الوصف‬ ‫الطريقة‬ ‫أضف عنصرا واحدا في كل مرة وأرجع كائن القائمة املعدل‪.‬‬ ‫)(‪add‬‬ ‫أدخل القيم املتعددة في القائمة املحددة‪ ،‬ويتم فصل كل قيمة بفواصل وإرفاقها‬ ‫)(‪addAll‬‬ ‫بقوس مربع )][(‪.‬‬ ‫إلدراج عنصر في فهرس محدد‪.‬‬ ‫)(‪insert‬‬ ‫أدخل القيم املتعددة في موضع الفهرس املحدد‪.‬‬ ‫)(‪insertAll‬‬ ‫;]‪var evenList = [2,4,6,8,10‬‬ ‫;)‪print(evenList‬‬ ‫;)‪evenList.add(12‬‬ ‫;)‪print(evenList‬‬ ‫;)]‪evenList.addAll([14, 16, 18‬‬ ‫;)‪print(evenList‬‬ ‫;]‪List myList = [3, 4, 2, 5‬‬ ‫;)‪print(myList‬‬ ‫;)‪myList.insert(2, 15‬‬ ‫;)‪print(myList‬‬ ‫;)]‪myList.insertAll(1, [6, 7, 10, 9‬‬ ‫;)‪print(myList‬‬ ‫املخرجات‬ ‫‪[2,‬‬ ‫‪4,‬‬ ‫]‪6, 8, 10‬‬ ‫‪[2,‬‬ ‫‪4,‬‬ ‫]‪6, 8, 10, 12‬‬ ‫‪[2,‬‬ ‫‪4,‬‬ ‫]‪6, 8, 10, 12, 14, 16, 18‬‬ ‫‪[3,‬‬ ‫‪4,‬‬ ‫]‪2, 5‬‬ ‫‪[3,‬‬ ‫‪4,‬‬ ‫]‪15, 2, 5‬‬ ‫‪[3,‬‬ ‫‪6,‬‬ ‫]‪7, 10, 9, 4, 15, 2, 5‬‬ Replace Range Of List ‫استبدال نطاق القائمة‬ var l = [10, 15, 20, 25, 30]; print("before replace: ${l}"); l.replaceRange(0, 4, [5, 6, 7, 8]); print("after replace :${l}"); ‫املخرجات‬ before replace: [10, 15, 20, 25, 30] after replace :[5, 6, 7, 8, 30] ‫إزالة عناصر القائمة‬ ‫الوصف‬ ‫الطريقة‬.‫عنصرا واح ًدا في كل مرة من القائمة املحددة‬ ً ‫ يزيل‬remove().‫عنصرا من موضع الفهرس املحدد ويعيده‬ ً ‫ يزيل‬removeAt().‫ إزالة العنصر األخير من القائمة املحددة‬removeLast().‫ يزيل العنصر داخل النطاق املحدد‬removeRange() var z = [99,5,10, 20, 30, 40, 50]; z.remove(30); z.removeAt(0); z.removeLast(); z.removeRange(0, 3); print(z); ‫املخرجات‬ :‫دمج قائمتني أو أكثر باستخدام صيغة االنتشار‬ List names = ["Raj", "John", "Rocky"]; List names2 = ["Mike", "Subash", "Mark"]; List allNames = [...names,...names2]; print(allNames); ‫املخرجات‬ [Raj, John, Rocky, Mike, Subash, Mark] ‫الشروط في القائمة‬ var b=true; var c=[1,2,3,if (b) 50]; print(c); ‫املخرجات‬ [1, 2, 3, 50] ‫ مع القائمة‬where ‫استخدام‬ List numbers = [2,4,6,8,10,11,12,13,14]; List even =numbers.where((i)=>i.isEven).toList(); print(even); ‫املخرجات‬ [2, 4, 6, 8, 10, 12, 14]

Use Quizgecko on...
Browser
Browser