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

دالات التعيين (Setter Methods)

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

تتيح لك أساليب Getter قراءة البيانات الداخلية من خلال نقطة وصول متحكَّم بها. أما أساليب Setter (وتُسمّى أيضًا أساليب التعديل) فتفعل العكس. فهي توفّر طريقة متحكَّمًا بها لتعديل الحالة الداخلية.

بدلًا من تعيين car.speed = 50 مباشرةً، تستدعي car:setSpeed(50):

local Car = {}
Car.__index = Car

function Car:new()
    local instance = {}
    setmetatable(instance, self)
    instance.speed = 0
    return instance
end

function Car:setSpeed(newSpeed)
    self.speed = newSpeed
end

function Car:getSpeed()
    return self.speed
end

للوهلة الأولى، يبدو هذا كعمل إضافي للحصول على النتيجة نفسها. لكن أدوات Setter تصبح قوية عندما تحتاج إلى إضافة قواعد لاحقًا. تخيّل أنك تريد التأكد من أن speed لا تصبح سالبة أبدًا ولا تتجاوز حدًا أقصى:

function Car:setSpeed(newSpeed)
    if newSpeed < 0 then
        self.speed = 0
    elseif newSpeed > 200 then
        self.speed = 200
    else
        self.speed = newSpeed
    end
end

الآن يمر كل تغيير في السرعة عبر منطق التحقق الخاص بك. يستفيد أي كود يستخدم :setSpeed() تلقائيًا من عمليات التحقق هذه دون تعديل. هذه هي القيمة الحقيقية لـ Setter. فهي تنشئ نقطة واحدة تتحكم فيها بكيفية تغيّر البيانات، مما يجعل كائناتك أكثر أمانًا وأسهل في الصيانة.

challenge icon

التحدي

سهل

لنبنِ Thermostat class تستخدم أساليب setter للتحكم في درجة الحرارة بطريقة ذكية. بدلًا من السماح بأي قيمة لدرجة الحرارة، سيفرض منظم الحرارة حدودًا معقولة، محافظًا على درجة الحرارة ضمن نطاق مريح.

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

  • Thermostat.lua: عرّف Thermostat class باستخدام نمط prototype القياسي. يجب أن يتتبع كل منظم حرارة قيمة temperature الحالية. تضمّن:
    • Constructor :new() يهيئ درجة الحرارة إلى 20 (قيمة افتراضية مريحة)
    • Getter :getTemperature() يعيد درجة الحرارة الحالية
    • Setter :setTemperature(newTemp) يحدّث درجة الحرارة، لكنه يبقيها ضمن الحدود: حد أدنى 10 وحد أقصى 30
  • main.lua: استخدم Require لوحدة Thermostat وأنشئ instance لمنظم الحرارة. استخدم Setter لمحاولة إجراء تغييرات مختلفة على درجة الحرارة ولاحظ كيفية فرض الحدود.

يجب أن يفرض أسلوب :setTemperature() القواعد التالية:

  • إذا كانت درجة الحرارة الجديدة أقل من 10، فاضبطها على 10
  • إذا كانت درجة الحرارة الجديدة أعلى من 30، فاضبطها على 30
  • Otherwise، اضبطها على القيمة المطلوبة

ستتلقى مدخلين:

  1. درجة الحرارة الأولى المطلوب ضبطها
  2. درجة الحرارة الثانية المطلوب ضبطها

في ملفك الرئيسي، أنشئ منظم حرارة، ثم:

  1. اطبع درجة الحرارة الأولية
  2. اضبط درجة الحرارة على قيمة الإدخال الأولى واطبع result
  3. اضبط درجة الحرارة على قيمة الإدخال الثانية واطبع result

اطبع كل درجة حرارة في سطر خاص بها (الرقم فقط).

على سبيل المثال، إذا كان الإدخالان 25 و50، فيجب أن يكون الناتج:

20
25
30

لاحظ كيف تؤدي المحاولة الثانية لضبط 50 إلى 30: يفرض Setter الحد الأقصى تلقائيًا!

REQUIRED OUTPUT FORMAT: [Your translated content here]

جرّب بنفسك

-- استيراد وحدة Thermostat
local Thermostat = require('Thermostat')

-- قراءة الإدخال
local temp1 = tonumber(io.read())
local temp2 = tonumber(io.read())

-- TODO: إنشاء مثيل من Thermostat

-- TODO: طباعة درجة الحرارة الأولية

-- TODO: تعيين درجة الحرارة إلى temp1 وطباعة النتيجة

-- TODO: تعيين درجة الحرارة إلى temp2 وطباعة النتيجة
quiz iconاختبر نفسك

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

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

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