Calculateur d'Ă©pargne 💾

Calculateur de compte Ă©pargne 💾

Les sous-titres sont disponibles en français.

Bienvenue dans votre premier projet ! Notez que je m’attends Ă  ce que vous ayez terminĂ© les leçons de la section Premiers pas 🧑‍🎓. Si ce n’est pas le cas, commencez ici.

Dans ce projet, nous allons coder un calculateur de compte épargne. Cela vous permettra de pratiquer les bases que nous avons vues dans les leçons précédentes et de renforcer ces concepts avec un exemple concret.

Voici ce que vous verrez dans votre terminal Ă  la fin de ce projet. Votre calculateur gĂ©nĂ©rera des taux d’intĂ©rĂȘt annuels alĂ©atoires, alors parfois vous gagnerez 📈, et parfois vous perdrez 📉 !

Une capture d'écran montrant le terminal VS Code avec un tableau et des chaßnes de caractÚres affichés.

Vous voulez ĂȘtre prĂ©venu quand de nouvelles leçons sont publiĂ©es ? Abonnez-vous Ă  l'infolettre ✉ et donnez une ⭐ au cours sur GitHub pour me garder motivé ! Cliquez ici pour me contacter.

Quelle est la question ?

En journalisme (et dans de nombreux autres domaines), il est important d’identifier clairement la question Ă  laquelle on veut rĂ©pondre dĂšs le dĂ©but.

Voici la question à laquelle nous voulons attaquer aujourd’hui :

  • Combien pourrais-je gagner en plaçant mon argent dans un compte Ă©pargne ?

Dans mes projets, j’aime identifier un indicateur dĂšs le dĂ©but qui rĂ©pondra Ă  la question. Ici, l’indicateur serait la diffĂ©rence entre le montant initial et le solde final du compte.

En gĂ©nĂ©ral, il y a Ă©galement des variables ou des paramĂštres que l’on peut identifier dĂšs le dĂ©part d’un projet. Voici quelques facteurs pouvant influencer les rĂ©sultats :

  • Le montant initial d’argent.
  • Le taux d’intĂ©rĂȘt du compte.
  • La fluctuation du taux d’intĂ©rĂȘt.
  • Le nombre d’annĂ©es pendant lesquelles l’argent restera dans le compte.

De plus, pour simplifier notre travail, décidons de travailler avec des taux annuels. Nous mettrons donc à jour le solde du compte une fois par an.

Avec cela en tĂȘte, nous pouvons commencer Ă  coder notre calculateur !

Environnement de travail

Créez un nouveau dossier quelque part sur votre ordinateur, ouvrez-le avec VS Code, et créez deux fichiers :

  • main.ts, oĂč nous Ă©crirons notre code. Pour commencer, vous pouvez ajouter console.log("Hello!"); dedans.
  • deno.json, qui permet Ă  VS Code de savoir qu’il s’agit d’un projet Deno et active l’extension Deno. Vous pouvez ajuster les paramĂštres dans ce fichier, mais nous le laisserons vide pour l’instant.

Ouvrez le terminal et exécutez la commande suivante :
deno run --watch --check main.ts

Cette commande efface le terminal et réexécute main.ts à chaque fois que vous le sauvegardez (CMD + S sur Mac ou CTRL + S sur PC).

Une capture d'écran montrant VS Code exécutant et surveillant un fichier TypeScript.

Nombre d’annĂ©es

Si l’argent reste dans le compte Ă©pargne pendant 10 ans, cela signifie que nous devons mettre Ă  jour le solde 10 fois, une fois par an.

Cela semble ĂȘtre une tĂąche parfaite pour une boucle !

Commençons par itĂ©rer sur les annĂ©es. Nous pouvons crĂ©er une variable years pour qu’il soit facile de modifier le nombre d’annĂ©es souhaitĂ© et de relancer le script.

main.ts
const years = 10;
 
for (let year = 0; year < years; year++) {
  console.log({ year });
}
💡

