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 đ !
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 ajouterconsole.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).
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.
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 ?
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Ă©e2025
.year < startingYear + years
signifie que notre boucle sâexĂ©cutera tant queyear
sera infĂ©rieur Ă2025 + 10
.year++
signifie queyear
augmentera de 1 à chaque itération.
const startingYear = 2025;
const years = 10;
for (let year = startingYear; year < startingYear + years; year++) {
console.log({ year });
}
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.
const startingYear = 2025;
const years = 10;
const results = [];
for (let year = startingYear; year < startingYear + years; year++) {
results.push({ year });
}
console.table(results);
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 aveclet
, car nous allons la mettre à jour chaque année dans notre boucle. Au départ,balance
est Ă©gal ĂinitialAmount
.
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
.
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.
Ă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
.
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);
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.
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.
Ă 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.
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);
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 !
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);
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 !
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);
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.
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.
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.
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 ? đ