Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - آلة حاسبة بسيطة

جزء من قسم Object Oriented Programming في رحلة Dart على Coddy — الدرس 9 من 110.

challenge icon

التحدي

متوسط

قم ببناء فئة Calculator كاملة في ملف calculator.dart تجمع كل ما تعلمته. سيقوم ملف driver.dart باستيراد واختبار الفئة الخاصة بك.

يجب أن تستعرض فئة Calculator جميع المواضيع التي تمت تغطيتها في هذه الوحدة:

  1. الملفات الخارجية: سيتم استيراد calculator.dart بواسطة driver.dart باستخدام import 'calculator.dart';
  2. المكتبات والاستيرادات: يستخدم driver.dart الكود import 'dart:io';
  3. مقدمة في البرمجة كائنية التوجه (OOP): قم بتعريف class Calculator وإنشاء كائنات باستخدام Calculator()
  4. الفئات مقابل الكائنات: ينشئ كل اختبار كائن Calculator جديدًا بحالته المستقلة الخاصة
  5. الكلمة المفتاحية this: استخدم this.result داخل جميع الدوال للوصول إلى متغير النسخة (instance variable)
  6. الدوال (Methods): قم بتنفيذ add، و subtract، و multiply، و divide، و clear، و getResult
  7. متغيرات النسخة (Instance Variables): قم بالتصريح عن int result = 0 كمتغير نسخة
  8. أساسيات المنشئ (Constructor): أضف منشئ Calculator() يقوم بضبط result إلى 0 ويطبع 'Calculator ready'

متطلبات الدوال:

  • int add(int number) — يضيف number إلى result، ويعيد النتيجة الجديدة
  • int subtract(int number) — يطرح number من result، ويعيد النتيجة الجديدة
  • int multiply(int number) — يضرب result في number، ويعيد النتيجة الجديدة
  • int divide(int number) — يقسم result على number باستخدام القسمة الصحيحة (~/=)، ويعيد النتيجة الجديدة. إذا كان number هو 0، اطبع تماماً 'Error: Division by zero' وأعد النتيجة دون تغيير
  • void clear() — يعيد ضبط result إلى 0
  • int getResult() — يعيد قيمة result الحالية

مثال على الاستخدام:

Calculator calc = Calculator(); // prints: Calculator ready
calc.add(10);                  // result = 10
calc.multiply(3);              // result = 30
calc.subtract(5);              // result = 25
calc.divide(5);                // result = 5
calc.divide(0);                // prints: Error: Division by zero
calc.clear();                  // result = 0

جرّب بنفسك

import 'calculator.dart';
import 'dart:io';

void main() {
  String testCase = stdin.readLineSync()!;

  if (testCase == 'constructor_test') {
    Calculator calc = Calculator();
    print('Initial result: ${calc.getResult()}');
    print('Calculator created successfully');

  } else if (testCase == 'addition_test') {
    Calculator calc = Calculator();
    int r1 = calc.add(10);
    print('After adding 10: $r1');
    int r2 = calc.add(5);
    print('After adding 5: $r2');
    print('Final result: ${calc.getResult()}');

  } else if (testCase == 'subtraction_test') {
    Calculator calc = Calculator();
    calc.add(20);
    int r1 = calc.subtract(8);
    print('After subtracting 8 from 20: $r1');
    int r2 = calc.subtract(2);
    print('After subtracting 2: $r2');
    print('Final result: ${calc.getResult()}');

  } else if (testCase == 'multiplication_test') {
    Calculator calc = Calculator();
    calc.add(5);
    int r1 = calc.multiply(4);
    print('After multiplying by 4: $r1');
    int r2 = calc.multiply(2);
    print('After multiplying by 2: $r2');
    print('Final result: ${calc.getResult()}');

  } else if (testCase == 'division_test') {
    Calculator calc = Calculator();
    calc.add(100);
    int r1 = calc.divide(4);
    print('After dividing by 4: $r1');
    int r2 = calc.divide(5);
    print('After dividing by 5: $r2');
    print('Final result: ${calc.getResult()}');

  } else if (testCase == 'division_by_zero_test') {
    Calculator calc = Calculator();
    calc.add(50);
    print('Initial value: ${calc.getResult()}');
    int r = calc.divide(0);
    print('Result after division by zero: $r');
    print('Value unchanged: ${calc.getResult()}');

  } else if (testCase == 'clear_test') {
    Calculator calc = Calculator();
    calc.add(25);
    calc.multiply(3);
    print('Before clear: ${calc.getResult()}');
    calc.clear();
    print('After clear: ${calc.getResult()}');
    print('Current result: ${calc.getResult()}');

  } else if (testCase == 'comprehensive_test') {
    Calculator calc = Calculator();
    calc.add(10);
    calc.multiply(3);
    calc.subtract(5);
    calc.divide(5);
    print('After sequence of operations: ${calc.getResult()}');
    calc.divide(0);
    print('After division by zero attempt: ${calc.getResult()}');
    calc.clear();
    calc.add(100);
    print('After clear and add 100: ${calc.getResult()}');

  } else {
    print('Unknown test case');
  }
}

جميع دروس Object Oriented Programming