Vous vous demandez peut-ĂȘtre ce qu’est { year } dans le code ci-dessus. C’est une façon plus courte d’écrire { year: year }. Cela demande Ă  votre ordinateur de crĂ©er un objet avec une clĂ© year associĂ©e Ă  la valeur contenue dans la variable year. Court et efficace, n’est-ce pas ?

Une capture d'écran montrant VS Code exécutant un fichier TypeScript avec une boucle.

Au lieu d’avoir des nombres de 0 Ă  9, il serait prĂ©fĂ©rable d’avoir des annĂ©es.

Ajoutons une variable startingYear et mettons Ă  jour notre code.

Voici ce qui se passe maintenant avec notre boucle Ă  la ligne 4 :

  • let year = startingYear signifie que notre boucle commencera avec l’annĂ©e 2025.
  • year < startingYear + years signifie que notre boucle s’exĂ©cutera tant que year sera infĂ©rieur Ă  2025 + 10.
  • year++ signifie que year augmentera de 1 Ă  chaque itĂ©ration.
main.ts
const startingYear = 2025;
const years = 10;
 
for (let year = startingYear; year < startingYear + years; year++) {
  console.log({ year });
}

Une capture d'écran montrant VS Code exécutant un fichier TypeScript avec une boucle pour afficher les années.

Pendant que nous y sommes, nous pourrions stocker chaque objet pour chaque année dans une liste nommée results et tout afficher sous forme de tableau.

main.ts
const startingYear = 2025;
const years = 10;
 
const results = [];
 
for (let year = startingYear; year < startingYear + years; year++) {
  results.push({ year });
}
 
console.table(results);

Une capture d'écran montrant VS Code affichant un tableau dans le terminal.

Taux d’intĂ©rĂȘt et solde

Passons maintenant à l’argent !

Nous pourrions créer trois nouvelles variables :

  • initialAmount pour stocker l’argent que nous mettons dans le compte Ă©pargne au dĂ©part. J’ai mis 5 000 $.
  • interestRate pour stocker le taux d’intĂ©rĂȘt annuel. Je l’ai fixĂ© Ă  2 %.
  • balance, qui reprĂ©sente le solde du compte Ă©pargne. Cette variable devrait ĂȘtre créée avec let, car nous allons la mettre Ă  jour chaque annĂ©e dans notre boucle. Au dĂ©part, balance est Ă©gal Ă  initialAmount.
main.ts
const initialAmount = 5000;
const interestRate = 2;
const startingYear = 2025;
const years = 10;
 
let balance = initialAmount;
 
const results = [];
 
for (let year = startingYear; year < startingYear + years; year++) {
  results.push({ year });
}
 
console.table(results);

Dans notre boucle, nous pouvons maintenant créer la variable gainsOrLosses pour stocker les gains ou pertes pour chaque année, puis mettre à jour balance en conséquence.

Nous pouvons également ajouter gainsOrLosses et balance à notre liste results.

main.ts
const initialAmount = 5000;
const interestRate = 2;
const startingYear = 2025;
const years = 10;
 
let balance = initialAmount;
 
const results = [];
 
for (let year = startingYear; year < startingYear + years; year++) {
  const gainsOrLosses = balance * (interestRate / 100);
 
  // C'est une façon plus courte d'écrire :
  // balance = balance + gainsOrLosses
  balance += gainsOrLosses;
 
  results.push({ year, gainsOrLosses, balance });
}
 
console.table(results);
💡

Notez que gainsOrLosses est créé Ă  l’intĂ©rieur des accolades de la boucle. Il est scopĂ© dans le bloc de code dĂ©limitĂ© par les {}, ce qui signifie qu’il n’existe qu’à l’intĂ©rieur de ce bloc. Si vous essayez de l’afficher Ă  la ligne 19, vous obtiendrez une erreur. Le scoping est une fonctionnalitĂ© importante qui aide Ă  Ă©viter les conflits de variables, mais qui permet Ă©galement Ă  l’ordinateur de libĂ©rer de la mĂ©moire lorsqu’une variable n’est plus nĂ©cessaire.

