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

دالة toString()

جزء من قسم البرمجة كائنية التوجه في رحلة Java على Coddy. الدرس 41 من 87.

كل class في Java ترث من class Object، الذي يوفر عدة method مفيدة. ومن أكثرها شيوعًا في إعادة التعريف toString()، الذي يُرجع تمثيلًا نصيًا لـ object.

افتراضيًا، تُرجع toString() اسم class متبوعًا برمز تجزئة object، وهذا ليس مفيدًا جدًا:

public class Person {
    private String name;
    private int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

Person p = new Person("Alice", 25);
System.out.println(p);  // Person@15db9742

من خلال إعادة تعريف toString()، يمكنك توفير مخرجات ذات معنى تصف حالة object:

public class Person {
    private String name;
    private int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    @Override
    public String toString() {
        return "Person[name=" + name + ", age=" + age + "]";
    }
}

Person p = new Person("Alice", 25);
System.out.println(p);  // Person[name=Alice, age=25]

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

challenge icon

التحدي

سهل

لنبنِ نظامًا لجرد المنتجات يعرض معلومات مفيدة حول العناصر باستخدام تطبيقات مخصّصة لـ toString(). ستنشئ فئة Product تتجاوز طريقة toString() الافتراضية لتوفير تمثيل واضح وسهل القراءة لكل منتج.

ستنظّم التعليمات البرمجية عبر ملفين:

  • Product.java: أنشئ فئة تمثّل عنصرًا في المخزون. يحتوي كل Product على ثلاثة fields من النوع private: name (String)، وprice (double)، وquantity (int). أضف Constructor يقوم بتهيئة جميع fields الثلاثة. تجاوز طريقة toString() لإرجاع سلسلة منسّقة بهذا format الدقيق: Product[name=X, price=Y, quantity=Z] حيث تمثّل X وY وZ قيم fields الفعلية. يجب عرض price كرقم عادي (لا حاجة إلى تنسيق خاص).
  • Main.java: اجعل فئة Product الخاصة بك تعمل من خلال إنشاء المنتجات وعرضها. ستتلقى ثلاثة inputs: اسم منتج (String)، وسعرًا (double)، وكميةً (int). أنشئ Product باستخدام هذه values، ثم اطبع كائن المنتج مباشرةً باستخدام System.out.println(). بفضل طريقة toString() التي تجاوزتها، سيعرض هذا تلقائيًا معلومات المنتج المنسّقة بدلًا من المخرجات الافتراضية الغامضة!

ستتلقى ثلاثة inputs: اسم المنتج (String)، والسعر (double)، والكمية (int).

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

جرّب بنفسك

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // قراءة المدخلات
        String name = scanner.nextLine();
        double price = scanner.nextDouble();
        int quantity = scanner.nextInt();
        
        // TODO: إنشاء كائن Product باستخدام القيم المدخلة
        
        // TODO: طباعة كائن product مباشرة
        // (سيؤدي هذا تلقائيًا إلى استدعاء دالة toString() الخاصة بك!)
    }
}
quiz iconاختبر نفسك

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

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

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