Vypočítejte celkem se slevou v JavaScriptu
V kódu, který jste poskytli, je několik problémů, které by mohly být považovány za „nesprávné“ nebo neoptimální:
1. Chybí příkaz `return`: Funkce `calculate_total()` nic nevrací, což znamená, že ve výchozím nastavení vrátí `undefined`. Na konec funkce byste měli přidat příkaz `return`, abyste určili, jakou hodnotu vrací.
2. Nepoužité proměnné: Proměnná `sleva` má přiřazenou hodnotu, ale nikdy se nepoužije. Nepoužitý kód byste měli odstranit, aby nedošlo k záměně a aby byl kód čitelnější.
3. Magická čísla: Kód používá pevně zakódované hodnoty jako `10` a `50` bez jakéhokoli vysvětlení nebo dokumentace. Bylo by lepší používat pojmenované konstanty nebo proměnné, aby byl kód čitelnější a lépe udržovatelný.
4. Složitost: Kód má několik vnořených příkazů `if`, což může znesnadnit pochopení a ladění. Kód můžete zjednodušit konsolidací některých podmínek do jediného příkazu `if` nebo použitím příkazu `switch`.
5. Nedostatek zpracování chyb: Kód nezpracovává chyby, pokud uživatel zadá neplatnou hodnotu procenta slevy. Měli byste přidat zpracování chyb, abyste zajistili, že funkce zpracuje neočekávané vstupy elegantně.
Zde je aktualizovaná verze kódu, která řeší tyto problémy:
```javascript
function count_total(cena, sleva) {
const DISCOUNT_PERCENTAGE = 0,1; // definuje konstantu pro procento slevy
if (sleva === nedefinováno || sleva < 0 || sleva > 100) {
throw new Error('Neplatná hodnota slevy');
}
const total = cena * (1 - (DISCOUNT_PERCENTAGE * sleva));
vrátit celkem;
}
```



