Méthode de retrait
Fait partie de la section Object Oriented Programming du Journey Lua de Coddy — leçon 21 sur 70.
Défi
FacileVotre banque numérique s'agrandit ! Les comptes peuvent désormais recevoir des dépôts, mais une vraie banque doit également permettre aux clients de retirer de l'argent. Ajoutons une méthode :withdraw(amount)—mais avec une vérification de sécurité importante.
Contrairement aux dépôts, les retraits peuvent échouer. Si un client essaie de retirer plus d'argent qu'il n'en possède, la banque ne doit pas l'autoriser. Votre méthode de retrait doit vérifier si les fonds sont suffisants avant de déduire le montant.
Vous continuerez à travailler avec vos deux fichiers :
Account.lua: Ajoutez une méthode:withdraw(amount)à votre classe Account existante. Si le compte a un solde suffisant, soustrayez le montant et retourneztrue. S'il n'y a pas assez de fonds, affichezInsufficient fundset retournezfalsesans modifier le solde.main.lua: Créez un compte, effectuez un dépôt pour lui donner des fonds, puis tentez plusieurs retraits pour voir les transactions réussies et échouées.
Vous recevrez quatre entrées :
- Montant du dépôt initial
- Montant du premier retrait
- Montant du deuxième retrait
- Montant du troisième retrait
Dans votre fichier principal, créez un compte, déposez le montant initial, puis tentez chaque retrait dans l'ordre. Après chaque tentative de retrait, affichez le solde actuel sur une nouvelle ligne. N'oubliez pas que les retraits échoués afficheront également Insufficient funds avant que vous n'affichiez le solde.
Par exemple, si les entrées sont 100, 30, 50, et 40, la sortie devrait être :
70
20
Insufficient funds
20Le compte commence avec 100 après le dépôt. Le premier retrait de 30 réussit (solde : 70), le deuxième retrait de 50 réussit (solde : 20), mais le troisième retrait de 40 échoue car il ne reste que 20—le solde reste donc à 20.
Essayez vous-même
-- Requiert le module Account
local Account = require('Account')
-- Lit les quatre entrées
local initialDeposit = tonumber(io.read())
local withdrawal1 = tonumber(io.read())
local withdrawal2 = tonumber(io.read())
local withdrawal3 = tonumber(io.read())
-- Crée un compte unique
local account = Account:new()
-- Dépose le montant initial
account:deposit(initialDeposit)
-- Tente le premier retrait et affiche le solde
-- TODO: appeler account:withdraw(withdrawal1) ici
print(account.balance)
-- Tente le deuxième retrait et affiche le solde
-- TODO: appeler account:withdraw(withdrawal2) ici
print(account.balance)
-- Tente le troisième retrait et affiche le solde
-- TODO: appeler account:withdraw(withdrawal3) ici
print(account.balance)
Toutes les leçons de Object Oriented Programming
1Le concept de « self »
Tables avec fonctions« self » expliciteLa syntaxe avec deux-pointsPoint vs deux-pointsRécapitulatif - Point mobile4Projet : Banque numérique
Configuration du projetMéthode de dépôt7Polymorphisme et Redéfinition
Redéfinition de méthodesAppeler des méthodes parentesDuck TypingInterface communeVérification du typeRécapitulatif - Rôles des employés10Projet : Gestionnaire de formes
Configuration du projetClasse Rectangle2Modèle de prototype de classe
Le concept de prototypeLiaison avec __indexLe constructeur :new()Initialisation des attributsInstances indépendantesRécapitulatif - Usine de voitures5Surcharge d'opérateurs en POO
Additionner des objetsSoustraire des objetsConcaténer des objetsComparer des objets (<, >)Récapitulatif - Calculs de portefeuille8Encapsulation
Conventions de nommageClosures pour la confidentialitéAccès via les ClosuresTables en lecture seuleLogique de validationRécapitulatif - Coffre-fort sécurisé11Patrons de conception (Lite)
Fonctions FactoryTable SingletonPatron IteratorObserver (Écouteur)Récapitulatif - Logger Factory3État et comportement des objets
Variables d'instanceMéthodes GetterMéthodes SetterPropriétés calculéesFormatage de chaînesVérifications d'égalitéRécapitulatif - Note de l'étudiant6Bases de l'héritage
Mise en place de l'héritageHériter des méthodesÉtendre le constructeurAjouter des méthodes enfantsPartagé vs UniqueRécapitulatif - Hiérarchie des formes