لغة Dart هي لغة برمجة تُستخدم في تطوير تطبيقات الويب والتطبيقات المتنقلة، وهي تحتوي على مجموعة من العمليات الرياضية والمنطقية التي يمكن استخدامها لتنفيذ العديد من العمليات في البرنامج. وفيما يلي شرح لبعض عمليات الرياضيات والمنطقية الأساسية في Dart:
الجمع (+): تُستخدم لإجراء عملية الجمع بين الأعداد.
الطرح (-): تُستخدم لإجراء عملية الطرح بين الأعداد.
الضرب (*): تُستخدم لإجراء عملية الضرب بين الأعداد.
القسمة (/): تُستخدم لإجراء عملية القسمة بين الأعداد.
مقارنة (==): تُستخدم للتحقق من مساواة القيم.
أكبر من (>): تُستخدم للتحقق من أن قيمة محددة أكبر من قيمة أخرى.
أصغر من (<): تُستخدم للتحقق من أن قيمة محددة أصغر من قيمة أخرى.
أكبر من أو يساوي (>=): تُستخدم للتحقق من أن قيمة محددة أكبر من أو تساوي قيمة أخرى.
أصغر من أو يساوي (<=): تُستخدم للتحقق من أن قيمة محددة أصغر من أو تساوي قيمة أخرى.
غير مساوي (!=): تُستخدم للتحقق من عدم المساواة بين القيم.
الواقع و (&&): تُستخدم للتحقق من صحة اثنين من التعبيرات المنطقية.
الأو (||): تُستخدم للتحقق من صحة أحد التعبيرين المنطقيين.
ليس (!): تُستخدم لعكس قيمة التعبير المنطقي.
هذه بعض العمليات الأساسية في لغة Dart. يُمكن استخدام هذه العمليات لتنفيذ العديد من العمليات الحسابية والمنطقية في برامجك.
المعاملات الحسابية في لغة البرمجة Dart تتيح لك إجراء العمليات الحسابية الأساسية مثل الجمع، الطرح، الضرب، والقسمة على الأرقام.
هذه المعاملات تُستخدم بشكل واسع في البرمجة لأغراض مختلفة مثل حساب النتائج، تطبيق الصيغ الرياضية، وغيرها. دعنا نلقي نظرة على بعض الأمثلة للتوضيح:
يُستخدم لجمع قيمتين معًا.
int a = 5; int b = 3; int sum = a + b; print("المجموع: $sum"); // الناتج: 8
يُستخدم لطرح قيمة من قيمة أخرى.
int x = 10; int y = 7; int difference = x - y; print("الفارق: $difference"); // الناتج: 3
يُستخدم لضرب قيمتين معًا.
double length = 4.5; double width = 2.5; double area = length * width; print("مساحة المستطيل: $area"); // الناتج: 11.25
يُستخدم لقسمة قيمة على قيمة أخرى.
double dividend = 10; double divisor = 2; double quotient = dividend / divisor; print("الناتج: $quotient"); // الناتج: 5.0
هذه هي بعض الأمثلة البسيطة لاستخدام المعاملات الحسابية في لغة Dart. تُستخدم هذه العمليات بشكل شائع في البرمجة لأنها تمثل العمليات الرياضية الأساسية التي يُحتاج إليها في كل تطبيق برمجي.
بالطبع، سنقوم بإنشاء تطبيق بسيط في Dart يستخدم المعاملات الحسابية لحساب معلومات بسيطة. سنقوم بكتابة برنامج يطلب من المستخدم إدخال قيمتين، ثم يقوم بإجراء عمليات حسابية عليهما ويظهر النتيجة.
ها هو الكود:
import 'dart:io'; void main() { // طلب من المستخدم إدخال الأرقام stdout.write('الرجاء إدخال الرقم الأول: '); double number1 = double.parse(stdin.readLineSync()!); stdout.write('الرجاء إدخال الرقم الثاني: '); double number2 = double.parse(stdin.readLineSync()!); // العمليات الحسابية double sum = number1 + number2; double difference = number1 - number2; double product = number1 * number2; double quotient = number1 / number2; // طباعة النتائج print('المجموع: $sum'); print('الفارق: $difference'); print('الضرب: $product'); print('القسمة: $quotient'); }
في هذا البرنامج، نقوم بطلب من المستخدم إدخال قيمتين (number1 وnumber2)، ثم نستخدم المعاملات الحسابية لحساب المجموع
(sum)، الفارق (difference)، الضرب (product)، والقسمة (quotient) بين هاتين القيمتين.
عند تشغيل البرنامج، سيطلب من المستخدم إدخال الأرقام، ثم سيقوم بحساب النتائج وطباعتها على الشاشة.
يُمكنك تشغيل هذا البرنامج في بيئة تطوير Dart مثل IntelliJ IDEA أو Visual Studio Code
باستخدام ملحق Dart وتشغيل البرنامج من خلال الضغط على زر التشغيل.
العمليات المنطقية في لغة البرمجة Dart تُستخدم لتحقق الشروط والمقارنات بين القيم لاتخاذ القرارات في البرنامج. هذه العمليات تعمل على القيم المنطقية (true أو false). هناك عدة عمليات منطقية تستخدم بشكل شائع في برمجة التطبيقات.
هذه العملية تُستخدم للتحقق من مساواة القيم.
int x = 5; int y = 5; print(x == y); // true
في هذا المثال، يتم مقارنة قيمة x مع قيمة y، ونتيجة التحقق هي true لأنهما متساويتان.
تُستخدم للتحقق من أن قيمة محددة أكبر من قيمة أخرى.
double a = 7.5; double b = 3.8; print(a > b); // true
في هذا المثال، تُطبع true لأن قيمة a أكبر من قيمة b.
تُستخدم للتحقق من أن قيمة محددة أصغر من قيمة أخرى.
int num1 = 10; int num2 = 15; print(num1 < num2); // true
هنا، سيتم طباعة true لأن num1 أصغر من num2.
تُستخدم للتحقق من أن قيمة محددة أكبر من أو تساوي قيمة أخرى.
int p = 20; int q = 20; print(p >= q); // true
في هذا المثال، ستُطبع true لأن القيمتين متساويتان.
تُستخدم للتحقق من أن قيمة محددة أصغر من أو تساوي قيمة أخرى.
int m = 25; int n = 30; print(m <= n); // true
في هذا المثال، ستُطبع true لأن قيمة m أصغر من قيمة n.
تُستخدم للتحقق من عدم المساواة بين القيم.
double price1 = 15.5; double price2 = 20.0; print(price1 != price2); // true
ستُطبع true لأن قيمتي price1 و price2 غير متساويتين.
هذه هي بعض العمليات المنطقية الشائعة في Dart مع الأمثلة التوضيحية لكل منها. تستخدم هذه العمليات بشكل واسع في بناء شروط البرمجة واتخاذ القرارات البرمجية بناءً على الشروط المحددة.
بالطبع، دعني أقدم لك تطبيقًا بسيطًا يستخدم المعاملات المقارنة في لغة Dart.
سنكتب برنامجًا يطلب من المستخدم إدخال عمره، ثم يتحقق مما إذا كان قادرًا على التصويت أو لا استنادًا إلى الشروط القانونية للتصويت في بلده.
ها هو الكود مع الشرح:
import 'dart:io'; void main() { // طلب من المستخدم إدخال عمره stdout.write('ما هو عمرك؟ '); int age = int.parse(stdin.readLineSync()!); // التحقق مما إذا كان العمر يسمح بالتصويت if (age >= 18) { print('لديك الحق في التصويت.'); } else { print('عذرًا، لا يمكنك التصويت بسبب عدم بلوغك للسن القانوني.'); } }
في هذا البرنامج، نقوم بطلب من المستخدم إدخال عمره. بعد ذلك، نستخدم المعاملات المنطقية للتحقق من ما إذا كان العمر أكبر من أو يساوي 18 أم لا.
إذا كان العمر أكبر من أو يساوي 18، فإننا نقول للمستخدم أنه لديه الحق في التصويت، وإلا فإننا نقول له أنه لا يمكنه التصويت بسبب عدم بلوغه للسن القانوني.
يمكنك تشغيل هذا البرنامج في بيئة تطوير Dart مثل IntelliJ IDEA أو Visual Studio Code
باستخدام ملحق Dart وتشغيل البرنامج من خلال الضغط على زر التشغيل.
العمليات المنطقية تُستخدم في لغة البرمجة Dart لتحقق الشروط المعقدة واتخاذ القرارات البرمجية استنادًا إلى قيم منطقية (true أو
false). هذه العمليات تساعد في بناء تسلسلات من الشروط المتشابكة التي تحدد سير تنفيذ البرنامج. هنا بعض العمليات المنطقية الشائعة في Dart مع الأمثلة:
تُستخدم للتحقق من صحة اثنين من التعبيرات المنطقية. إذا كانت كلتا التعابير صحيحة، فإن النتيجة هي صحيحة اما اذا كان احدهما صحيحا والاخر غير صحيح فالنتيجة تكون غير صحيح .
bool isAdult = true; bool hasID = true; print(isAdult && hasID); // true
في هذا المثال، ستُطبع true لأن كل من isAdult و hasID هما true.
تُستخدم للتحقق من صحة أحد التعبيرين المنطقيين. إذا كان أحد التعابير صحيحًا على الأقل، فإن النتيجة هي صحيحة.
bool hasDiscount = false; bool isPrimeMember = true; print(hasDiscount || isPrimeMember); // true
في هذا المثال، ستُطبع true لأن isPrimeMember هو true على الرغم من أن hasDiscount هو false.
تُستخدم لعكس قيمة التعبير المنطقي. إذا كان التعبير الأصلي صحيحًا، فإن نتيجة العملية تكون غير صحيحة، والعكس صحيح أيضًا.
bool isRainy = false; print(!isRainy); // true
في هذا المثال، ستُطبع true لأن قيمة isRainy معكوسة، أي أنها تحولت من false إلى true.
هذه هي بعض العمليات اللوجيكية الشائعة في لغة Dart مع الأمثلة التوضيحية لكل منها. تستخدم هذه العمليات في بناء شروط البرمجة المعقدة واتخاذ القرارات البرمجية بناءً على شروط محددة.
سنقوم بكتابة تطبيق بسيط في Dart يستخدم العمليات اللوجيكية لتحقق شرط محدد ويقوم باتخاذ قرار بناءً على النتيجة.
سنكتب برنامجًا يسأل المستخدم عن معدل درجاته وعدد الساعات الائتمانية التي درسها، ثم يحدد ما إذا كان المستخدم مؤهلاً للتخرج أم لا باستخدام الشروط الجامعية المعتادة.
ها هو الكود مع الشرح:
import 'dart:io'; void main() { // طلب من المستخدم إدخال معدله وعدد الساعات الائتمانية stdout.write('ما هو معدلك؟ '); double gpa = double.parse(stdin.readLineSync()!); stdout.write('كم عدد الساعات الائتمانية التي درستها؟ '); int creditHours = int.parse(stdin.readLineSync()!); // التحقق مما إذا كان المستخدم مؤهلاً للتخرج if (gpa >= 2.0 && creditHours >= 120) { print('تهانينا، أنت مؤهل للتخرج!'); } else { print('عذرًا، لا تستوفي الشروط الجامعية للتخرج.'); } }
العامل الشرطي (Ternary)، المعروف أيضًا باسم العامل الشرطي المُعرَّف بثلاثة عناصر، هو نوع من العمليات الشرطية تستخدم لإتخاذ القرارات في البرمجة بناءً على شرط معين. يأتي اسم “Ternary” من حقيقة أن هذا العامل يحتوي على ثلاثة عناصر: الشرط والقيمة التي تُرجع إذا كان الشرط صحيحًا، والقيمة التي تُرجع إذا كان الشرط خاطئًا.
صيغة العامل الشرطي في البرمجة هي كالتالي:
(condition) ? value1 : value2
حيث:
condition هو الشرط الذي يتم فحصه.
value1 هو القيمة التي تُرجع إذا كان الشرط صحيحًا.
value2 هو القيمة التي تُرجع إذا كان الشرط خاطئًا.
يمكن استخدام العامل الشرطي لتعيين قيمة متغير أو إرجاع قيمة في التعبيرات، مما يجعل الشفرة أكثر قصرًا وأكثر فهمًا.
لنلقي نظرة على مثال لاستخدام العامل الشرطي:
int x = 10; int y = 5; int max = (x > y) ? x : y; print("العدد الأكبر هو: $max");
في هذا المثال، إذا كانت قيمة x أكبر من قيمة y، سيتم تعيين قيمة max إلى x. وإذا كان الشرط غير صحيح (أي أن قيمة y أكبر من
أو تساوي قيمة x)، سيتم تعيين قيمة max إلى y.
باستخدام العامل الشرطي، يمكن تعبئة عدد كبير من الشروط في تعبير واحد بسيط، مما يجعل الشفرة أقل تعقيدًا وأكثر وضوحًا.
سنقوم بكتابة تطبيق بسيط في Dart يستخدم العامل الشرطي (Ternary Operator) لتحديد ما إذا كانت الدرجة التي يدخلها
المستخدم تمثل درجة نجاح أم رسوب.
ها هو الكود مع الشرح:
import 'dart:io'; void main() { // طلب من المستخدم إدخال درجته stdout.write('الرجاء إدخال الدرجة: '); double grade = double.parse(stdin.readLineSync()!); // استخدام العامل الشرطي لتحديد حالة النجاح أو الفشل String result = (grade >= 60) ? 'ناجح' : 'راسب'; // طباعة النتيجة print('الحالة: $result'); }
في هذا البرنامج، يُطلب من المستخدم إدخال درجته. بعد ذلك، يستخدم العامل الشرطي للتحقق مما إذا كانت الدرجة أكبر من أو تساوي 60 (الحد الأدنى للنجاح). إذا كانت الدرجة أكبر من أو تساوي 60، ستتم طباعة “ناجح”، وإلا ستتم طباعة “راسب”.
يساعد العامل الشرطي في هذا السياق على تبسيط الشفرة وجعلها أقل برمجية، حيث يتم القيام بالاختبار واسترجاع القيمة المناسبة في خط واحد فقط.
عمليات الربط أو التعيين (Assignment Operators) هي عمليات تُستخدم في لغة البرمجة Dart لتعيين قيمة لمتغير.
تتميز هذه العمليات بتوفير طريقة مختصرة وسريعة لتعيين القيم للمتغيرات بناءً على القيم الموجودة في المتغيرات الأخرى أو نتائج العمليات الحسابية. هذه العمليات تتضمن العمليات الأساسية مثل الجمع والطرح بالإضافة إلى عمليات خاصة مثل الزيادة بقيمة معينة والتنقيص بقيمة معينة.
إليك بعض أمثلة على عمليات الربط مع الشرح:
عمليات الربط الأساسية:
يُستخدم لتعيين قيمة محددة لمتغير.
int x = 5; // تعيين القيمة 5 للمتغير x
يُستخدم لجمع قيمة محددة بقيمة متغير وتعيين الناتج للمتغير.
int y = 10; y += 5; // يضيف 5 إلى قيمة y ويُعيّن الناتج ل y (النتيجة: 15)
يُستخدم لطرح قيمة محددة من قيمة متغير وتعيين الناتج للمتغير.
int z = 20; z -= 8; // يطرح 8 من قيمة z ويُعيّن الناتج ل z (النتيجة: 12)
يُستخدم لزيادة قيمة متغير بقيمة واحد.
int counter = 0; counter++; // يزيد قيمة counter بواحد (النتيجة: 1)
يُستخدم لتنقيص قيمة متغير بقيمة واحد.
int attempts = 3; attempts--; // ينقص قيمة attempts بواحد (النتيجة: 2)
تسهل عمليات الربط عملية تعيين القيم للمتغيرات وتجعل الشفرة أقل برمجية وأكثر فعالية. يُمكن استخدامها للزيادة أو التنقيص بقيمة معينة أو لإجراء عمليات الجمع والطرح بشكل مختصر.
سنقوم بكتابة تطبيق بسيط في Dart يستخدم عمليات الربط (Assignment Operators) لإجراء بعض العمليات الحسابية البسيطة وتعيين النتائج للمتغيرات.
هذا هو الكود مع الشرح:
void main() { // تعريف متغيرات int x = 10; int y = 5; // عمليات الربط الأساسية x += y; // تعيين x = x + y print('x = $x'); // ستطبع: x = 15 y -= 3; // تعيين y = y - 3 print('y = $y'); // ستطبع: y = 2 // عمليات الربط الخاصة int counter = 0; counter++; // زيادة counter بمقدار واحد print('counter = $counter'); // ستطبع: counter = 1 int attempts = 3; attempts--; // تنقيص attempts بمقدار واحد print('attempts = $attempts'); // ستطبع: attempts = 2 }
نقوم بتعريف متغيرات x و y.
ثم نستخدم عمليات الربط الأساسية لإجراء الجمع والطرح.
بعد ذلك، نستخدم عمليات الربط الخاصة (++ و –) لزيادة وتنقيص قيمة المتغيرات counter و attempts بمقدار واحد.
في كل مرة يتم طباعة قيم المتغيرات للتحقق من النتائج.
تُظهر هذه العمليات كيف يمكن استخدام عمليات الربط لإجراء عمليات حسابية بسيطة وتعيين النتائج للمتغيرات بشكل مختصر وفعال.
هاكم كويز بسيط حول عمليات Dart.
الكويز سيتضمن عدة أسئلة تتعلق بمختلف أنواع المعاملات في Dart.
الأسئلة مع الشرح لكل منها:
int x = 5; int y = 3; int result = x * y - 2;
أ. 15
ب. 13
ج. 17
د. 7
الشرح:
لحل هذا السؤال، يجب تطبيق ترتيب العمليات الحسابية (PEMDAS)، حيث يتم ضرب x ب y أولاً ثم طرح 2 من الناتج.
الناتج:
5 * 3 = 15
15 – 2 = 13
double a = 7.0; double b = 3.0; int result = (a / b).round();
أ. 2
ب. 2.3
ج. 3
د. 2.33
الشرح:
في هذا السؤال، نقوم بقسمة قيمة المتغير a على قيمة المتغير b، ثم نقوم بتقريب الناتج إلى أقرب عدد صحيح باستخدام الدالة round().
الناتج:
7.0 / 3.0 = 2.33333…
تُقرب إلى أقرب عدد صحيح: 2
إذاً، قيمة المتغير result هي 2.
int x = 10; int result = x++;
أ. 10
ب. 11
ج. 9
د. 12
الشرح:
في هذا السؤال، نقوم بزيادة قيمة المتغير x بمقدار واحد باستخدام عامل الزيادة ++، ومن ثم نعيد قيمة x إلى المتغير result. ومع ذلك،
++ ما بعد المتغير يجعل قيمة المتغير تُستخدم أولاً ثم تُزيد بعد ذلك.
لذا، قيمة المتغير result هي القيمة الأصلية لـ x قبل الزيادة بمقدار واحد.
إذاً، قيمة المتغير result هي 10.
int x = 20; int y = 4; int result = x ~/ y;
أ. 5
ب. 4
ج. 6
د. 5.0
الشرح:
في هذا السؤال، نقوم بقسمة قيمة المتغير x على قيمة المتغير y باستخدام عامل القسمة ~/، والذي يُعيد الناتج كعدد صحيح (integer)
بدون تقريب.
الناتج:
20 ~/ 4 = 5
إذاً، قيمة المتغير result هي 5.
bool isTrue = true; bool isFalse = false; bool result = isTrue && isFalse;
أ. true
ب. false
ج. null
د. Compilation Error
الشرح:
هذا السؤال يتعلق بالعمليات المنطقية. نقوم بتنفيذ عملية الـ “و” (&&) بين قيمتي المتغيرات isTrue و isFalse. إذا كان كلاهما
صحيحًا (true)، فإن النتيجة هي true، وإلا فإن النتيجة هي false.
الناتج:
true && false = false
int x = 10; int result = x % 3;
أ. 1
ب. 0
ج. 2
د. 3
الشرح:
في هذا السؤال، نقوم باستخدام عامل الباقي (%) للحصول على الباقي من قسمة قيمة المتغير x على 3.
الناتج:
10 % 3 = 1
إذاً، قيمة المتغير result هي 1.
int x = 5; int y = 3; int z = x + y;
أ. عملية حسابية
ب. عملية منطقية
ج. عملية ربط
د. عملية مقارنة
bool isRainy = true; bool isSunny = false; bool result = isRainy || isSunny;
أ. true
ب. false
ج. null
د. Compilation Error
الشرح:
هذا السؤال يتعلق أيضًا بالعمليات المنطقية. نقوم بتنفيذ عملية الـ “أو” (||) بين قيمتي المتغيرات isRainy و isSunny. إذا كان أحد
هذين المتغيرين صحيحًا (true)، فإن النتيجة هي true، وإلا فإن النتيجة هي false.
الناتج:
true || false = true
إذاً، قيمة المتغير result هي true.
int x = 10; int result = x ~/ 3;
أ. 3
ب. 4
ج. 3.0
د. 10
الشرح:
هذا السؤال يتعلق بعملية القسمة ~/ في Dart. نقوم بقسمة قيمة المتغير x على 3 باستخدام هذه العملية، والتي تعيد الناتج كعدد صحيح
(integer) بدون تقريب.
الناتج:
10 ~/ 3 = 3
إذاً، قيمة المتغير result هي 3.
double x = 3 / 2;
أ. int
ب. double
ج. bool
د. String
الشرح:
هذا التعبير يشير إلى عملية القسمة في Dart. حتى لو كانت القيم المستخدمة في القسمة (3 و 2) أصحاب نوع int، إلا أن الناتج سيكون
بنوع double، لأن الناتج يحتوي على كسور.
إذاً، النوع الصحيح للتعبير هو double.