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

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

جزء من قسم البرمجة كائنية التوجه في رحلة 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. مقدمة إلى البرمجة كائنية التوجه: عرّف class Calculator وأنشئ كائنات باستخدام Calculator()
  4. الفئات مقابل الكائنات: ينشئ كل اختبار كائن Calculator جديدًا بحالته المستقلة
  5. الكلمة المفتاحية this: استخدم this.result داخل جميع methods للوصول إلى instance variable
  6. Methods: نفّذ add وsubtract وmultiply وdivide وclear وgetResult
  7. Instance Variables: أعلن عن int result = 0 باعتباره instance variable
  8. أساسيات Constructor: أضف constructor من النوع Calculator() يعيّن result إلى 0 ويطبع 'Calculator ready'

متطلبات Methods:

  • 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' وأعد النتيجة unchanged
  • 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');
  }
}

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم Dart عبر الإنترنت