Une capture d'écran montrant VS Code avec un calculateur de compte épargne de base.

Ça fonctionne ! Vous avez dĂ©jĂ  un calculateur de compte Ă©pargne de base ! Voyez-vous les intĂ©rĂȘts composĂ©s faire fructifier votre argent ? đŸ’”

Améliorons-le maintenant.

Arrondir les valeurs

Par dĂ©faut, nos ordinateurs n’arrondissent pas les valeurs. Nous devons leur indiquer de le faire.

Pour cela, nous pouvons utiliser l’objet global Math. Il est toujours disponible lorsque vous codez et contient de nombreuses mĂ©thodes et constantes pratiques. Dans notre cas, nous utiliserons Math.round(), qui arrondit un number Ă  l’entier le plus proche.

Ici, nous avons juste besoin d’arrondir gainsOrLosses.

main.ts
const initialAmount = 5000;
const interestRate = 2;
const startingYear = 2025;
const years = 10;
 
let balance = initialAmount;
 
const results = [];
 
for (let year = startingYear; year < startingYear + years; year++) {
  const gainsOrLosses = Math.round(balance * (interestRate / 100));
 
  balance += gainsOrLosses;
 
  results.push({ year, gainsOrLosses, balance });
}
 
console.table(results);

Une capture d'écran montrant VS Code affichant des valeurs arrondies pour un calculateur de compte épargne.

Randomiser les taux d’intĂ©rĂȘt

Cela fonctionne plutĂŽt bien, mais dans la vie, les taux d’intĂ©rĂȘt fluctuent au fil du temps.

Bien sĂ»r, nous ne pouvons pas prĂ©dire l’avenir, mais nous pouvons randomiser le taux d’intĂ©rĂȘt pour rendre les choses un peu plus intĂ©ressantes.

Pour cela, nous pouvons utiliser Math.random(), qui renvoie un nombre compris entre 0 et 1.

Voyons cela en action en l’appelant dans notre boucle. Nous pouvons commenter console.table(results) pour l’instant.

main.ts
const initialAmount = 5000;
const interestRate = 2;
const startingYear = 2025;
const years = 10;
 
let balance = initialAmount;
 
const results = [];
 
for (let year = startingYear; year < startingYear + years; year++) {
  console.log(Math.random());
 
  const gainsOrLosses = Math.round(balance * (interestRate / 100));
 
  balance += gainsOrLosses;
 
  results.push({ year, gainsOrLosses, balance });
}
 
// console.table(results);
💡

Il existe de nombreux algorithmes alĂ©atoires. Math.random() renvoie une distribution approximativement uniforme, ce qui signifie que vous avez Ă  peu prĂšs la mĂȘme chance d’obtenir n’importe quel nombre entre 0 et 1. Par ailleurs, ne l’utilisez pas pour quoi que ce soit liĂ© Ă  la sĂ©curitĂ©. Ce n’est pas un algorithme sĂ»r cryptographiquement.

Une capture d'écran montrant VS Code affichant des valeurs aléatoires.

À moins d’ĂȘtre extraordinairement chanceux, vous n’aurez pas les mĂȘmes nombres que moi d’affichĂ©s dans le terminal. La seule certitude est que nous aurons tous les deux des nombres compris entre 0 et 1.

Pour randomiser notre taux d’intĂ©rĂȘt (qui est actuellement 2), nous aimerions avoir quelque chose d’infĂ©rieur ou supĂ©rieur Ă  2, de maniĂšre alĂ©atoire. Cette fluctuation pourrait ĂȘtre positive ou nĂ©gative.

Pour obtenir un nombre aléatoire positif ou négatif, nous pouvons simplement soustraire 0.5 à nos nombres aléatoires.

main.ts
const initialAmount = 5000;
const interestRate = 2;
const startingYear = 2025;
const years = 10;
 
let balance = initialAmount;
 
const results = [];
 
