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

إعادة تعريف toString()

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

عندما تقوم بطباعة كائن (object) في Dart، قد ترى شيئاً مثل Instance of 'Person' - وهذا ليس مفيداً جداً. يحدث هذا لأن كل فئة (class) ترث طريقة toString() افتراضية من Object تعيد اسم الفئة فقط.

من خلال تجاوز toString()، يمكنك تقديم تمثيل نصي ذو معنى لكائناتك:

class Person {
  String name;
  int age;
  
  Person(this.name, this.age);
  
  @override
  String toString() {
    return 'Person(name: $name, age: $age)';
  }
}

void main() {
  var person = Person('Alice', 30);
  print(person);  // Person(name: Alice, age: 30)
}

بدون التجاوز، سيقوم print(person) بإخراج Instance of 'Person'. باستخدامه، ستحصل على معلومات مفيدة حول حالة الكائن.

يتم استدعاء الطريقة toString() تلقائياً كلما احتاجت Dart لتحويل الكائن الخاص بك إلى سلسلة نصية - في جمل print()، أو إدراج السلاسل النصية (string interpolation)، أو عند الدمج مع سلاسل نصية أخرى:

var message = 'User: $person';  // يتم استدعاء toString() تلقائياً
print('Found: ' + person.toString());  // استدعاء صريح

إن تنفيذ toString() بشكل جيد يجعل تصحيح الأخطاء أسهل بكثير من خلال السماح لك بفحص قيم الكائنات بسرعة أثناء التطوير.

challenge icon

التحدي

سهل

لنقم ببناء نظام كتالوج منتجات حيث يعرض كل منتج معلوماته بتنسيق نظيف وقابل للقراءة عند طباعته. ستتدرب على تجاوز (overriding) طريقة toString() لجعل كائناتك أكثر سهولة في تصحيح الأخطاء (debuggable) وأكثر سهولة في الاستخدام.

ستقوم بتنظيم الكود الخاص بك في ملفين:

  • product.dart: قم بإنشاء فئة Product تمثل عنصراً في متجر. يجب أن يحتوي منتجك على name (String)، و price (double)، و quantity (int). قم بتجاوز طريقة toString() لإرجاع سلسلة نصية منسقة بهذا التنسيق تماماً: Product(name: [name], price: $[price], qty: [quantity])
  • main.dart: قم باستيراد ملف المنتج الخاص بك ووضح كيف يجعل تجاوز toString() طباعة الكائنات أكثر فائدة بكثير. قم بإنشاء ثلاثة منتجات واطبعها لرؤية تمثيل السلسلة النصية المخصص الخاص بك قيد التشغيل:
    • منتج باسم 'Laptop' بسعر 999.99 وكمية 5
    • منتج باسم 'Mouse' بسعر 29.5 وكمية 50
    • منتج باسم 'Keyboard' بسعر 75.0 وكمية 30
    قم أيضاً بتوضيح إدراج السلاسل النصية (string interpolation) عن طريق طباعة رسالة تتضمن أحد منتجاتك: Featured: [product] باستخدام منتج Laptop.

لاحظ كيف تظهر طباعة كل منتج مباشرة معلومات مفيدة بدلاً من رسالة Instance of 'Product' غير المفيدة. يتم استدعاء طريقة toString() تلقائياً في كل من جمل print() وعند استخدام إدراج السلاسل النصية.

المخرجات المتوقعة:

Product(name: Laptop, price: $999.99, qty: 5)
Product(name: Mouse, price: $29.5, qty: 50)
Product(name: Keyboard, price: $75.0, qty: 30)
Featured: Product(name: Laptop, price: $999.99, qty: 5)

جرّب بنفسك

import 'product.dart';

void main() {
  // TODO: إنشاء ثلاثة نماذج (instances) من Product:
  // 1. Laptop - السعر: 999.99، الكمية: 5
  // 2. Mouse - السعر: 29.5، الكمية: 50
  // 3. Keyboard - السعر: 75.0، الكمية: 30

  // TODO: طباعة كل منتج (سيتم استدعاء toString() تلقائياً)

  // TODO: طباعة رسالة مميزة باستخدام string interpolation
  // التنسيق: Featured: [laptop product]
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming