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

دوال Getter و Setter

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

تُعد الـ Getters والـ setters دوالاً توفر وصولاً متحكماً فيه للحقول الخاصة. يقوم الـ getter باسترداد قيمة الحقل، بينما يقوم الـ setter بتعديلها.

تتبع اصطلاحات التسمية نمطاً قياسياً: البادئة get أو set متبوعة باسم الحقل مع كتابة حرفه الأول كبيراً.

public class Product {
    private String name;
    private double price;
    
    // دالة الحصول على name
    public String getName() {
        return name;
    }
    
    // دالة تعيين name
    public void setName(String name) {
        this.name = name;
    }
    
    // دالة الحصول على price
    public double getPrice() {
        return price;
    }
    
    // دالة التعيين مع التحقق من الصحة
    public void setPrice(double price) {
        if (price >= 0) {
            this.price = price;
        }
    }
}

القوة الحقيقية لدوال التعيين (setters) هي القدرة على إضافة منطق التحقق من الصحة. في المثال أعلاه، يقبل setPrice القيم غير السالبة فقط، مما يحمي الكائن من البيانات غير الصالحة.

بالنسبة لحقول boolean، عادةً ما تستخدم دوال الـ getter البادئة is بدلاً من get:

private boolean active;

public boolean isActive() {
    return active;
}

يمكنك أيضًا إنشاء حقول للقراءة فقط من خلال توفير getter فقط، أو حقول للكتابة فقط من خلال توفير setter فقط. يمنحك هذا تحكمًا دقيقًا في كيفية تفاعل الكود الخارجي مع بيانات الكائن الخاص بك.

challenge icon

التحدي

سهل

لنقم ببناء محول Temperature يوضح قوة دوال الجلب (getters) والتعيين (setters) مع منطق التحقق من الصحة.

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

  • Temperature.java: قم بتعريف فئة Temperature تقوم بتخزين قيمة درجة الحرارة بالدرجة المئوية (Celsius). يجب أن تحتوي الفئة على:
    • حقل celsius خاص (private) من نوع (double)
    • حقل valid خاص (private) من نوع (boolean) يتتبع ما إذا كانت درجة الحرارة ممكنة فيزيائياً
    • دالة جلب getCelsius() تعيد قيمة celsius
    • دالة تعيين setCelsius() تقبل فقط القيم التي تساوي أو تزيد عن الصفر المطلق (-273.15). إذا كانت القيمة صالحة، قم بتعيين valid إلى true؛ بخلاف ذلك، لا تقم بتغيير celsius وقم بتعيين valid إلى false
    • دالة جلب isValid() للحقل المنطقي (تذكر: دوال جلب القيم المنطقية تستخدم البادئة is)
    • دالة جلب getFahrenheit() تقوم بتحويل وإعادة درجة الحرارة بالفهرنهايت باستخدام الصيغة: (celsius * 9/5) + 32
  • Main.java: قم بإنشاء كائن Temperature، واقرأ قيمة celsius كمدخل، واستخدم دالة التعيين لضبطها، ثم اطبع ما إذا كانت درجة الحرارة صالحة وما يعادلها بالفهرنهايت. قم بتنسيق مخرجاتك في سطرين:
    • Valid: true أو Valid: false
    • Fahrenheit: X.X (مع إظهار منزلة عشرية واحدة)

ستتلقى مدخلاً واحداً: قيمة من نوع double تمثل درجة الحرارة بالدرجة المئوية.

لتنسيق مخرجات الفهرنهايت إلى منزلة عشرية واحدة، يمكنك استخدام String.format("%.1f", value).

ورقة مرجعية

تعد دوال الجلب (Getters) ودوال التعيين (Setters) أساليب توفر وصولاً محكماً للحقول الخاصة (private fields). يقوم الـ getter باستعادة قيمة الحقل، بينما يقوم الـ setter بتعديلها.

تتبع اصطلاحات التسمية نمطاً قياسياً: البادئة get أو set متبوعة باسم الحقل مع كتابة حرفه الأول كبيراً.

public class Product {
    private String name;
    private double price;
    
    // Getter للاسم
    public String getName() {
        return name;
    }
    
    // Setter للاسم
    public void setName(String name) {
        this.name = name;
    }
    
    // Getter للسعر
    public double getPrice() {
        return price;
    }
    
    // Setter مع التحقق من الصحة
    public void setPrice(double price) {
        if (price >= 0) {
            this.price = price;
        }
    }
}

يمكن أن تتضمن دوال التعيين (Setters) منطق تحقق لحماية الكائنات من البيانات غير الصالحة. في المثال أعلاه، تقبل setPrice القيم غير السالبة فقط.

بالنسبة لحقول boolean، تستخدم دوال الجلب البادئة is بدلاً من get:

private boolean active;

public boolean isActive() {
    return active;
}

يمكنك إنشاء حقول للقراءة فقط من خلال توفير دالة جلب (getter) فقط، أو حقول للكتابة فقط من خلال توفير دالة تعيين (setter) فقط.

جرّب بنفسك

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double celsiusInput = scanner.nextDouble();
        
        // TODO: إنشاء كائن Temperature
        
        // TODO: استخدم الـ setter لتعيين قيمة celsius
        
        // TODO: اطبع ما إذا كانت درجة الحرارة صالحة (التنسيق: "Valid: true" أو "Valid: false")
        
        // TODO: اطبع ما يعادلها بـ Fahrenheit (التنسيق: "Fahrenheit: X.X")
        // Hint: استخدم String.format("%.1f", value) لمنزلة عشرية واحدة
    }
}
quiz iconاختبر نفسك

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

جميع دروس Object Oriented Programming