Skip to content

Commit 7006377

Browse files
committed
[EX-7.8/st-compl] buying-laptop
Checking possibility to buying laptop, two functions (main/helper). Worth noting: - alternative solution (clear separation). FS-dev: B-3 / JS basic
1 parent b2e9e61 commit 7006377

File tree

1 file changed

+97
-0
lines changed
  • full-stack-dev/3-js-basic/7-functions/7-8-ex-buying-laptop

1 file changed

+97
-0
lines changed
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
// Пользователь:
2+
// - Возраст
3+
// - Наличие работы
4+
// - Деньги
5+
// Нужно проверить может ли он купить новый MacBook за 2000$?
6+
// Он может брать не только свои деньги, но и взять кредит. Ему дадут 500$, только если ему больше 24-х лет и он имеет работу, 100$ если ему просто больше 24-х лет и 0 в ином случае.
7+
// Напишите функцию, которая принимает данные пользователя и товара и возвращает true или false;
8+
9+
const LAPTOP_PRICE = 2000;
10+
const user = {
11+
name: 'Вася',
12+
age: 24,
13+
hasWork: false,
14+
money: 1900,
15+
};
16+
17+
function getCredit(user = {}) {
18+
let creditSum = 0;
19+
20+
if (user.age > 24 && user.hasWork) {
21+
creditSum = 500;
22+
console.log(`Одобрен кредит в ${creditSum}`);
23+
return user.money + creditSum >= LAPTOP_PRICE;
24+
} else if (user.age > 24) {
25+
creditSum = 100;
26+
console.log(`Одобрен кредит в ${creditSum}`);
27+
return user.money + creditSum >= LAPTOP_PRICE;
28+
} else {
29+
console.log('Кредит не одобрен..');
30+
return false;
31+
}
32+
}
33+
34+
function buyLaptop(user = {}) {
35+
if (user.money >= LAPTOP_PRICE) {
36+
return true;
37+
}
38+
39+
return getCredit(user);
40+
}
41+
42+
const result = buyLaptop(user);
43+
console.log(
44+
`Сможет ли ${user.name} купить себе ноутбук за ${LAPTOP_PRICE}$? ${
45+
result ? 'Да, сможет!' : 'Нет.. не сможет!'
46+
}`
47+
);
48+
49+
// ?? альтернативное решение (чёткое разделение)
50+
/**
51+
* "Чистая" функция. Её единственная задача — рассчитать и вернуть сумму кредита.
52+
* Она ничего не выводит в консоль и не принимает решений.
53+
* @param {object} userData - Данные пользователя.
54+
* @returns {number} - Сумма одобренного кредита (500, 100 или 0).
55+
*/
56+
function getCreditAmount(userData) {
57+
if (userData.age > 24 && userData.hasWork) {
58+
return 500;
59+
}
60+
if (userData.age > 24) {
61+
return 100;
62+
}
63+
return 0;
64+
}
65+
66+
/**
67+
* Основная функция, которая принимает решение о покупке.
68+
* @param {object} userData - Данные пользователя.
69+
* @param {number} productPrice - Цена товара.
70+
* @returns {boolean} - Возвращает true, если покупка возможна, иначе false.
71+
*/
72+
function canUserBuyProduct(userData, productPrice) {
73+
// 1. Проверка на свои собственные деньги (может хватает)
74+
if (userData.money >= productPrice) {
75+
console.log('Денег достаточно, кредит не требуется.');
76+
return true;
77+
}
78+
79+
// 2. Если своих денег не хватило, ТОЛЬКО ТОГДА обращаемся за кредитом.
80+
const credit = getCreditAmount(userData);
81+
82+
if (credit > 0) {
83+
console.log(`Одобрен кредит в ${credit}$`);
84+
} else {
85+
console.log('В кредите отказано.');
86+
}
87+
88+
// 3. Финальное решение с учётом кредита.
89+
return userData.money + credit >= productPrice;
90+
}
91+
92+
const resultMessage = canUserBuyProduct(user, LAPTOP_PRICE);
93+
console.log(
94+
`Сможет ли ${user.name} купить ноутбук? ${
95+
result ? 'Да, сможет!' : 'Нет, не сможет.'
96+
}`
97+
);

0 commit comments

Comments
 (0)