dart2-1-27 (2).pdf
Document Details
Uploaded by DazzlingFairy
Technical College of Telecommunications and Information
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]