طريقة السحب
جزء من قسم Object Oriented Programming في رحلة Lua على Coddy — الدرس 21 من 70.
التحدي
سهلبنكك الرقمي ينمو! يمكن للحسابات الآن استقبال الإيداعات، ولكن البنك الحقيقي يحتاج أيضاً للسماح للعملاء بسحب الأموال. دعنا نضيف طريقة :withdraw(amount)—ولكن مع فحص أمان مهم.
على عكس الإيداعات، يمكن أن تفشل عمليات السحب. إذا حاول العميل سحب أموال أكثر مما يملك، فلا ينبغي للبنك السماح بذلك. تحتاج طريقة السحب الخاصة بك إلى التحقق مما إذا كانت هناك أموال كافية قبل خصم المبلغ.
ستستمر في العمل على ملفيك:
Account.lua: أضف طريقة:withdraw(amount)إلى فئة Account الموجودة لديك. إذا كان الحساب يحتوي على رصيد كافٍ، فقم بطرح المبلغ وإرجاعtrue. إذا لم تكن هناك أموال كافية، فقم بطباعةInsufficient fundsوإرجاعfalseدون تغيير الرصيد.main.lua: قم بإنشاء حساب، وقم بإجراء إيداع لمنحه بعض الأموال، ثم حاول إجراء عدة عمليات سحب لرؤية كل من المعاملات الناجحة والفاشلة.
ستتلقى أربعة مدخلات:
- مبلغ الإيداع الأولي
- مبلغ السحب الأول
- مبلغ السحب الثاني
- مبلغ السحب الثالث
في ملفك الرئيسي، قم بإنشاء حساب، وأودع المبلغ الأولي، ثم حاول إجراء كل عملية سحب بالترتيب. بعد كل محاولة سحب، اطبع الرصيد الحالي في سطر جديد. تذكر أن عمليات السحب الفاشلة ستطبع أيضاً Insufficient funds قبل طباعة الرصيد.
على سبيل المثال، إذا كانت المدخلات هي 100 و 30 و 50 و 40، فيجب أن يكون المخرج:
70
20
Insufficient funds
20يبدأ الحساب بـ 100 بعد الإيداع. تنجح عملية السحب الأولى بقيمة 30 (الرصيد: 70)، وتنجح عملية السحب الثانية بقيمة 50 (الرصيد: 20)، ولكن عملية السحب الثالثة بقيمة 40 تفشل لأنه لم يتبق سوى 20—لذا يظل الرصيد عند 20.
جرّب بنفسك
-- استدعاء وحدة الحساب (Account)
local Account = require('Account')
-- قراءة المدخلات الأربعة
local initialDeposit = tonumber(io.read())
local withdrawal1 = tonumber(io.read())
local withdrawal2 = tonumber(io.read())
local withdrawal3 = tonumber(io.read())
-- إنشاء حساب واحد
local account = Account:new()
-- إيداع المبلغ الأولي
account:deposit(initialDeposit)
-- محاولة السحب الأول وطباعة الرصيد
-- TODO: استدعاء account:withdraw(withdrawal1) هنا
print(account.balance)
-- محاولة السحب الثاني وطباعة الرصيد
-- TODO: استدعاء account:withdraw(withdrawal2) هنا
print(account.balance)
-- محاولة السحب الثالث وطباعة الرصيد
-- TODO: استدعاء account:withdraw(withdrawal3) هنا
print(account.balance)
جميع دروس Object Oriented Programming
4مشروع: بنك رقمي
إعداد المشروعطريقة الإيداع7تعدد الأشكال وإعادة التعريف
إعادة تعريف الدوالاستدعاء دوال الفئة الأبDuck Typingواجهة مشتركةالتحقق من النوعمراجعة - أدوار الموظفين2نمط النموذج الأولي للفئات
مفهوم النموذج الأوليالربط باستخدام __indexالمنشئ :new()تهيئة الخصائصنسخ مستقلةملخص - مصنع السيارات5تحميل المعاملات في OOP
جمع الكائناتطرح الكائناتدمج الكائناتمقارنة الكائنات (<, >)مراجعة - رياضيات المحفظة8التغليف
اصطلاحات التسميةاستخدام Closures للخصوصيةالوصول عبر Closuresجداول للقراءة فقطمنطق التحقق من الصحةمراجعة - الخزنة الآمنة11أنماط التصميم (مبسط)
دوال المصنعجدول Singletonنمط الـ Iteratorالمراقب (المستمع)مراجعة - مصنع الـ Logger3حالة الكائن وسلوكه
متغيرات النسخةدالات الجلب (Getter Methods)دالات التعيين (Setter Methods)الخصائص المحسوبةتنسيق النصوصالتحقق من المساواةمراجعة - درجة الطالب6أساسيات الوراثة
إعداد الوراثةوراثة الـ Methodsتوسيع الـ Constructorإضافة Methods للابنالمشترك مقابل الفريدملخص - التسلسل الهرمي للأشكال