for (let year = startingYear; year < startingYear + years; year++) {
  console.log(Math.random() - 0.5);
 
  const gainsOrLosses = Math.round(balance * (interestRate / 100));
 
  balance += gainsOrLosses;
 
  results.push({ year, gainsOrLosses, balance });
}
 
// console.table(results);

Une capture d'écran montrant VS Code affichant des valeurs aléatoires comprises entre -0.5 et 0.5.

Maintenant que nous avons des nombres alĂ©atoires compris entre -0.5 et 0.5, nous devons dĂ©cider de l’amplitude de ces fluctuations.

Nous pouvons crĂ©er une nouvelle variable interestRateRange. Je l’ai fixĂ©e Ă  20.

Si nous multiplions nos nombres alĂ©atoires par cette amplitude, nous obtenons maintenant des valeurs alĂ©atoires comprises entre -10 et 10. Cela ressemble Ă  une excellente fluctuation de taux d’intĂ©rĂȘt !

main.ts
const initialAmount = 5000;
const interestRate = 2;
const interestRateRange = 20;
const startingYear = 2025;
const years = 10;
 
let balance = initialAmount;
 
const results = [];
 
for (let year = startingYear; year < startingYear + years; year++) {
  const randomNumber = Math.random() - 0.5;
  const randomFluctuation = randomNumber * interestRateRange;
  console.log(randomFluctuation);
 
  const gainsOrLosses = Math.round(balance * (interestRate / 100));
 
  balance += gainsOrLosses;
 
  results.push({ year, gainsOrLosses, balance });
}
 
// console.table(results);

Une capture d'écran montrant VS Code affichant des valeurs aléatoires comprises entre -10 et 10.

Nous pouvons maintenant ajouter cette fluctuation Ă  notre interestRate. Comme interestRate est dĂ©fini Ă  2 % dans mon code, cela me donne un taux d’intĂ©rĂȘt de 2 % ± 10 % pour une annĂ©e donnĂ©e. Cela signifie que le taux d’intĂ©rĂȘt tombera alĂ©atoirement entre -8 % (une trĂšs mauvaise annĂ©e) et 12 % (une performance incroyable) !

Mettons à jour notre code et affichons de nouveau notre tableau. Par souci de simplicité, nous pouvons également arrondir notre randomInterestRate. Maintenant, à chaque fois que vous sauvegardez (CMD + S sur Mac ou CTRL + S sur PC), vous verrez des résultats différents !

main.ts
const initialAmount = 5000;
const interestRate = 2;
const interestRateRange = 20;
const startingYear = 2025;
const years = 10;
 
let balance = initialAmount;
 
const results = [];
 
for (let year = startingYear; year < startingYear + years; year++) {
  const randomNumber = Math.random() - 0.5;
  const randomFluctuation = randomNumber * interestRateRange;
  const randomInterestRate = Math.round(interestRate + randomFluctuation);
 
  const gainsOrLosses = Math.round(balance * (randomInterestRate / 100));
 
  balance += gainsOrLosses;
 
  results.push({
    year,
    interestRate: randomInterestRate,
    gainsOrLosses,
    balance,
  });
}
 
console.table(results);

Une capture d'écran montrant VS Code affichant des résultats aléatoires.

Répondre à la question

Nous avons maintenant tout ce qu’il nous faut pour rĂ©pondre Ă  notre question.

Tout d’abord, rĂ©cupĂ©rons le dernier objet dans notre liste results. Cet objet contient le solde final.

En l’utilisant, nous pouvons calculer les pertes ou gains finaux et afficher la rĂ©ponse appropriĂ©e.

main.ts
const initialAmount = 5000;
const interestRate = 2;
const interestRateRange = 20;
const startingYear = 2025;
const years = 10;
 
let balance = initialAmount;
 
const results = [];
 
for (let year = startingYear; year < startingYear + years; year++) {
  const randomNumber = Math.random() - 0.5;
  const randomFluctuation = randomNumber * interestRateRange;
  const randomInterestRate = Math.round(interestRate + randomFluctuation);
 
  const gainsOrLosses = Math.round(balance * (randomInterestRate / 100));
 
  balance += gainsOrLosses;
 
  results.push({
    year,
    interestRate: randomInterestRate,
    gainsOrLosses,
    balance,
  });
}
 
