Tính tổng có chiết khấu bằng JavaScript
Trong mã bạn cung cấp, có một số vấn đề có thể được coi là "không phù hợp" hoặc chưa tối ưu:
1. Thiếu câu lệnh `return`: Hàm `calcate_total()` không trả về bất cứ thứ gì, có nghĩa là nó sẽ trả về `không xác định` theo mặc định. Bạn nên thêm câu lệnh `return` vào cuối hàm để chỉ định giá trị mà nó trả về.
2. Biến không được sử dụng: Biến `discount` được gán một giá trị nhưng không bao giờ được sử dụng. Bạn nên xóa những mã không sử dụng để tránh nhầm lẫn và làm cho mã dễ đọc hơn.
3. Những con số ma thuật: Mã sử dụng các giá trị được mã hóa cứng như `10` và `50` mà không có bất kỳ lời giải thích hay tài liệu nào. Sẽ tốt hơn nếu sử dụng các hằng hoặc biến được đặt tên để làm cho mã dễ đọc và dễ bảo trì hơn.
4. Độ phức tạp: Mã có nhiều câu lệnh `if` lồng nhau, điều này có thể gây khó hiểu và khó gỡ lỗi. Bạn có thể đơn giản hóa mã bằng cách hợp nhất một số điều kiện thành một câu lệnh `if` duy nhất hoặc sử dụng câu lệnh `switch`.
5. Thiếu xử lý lỗi: Mã không xử lý lỗi nếu người dùng nhập giá trị không hợp lệ cho phần trăm chiết khấu. Bạn nên thêm tính năng xử lý lỗi để đảm bảo rằng hàm xử lý thông tin đầu vào không mong muốn một cách khéo léo.
Dưới đây là phiên bản cập nhật của mã giải quyết các vấn đề sau:
```javascript
function Calculate_total(price, extract) {
const DISCOUNT_PERCENTAGE = 0.1; // xác định một hằng số cho tỷ lệ phần trăm giảm giá
if (discount === không xác định || giảm giá < 0 || giảm giá > 100) {
ném Lỗi mới('Giá trị giảm giá không hợp lệ');
}
const tổng = giá * (1 - (DISCOUNT_PERCENTAGE * giảm giá));
tổng số tiền trả lại;
}
```



