# Compte bancaire

Source : https://docs.berkios.online/galerie/compte-bancaire/ · Section : Galerie · Documentation officielle BERKIOS (https://docs.berkios.online)


Une classe `Compte` avec dépôt et retrait : des champs, des méthodes et des objets.

Télécharger l'exemple : https://github.com/berkiosbuinu-server/examples/releases/latest/download/03-compte-bancaire.zip

**Type :** BERKIOS Core · **Niveau :** intermédiaire · **Fichier :** `compte.bks`

## Ce que vous allez apprendre

- Définir une **classe** avec ses champs et ses méthodes.
- Créer un objet et appeler ses méthodes.
- Modifier l'état d'un objet avec `self`.

## Avant de commencer

Connaître les fonctions Core : voir [Remise et total à payer](https://docs.berkios.online/galerie/remise-et-total/).

## Étape 1 : récupérer l'exemple

Téléchargez, décompressez, ouvrez `compte.bks` dans un éditeur de texte.

## Étape 2 : le code

```text
module "Comptes"

class Compte
  titulaire: Text
  solde: Int

  fn deposer(montant: Int) -> Int
    self.solde = self.solde + montant
    retourner self.solde

  fn retirer(montant: Int) -> Int
    self.solde = self.solde - montant
    retourner self.solde

fn main() -> Int
  soit compte = Compte("Amina", 100)
  afficher compte.deposer(50)
  afficher compte.retirer(20)
  afficher compte.solde
  retourner 0
```

## Étape 3 : lancer

```bash
berkios core compte.bks
```

```text
BERKIOS Core : Comptes — 1 fonction(s), 1 type(s) : vérification réussie.
150
130
130
```

## Le code expliqué

| Partie | Rôle |
|---|---|
| `class Compte` | Déclare un nouveau type d'objet. |
| `titulaire: Text`, `solde: Int` | Les **champs** : les données que porte chaque compte. |
| `fn deposer(montant: Int) -> Int` | Une **méthode** : une fonction qui appartient à la classe. |
| `self.solde` | `self` désigne le compte sur lequel on travaille. |
| `Compte("Amina", 100)` | Crée un objet. Les valeurs suivent l'ordre des champs : titulaire, puis solde. |
| `compte.deposer(50)` | Appelle la méthode : le solde passe de 100 à 150. |

> Cet exemple mélange des mots-clés anglais (`class`, `fn`, `Text`, `Int`) et français (`soit`, `afficher`, `retourner`) : le compilateur les accepte ensemble. Pour un code lisible, choisissez une langue et gardez-la.

## À vous de jouer : un retrait trop grand

Que se passe-t-il si on retire plus que le solde ? Remplacez `compte.solde` par `compte.retirer(500)` : le programme affiche `-370`. Le compte est devenu négatif. Ajoutons une protection avec `si` :

```text
module "Comptes"

class Compte
  titulaire: Text
  solde: Int

  fn retirer(montant: Int) -> Int
    si montant > self.solde
      afficher "Solde insuffisant"
      retourner self.solde
    self.solde = self.solde - montant
    retourner self.solde

fn main() -> Int
  soit compte = Compte("Amina", 100)
  afficher compte.retirer(500)
  afficher compte.retirer(30)
  retourner 0
```

Résultat : `Solde insuffisant`, `100`, puis `70`.

## Pour aller plus loin

- Exemple suivant : [Ma première application](https://docs.berkios.online/galerie/ma-premiere-application/) (on passe aux interfaces)
- Leçon : [Types, classes et héritage](https://docs.berkios.online/core/classes-et-types/)
