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

دالة toString()

جزء من قسم Object Oriented Programming في رحلة Java على Coddy — الدرس 41 من 87.

كل فئة في Java ترث من فئة Object، والتي توفر عدة دوال مفيدة. واحدة من أكثر الدوال التي يتم تجاوزها شيوعاً هي toString()، والتي تعيد تمثيلاً نصياً للكائن.

بشكل افتراضي، يعيد toString() اسم الفئة متبوعاً برمز التجزئة (hash code) الخاص بالكائن، وهو أمر ليس مفيداً للغاية:

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()، يمكنك تقديم مخرجات ذات معنى تصف حالة الكائن:

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() تلقائياً عند طباعة كائن أو دمجه مع سلسلة نصية. هذا يجعل تصحيح الأخطاء أسهل بكثير حيث يمكنك رؤية محتويات الكائن بسرعة دون كتابة كود إضافي.

challenge icon

التحدي

سهل

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

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

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

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

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

ورقة مرجعية

كل فئة في Java ترث من الفئة Object. تُرجع الطريقة toString() تمثيلاً نصياً للكائن.

بشكل افتراضي، تُرجع toString() اسم الفئة متبوعاً برمز التجزئة (hash code) الخاص بالكائن:

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

قم بإعادة تعريف (Override) الطريقة toString() لتوفير مخرجات ذات معنى:

@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() تلقائياً عند طباعة كائن أو دمجه مع سلسلة نصية.

جرّب بنفسك

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: طباعة كائن المنتج مباشرة
        // (سيؤدي هذا تلقائياً إلى استدعاء تابع toString() الخاص بك!)
    }
}
quiz iconاختبر نفسك

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

جميع دروس Object Oriented Programming