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

طريقة السحب

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

challenge icon

التحدي

سهل

إن مصرفك الرقمي ينمو! يمكن لـ account الآن استقبال الإيداعات، لكن المصرف الحقيقي يحتاج أيضًا إلى السماح للعملاء بسحب الأموال. لنضف طريقة :withdraw(amount)، ولكن مع فحص أمان مهم.

على عكس الإيداعات، يمكن أن تفشل عمليات السحب. إذا حاول عميل سحب أموال أكثر مما لديه، فلا ينبغي للمصرف أن يسمح بذلك. يجب أن تتحقق طريقة withdraw من وجود أموال sufficient قبل خصم المبلغ.

ستتابع العمل باستخدام ملفيك:

  • Account.lua: أضف طريقة :withdraw(amount) إلى فئة Account الموجودة لديك. إذا كان لدى account رصيد كافٍ، فاطرح المبلغ وأعد true. إذا لم تكن هناك أموال كافية، فاطبع Insufficient funds وأعد false من دون تغيير balance.
  • main.lua: أنشئ account، وأجرِ إيداعًا لمنحه بعض الأموال، ثم حاول إجراء عدة عمليات سحب لرؤية المعاملات الناجحة والفاشلة.

ستتلقى أربعة مدخلات:

  1. مبلغ الإيداع initial
  2. مبلغ السحب first
  3. مبلغ السحب second
  4. مبلغ السحب third

في ملفك الرئيسي، أنشئ account، وأودع المبلغ initial، ثم حاول إجراء كل عملية سحب بالترتيب. بعد كل محاولة سحب، اطبع balance الحالي في سطر جديد. تذكّر أن عمليات السحب الفاشلة ستطبع أيضًا Insufficient funds قبل أن تطبع balance.

على سبيل المثال، إذا كانت المدخلات هي 100 و30 و50 و40، فينبغي أن يكون الناتج:

70
20
Insufficient funds
20

يبدأ account بقيمة 100 بعد الإيداع. تنجح عملية السحب first البالغة 30 (balance: 70)، وتنجح عملية السحب second البالغة 50 (balance: 20)، لكن عملية السحب third البالغة 40 تفشل لأنه لم يتبقَّ سوى 20، ولذلك يبقى balance عند 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)

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

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