// Comme les index commencent Ă  0,
// l'index du dernier élément
// est le nombre d'éléments moins 1.
const lastResult = results[results.length - 1];
const finalGainsOrLosses = lastResult.balance - initialAmount;
 
if (finalGainsOrLosses > 0) {
  console.log("\nCongratulations! You've made money!\n");
} else if (finalGainsOrLosses < 0) {
  console.log("\nSorry! You've lost money!\n");
} else {
  console.log("\nYou've neither lost nor gained money!\n");
}
 
console.table(results);
💡

Le \n au début et à la fin du texte aux lignes 35, 37 et 39 est un caractÚre spécial qui indique un saut de ligne. Il est souvent utilisé dans le terminal pour ajouter des lignes vides et rendre le tout plus lisible.

Ce serait une bonne chose d’ajouter plus de dĂ©tails, comme les gains ou pertes rĂ©alisĂ©s, Ă  la fois en chiffres absolus et en pourcentage.

main.ts
const initialAmount = 5000;
const interestRate = 2;
const interestRateRange = 20;
const startingYear = 2025;
const years = 10;
 
let balance = initialAmount;
 
const results = [];
 
for (let year = startingYear; year < startingYear + years; year++) {
  const randomNumber = Math.random() - 0.5;
  const randomFluctuation = randomNumber * interestRateRange;
  const randomInterestRate = Math.round(interestRate + randomFluctuation);
 
  const gainsOrLosses = Math.round(balance * (randomInterestRate / 100));
 
  balance += gainsOrLosses;
 
  results.push({
    year,
    interestRate: randomInterestRate,
    gainsOrLosses,
    balance,
  });
}
 
const lastResult = results[results.length - 1];
const finalGainsOrLosses = lastResult.balance - initialAmount;
const perc = Math.round(
  (finalGainsOrLosses / initialAmount) * 100,
);
 
if (finalGainsOrLosses > 0) {
  console.log(`
Congratulations! You've made money!
Initial amount: $${initialAmount}
Final amount: $${lastResult.balance}
Gains: $${finalGainsOrLosses} (+${perc}%)
`);
} else if (finalGainsOrLosses < 0) {
  console.log(`
Sorry! You've lost money!
Initial amount: $${initialAmount}
Final amount: $${lastResult.balance}
Losses: $${finalGainsOrLosses} (${perc}%)
`);
} else {
  console.log("\nYou've neither lost nor gained money!\n");
}
 
console.table(results);
💡

Les lignes ajoutées ici (35-40, 42-47) utilisent des template literals. Lorsque vous écrivez du texte avec des backticks (`), vous pouvez créer du texte sur plusieurs lignes. Vous pouvez également insérer des variables ou du code dans le texte en utilisant ${}. Par exemple, `Deux multiplié par deux donne ${2 * 2}` créera le texte "Deux multiplié par deux donne 4". Les template literals sont trÚs utiles pour créer du texte dynamique qui change en fonction de vos données et des résultats de vos analyses.

Une capture d'écran montrant VS Code affichant les résultats d'un calculateur de compte épargne.

Félicitations !

Wow ! Vous venez de coder votre premier projet concret avec TypeScript. Vous pouvez ĂȘtre fier de vous.

Ajustez les valeurs. Changez les paramĂštres. Amusez-vous !

Ce n’est que le dĂ©but. Maintenant que vous connaissez les bases, qui sait jusqu’oĂč tout cela vous mĂšnera ? 🚀

Vous avez aimé ? Vous voulez ĂȘtre prĂ©venu quand de nouvelles leçons sont publiĂ©es ? Abonnez-vous Ă  l'infolettre ✉ et donnez une ⭐ au cours sur GitHub pour me garder motivé ! Contactez-moi si vous avez des questions.