Menu
Coddy logo textTech

Conventions de nommage

Fait partie de la section Programmation orientée objet du Journey Lua de Coddy. Leçon 43 sur 70.

En Lua, tous les champs de table sont accessibles publiquement par défaut. N’importe qui peut lire ou modifier directement self.health. Bien que Lua n’impose pas la confidentialité, les programmeurs utilisent des conventions de nommage pour communiquer une intention : signaler quels champs doivent être traités comme des détails d’implémentation internes.

La convention standard consiste à préfixer les champs privés par un trait de soulignement :

local Player = {}
Player.__index = Player

function Player:new(name)
    local obj = {
        name = name,      -- Public : ok d'y accéder directement
        _health = 100,    -- Privé : utilisez les méthodes à la place
        _score = 0        -- Privé : suivi interne
    }
    setmetatable(obj, Player)
    return obj
end

function Player:getHealth()
    return self._health
end

function Player:takeDamage(amount)
    self._health = self._health - amount
end

Le trait de soulignement ne modifie pas le fonctionnement de Lua : player._health reste techniquement accessible. Cependant, il sert d’avertissement clair aux autres programmeurs (et à vous-même dans le futur) : « Ce champ est censé être privé. Accédez-y plutôt par l’intermédiaire de méthodes. »

Cette convention est importante, car elle sépare l’interface (ce que les autres doivent utiliser) de l’implémentation (la manière dont elle fonctionne en interne). Si vous devez plus tard ajouter une validation ou modifier la manière dont la santé est stockée, vous ne modifiez que les méthodes : le code utilisant :getHealth() continue de fonctionner sans changement.

challenge icon

Défi

Facile

Construisons une classe BankAccount qui indique correctement quels champs sont censés être privés en utilisant la convention de nommage avec un trait de soulignement !

Vous organiserez votre code sur deux fichiers :

  • BankAccount.lua : créez une classe qui gère les informations du compte. Le constructeur :new(ownerName, initialBalance) doit enregistrer le nom du propriétaire dans un champ public (owner) et le solde dans un champ privé (_balance). Incluez trois méthodes :
    • :getBalance() : renvoie le solde actuel
    • :deposit(amount) : ajoute le montant à _balance
    • :getOwner() : renvoie le nom du propriétaire
  • main.lua : importez votre module BankAccount, lisez le nom du propriétaire, le solde initial et le montant du dépôt saisis. Créez un compte, effectuez un dépôt, puis affichez le propriétaire et le solde final.

Vous recevrez trois entrées :

  1. Le nom du propriétaire
  2. Le solde initial (un nombre)
  3. Le montant du dépôt (un nombre)

Votre sortie doit comporter deux lignes indiquant le propriétaire et le solde final après le dépôt :

Owner: {ownerName}
Balance: {finalBalance}

Par exemple, si les entrées sont Maria, 500 et 150, la sortie doit être :

Owner: Maria
Balance: 650

Souvenez-vous que le préfixe avec un trait de soulignement de _balance indique aux autres programmeurs que ce champ doit être consulté via des méthodes comme :getBalance() et :deposit(), et non directement. Le champ owner sans trait de soulignement indique qu'il est possible d'y accéder publiquement.

Essayez vous-même

-- Charger le module BankAccount
local BankAccount = require('BankAccount')

-- Lire les entrées
local ownerName = io.read()
local initialBalance = tonumber(io.read())
local depositAmount = tonumber(io.read())

-- TODO: Créer un nouveau BankAccount avec ownerName et initialBalance

-- TODO: Effectuer un dépôt en utilisant depositAmount

-- TODO: Afficher le propriétaire et le solde final dans le format requis
-- Format :
-- Owner: {ownerName}
-- Balance: {finalBalance}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Compilateur Lua en ligne