دالات التعيين (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. فهي تنشئ نقطة واحدة تتحكم فيها بكيفية تغيّر البيانات، مما يجعل كائناتك أكثر أمانًا وأسهل في الصيانة.
التحدي
سهللنبنِ Thermostat class تستخدم أساليب setter للتحكم في درجة الحرارة بطريقة ذكية. بدلًا من السماح بأي قيمة لدرجة الحرارة، سيفرض منظم الحرارة حدودًا معقولة، محافظًا على درجة الحرارة ضمن نطاق مريح.
ستنظم الكود الخاص بك عبر ملفين:
Thermostat.lua: عرّفThermostatclass باستخدام نمط prototype القياسي. يجب أن يتتبع كل منظم حرارة قيمةtemperatureالحالية. تضمّن:- Constructor
:new()يهيئ درجة الحرارة إلى20(قيمة افتراضية مريحة) - Getter
:getTemperature()يعيد درجة الحرارة الحالية - Setter
:setTemperature(newTemp)يحدّث درجة الحرارة، لكنه يبقيها ضمن الحدود: حد أدنى10وحد أقصى30
- Constructor
main.lua: استخدم Require لوحدة Thermostat وأنشئ instance لمنظم الحرارة. استخدم Setter لمحاولة إجراء تغييرات مختلفة على درجة الحرارة ولاحظ كيفية فرض الحدود.
يجب أن يفرض أسلوب :setTemperature() القواعد التالية:
- إذا كانت درجة الحرارة الجديدة أقل من
10، فاضبطها على10 - إذا كانت درجة الحرارة الجديدة أعلى من
30، فاضبطها على30 - Otherwise، اضبطها على القيمة المطلوبة
ستتلقى مدخلين:
- درجة الحرارة الأولى المطلوب ضبطها
- درجة الحرارة الثانية المطلوب ضبطها
في ملفك الرئيسي، أنشئ منظم حرارة، ثم:
- اطبع درجة الحرارة الأولية
- اضبط درجة الحرارة على قيمة الإدخال الأولى واطبع result
- اضبط درجة الحرارة على قيمة الإدخال الثانية واطبع result
اطبع كل درجة حرارة في سطر خاص بها (الرقم فقط).
على سبيل المثال، إذا كان الإدخالان 25 و50، فيجب أن يكون الناتج:
20
25
30لاحظ كيف تؤدي المحاولة الثانية لضبط 50 إلى 30: يفرض Setter الحد الأقصى تلقائيًا!
جرّب بنفسك
-- استيراد وحدة Thermostat
local Thermostat = require('Thermostat')
-- قراءة الإدخال
local temp1 = tonumber(io.read())
local temp2 = tonumber(io.read())
-- TODO: إنشاء مثيل من Thermostat
-- TODO: طباعة درجة الحرارة الأولية
-- TODO: تعيين درجة الحرارة إلى temp1 وطباعة النتيجة
-- TODO: تعيين درجة الحرارة إلى temp2 وطباعة النتيجة
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
4مشروع: بنك رقمي
إعداد المشروعطريقة الإيداع7تعدد الأشكال وإعادة التعريف
إعادة تعريف الدوالاستدعاء دوال الفئة الأبDuck Typingواجهة مشتركةالتحقق من النوعمراجعة - أدوار الموظفين2نمط النموذج الأولي للفئات
مفهوم النموذج الأوليالربط باستخدام __indexالمنشئ :new()تهيئة الخصائصنسخ مستقلةملخص - مصنع السيارات5تحميل المعاملات في OOP
جمع الكائناتطرح الكائناتدمج الكائناتمقارنة الكائنات (<, >)مراجعة - رياضيات المحفظة8التغليف
اصطلاحات التسميةاستخدام Closures للخصوصيةالوصول عبر Closuresجداول للقراءة فقطمنطق التحقق من الصحةمراجعة - الخزنة الآمنة11أنماط التصميم (مبسط)
دوال المصنعجدول Singletonنمط الـ Iteratorالمراقب (المستمع)مراجعة - مصنع الـ Logger3حالة الكائن وسلوكه
متغيرات النسخةدالات الجلب (Getter Methods)دالات التعيين (Setter Methods)الخصائص المحسوبةتنسيق النصوصالتحقق من المساواةمراجعة - درجة الطالب6أساسيات الوراثة
إعداد الوراثةوراثة الـ Methodsتوسيع الـ Constructorإضافة Methods للابنالمشترك مقابل الفريدملخص - التسلسل الهرمي للأشكالتدرّب بنفسك: مترجم Lua عبر الإنترنت