From fd05f8cc592e19846082ab8bb18419be8da3c117 Mon Sep 17 00:00:00 2001 From: David Date: Thu, 17 Nov 2022 11:43:35 +0100 Subject: [PATCH] =?UTF-8?q?verbessert=20die=20Auff=C3=BChrung=20des=20clea?= =?UTF-8?q?n=20code=20Apps=20(ber=C3=BCcksichtigt=20clean=20cooding=20im?= =?UTF-8?q?=20Praxis)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chapter17/starter/clean.js | 75 +++++++++---------- 1 file changed, 36 insertions(+), 39 deletions(-) diff --git a/javascript/Javascript Expert/chapter17/starter/clean.js b/javascript/Javascript Expert/chapter17/starter/clean.js index 12274b6..8439c8b 100644 --- a/javascript/Javascript Expert/chapter17/starter/clean.js +++ b/javascript/Javascript Expert/chapter17/starter/clean.js @@ -1,4 +1,4 @@ -var budget = [ +const budget = [ { value: 250, description: "Sold old TV 📺", user: "david" }, { value: -45, description: "Groceries 🥑", user: "david" }, { value: 3500, description: "Monthly salary 👩‍💻", user: "david" }, @@ -9,56 +9,53 @@ var budget = [ { value: -1800, description: "New Laptop 💻", user: "david" }, ]; -var limits = { +const spendingLimits = { david: 1500, joanne: 100, }; - -var add = function (value, description, user) { - if (!user) user = "david"; +const getLimit = user => spendingLimits?.[user] ?? 0; +const addExpense = function (value, description, user = "david") { + // if (!user) user = "david"; // statt einen solchen urprünglichen Wert in der if Anweisung zu erstellen, + // es ist besser als einen urprünglichen Parameter in der Methode zu definieren const addExpense = function (value, description, user = "david") { user = user.toLowerCase(); - var lim; - if (limits[user]) { - lim = limits[user]; - } else { - lim = 0; - } + // let lim; + // if (spendingLimits[user]) { + // lim = spendingLimits[user]; + // } else { + // lim = 0; + // } // statt die If Anwesisungen zu definieren, ist es besser solche Bedienung als ternanry Operator zu definieren - if (value <= lim) { + // const limit = spendingLimits[user] ? spendingLimits[user] : 0; // besseres Performance und einen schöneren Überblick aud den Code zu haben + // dritte Möglicheit/oder noch bessere Lösung mit dem Optional Chaining (wird überprüft wenn spendingLimits[user] mehr als 0 ist/exixstiert, + // wenn nicht wird automatisch der Wert 0 zugewissen, ohne das Optional Chaning Operator wäre der Wert undefined + // const limit = spendingLimits[user]?.[user]; + const limit = getLimit(user); // Verwendung der Methode, damit wird DRY(Don't repeat yourself) Prinzip werwendet + + if (value <= limit) { budget.push({ value: -value, description: description, user: user }); } }; -add(10, "Pizza 🍕"); -add(100, "Going to movies 🍿", "Matilda"); -add(200, "Stuff", "Jay"); -console.log(budget); +addExpense(10, "Pizza 🍕"); +addExpense(100, "Going to movies 🍿", "Matilda"); +addExpense(200, "Stuff", "Jay"); -var check = function () { - for (var el of budget) { - var lim; - if (limits[el.user]) { - lim = limits[el.user]; - } else { - lim = 0; - } +const checkExpenses = function () { + // der Name einer Methode check, zu wenig beschreibt, was sie eigentlich checkiert, + // in unserem Fall wäre besser, checkExpenses, damit eindeutlich ist, was eigentlich diese Methode checkiert - if (el.value < -lim) { - el.flag = "limit"; - } - } + // durch was das Loop geht. Besser als nur "el" für ein Element in dem Feld zu definieren, entry + for (const entry of budget) + if (entry.value < -getLimit(entry.user)) entry.flag = "limit"; }; -check(); +checkExpenses(); -console.log(budget); - -var bigExpenses = function (limit) { - var output = ""; - for (var el of budget) { - if (el.value <= -limit) { - output += el.description.slice(-2) + " / "; // Emojis are 2 chars - } - } - output = output.slice(0, -2); // Remove last '/ ' +const logBigExpenses = function (bigLimit) { + let output = ""; + for (const entry of budget) + output += entry.value <= -bigLimit ? $entry.description.slice(-2) : ""; + output = output.slice(0, -2); console.log(output); }; + +logBigExpenses(1);