Как вынести блок if в отдельный кусок кода?
В функциях повторяется условие.
Как вынести его в отдельную функцию, чтобы код не повторялся?
const getRandomNumber = (min, max) => {
if (min < 0 || max < 0 || max < min) {
return null;
}
return Math.round(Math.random() * (max - min + 1)) + min;
};
const getRandomFractionalNumber = (min, max, point) => {
if (min < 0 || max < 0 || max < min) {
return null;
}
return (Math.random() * (max - min + 1) + min).toFixed(point);
};
console.log(
getRandomNumber(1, 9),
getRandomFractionalNumber(1, 9, 4),
);
Ответы (2 шт):
Автор решения: Pavel Nazarian
→ Ссылка
const condition = (min,max) => {
return !(min < 0 || max < 0 || max < min);
}
const getRandomNumber = (min, max) => {
return condition(min,max) ? Math.round(Math.random() * (max - min + 1)) + min : false;
};
const getRandomFractionalNumber = (min, max, point) => {
return condition(min,max) ? Math.round(Math.random() * Math.random() * (max - min + 1) + min).toFixed(point) : false;
}
console.log(getRandomNumber(1, 9));
console.log(getRandomFractionalNumber(1, 9, 4));
Автор решения: yar85
→ Ссылка
Повторение вообще-то от двух лишних функций где можно обойтись одной... но если хочется функцию валидации оформить отдельно, то:
const validateRndArgs = (min, max, digits) => !(min < 0 || max < 0 || max < min || digits < 0) || null;
const getRandomNumber = (min, max, digits = 0) => (
validateRndArgs(min, max, digits) && +(
min + Math.random() * (max + (10 ** -digits) / 2 - min)
).toFixed(digits)
);
console.log(
getRandomNumber(1, 9),
getRandomNumber(1, -9), // null
getRandomNumber(1, 9, 4),
getRandomNumber(1, -9, 4), // null
);
В первом случае из примера, диапазон случайного числа 1..9,5 и округление до целых (== до 9 включительно).
В третьем случае, диапазон 1..9,00005 и округление до десятитысячных (тот же принцип).
Проверки min < 0 и max < 0 выглядят совершенно излишними - если они для того чтобы в будущем еще лишних функций наплодить (для диапазонов включающих отрицательные числа), то напрасно.