@Maciej Cąderek: To dobrze, że masz mieszane uczucia bo ta funkcja jest bez sensu :) Powinna sprawdzać czy w ogóle bmi jest liczbą, czy mieści się w zakresie, w przeciwnym wypadku rzucać errorami. Gdy projekt rośnie, a bawimy się takimy funkcyjkami to potem robi się spagetti i jest masakra.
Poglądowo powinno to byc w stylu:
// config.js
const appConfig = {
bmi: {
values: [
{
name: 'Underweight',
min: 0,
max: 18.5,
},
{
name: 'Normal weight',
min: 18.5,
max: 25,
},
{
name: 'Overweight',
min: 25,
max: 30,
},
{
name: 'Obsesity',
min: 30,
max: 10000,
},
]
}
}
// helpers.js
const isNumber = val => typeof val === 'number' && val === val;
// errors.js
const errors = {
isNotANumberError: new Error('bmi must be a number type'),
bmiIsOutOfRangeError: new Error('bmi is out of range'),
}
// getBmi.js
const getBmi = async (bmi) => {
if (!isNumber(bmi)) {
throw errors.isNotANumberError;
}
const result = appConfig.bmi.values.filter(value => bmi >= value.min && bmi < value.max);
if (!result.length) {
throw errors.bmiIsOutOfRangeError;
}
return result[0].name;
};
// test.js
(async () => {
try {
const result = await getBmi(20);
console.log(result);
} catch (e) {
console.error(e);
}
})();
To wygląda jak przerost formy nad treścią, ale tylko pozornie ponieważ w dłuższej perspektywie panujemy nad projektem. Oczywiście nie wspominam tu o dalszych rzeczach typu repozytorium, linter, prietter, testy itd. itp.
Chciałem tylko dać do zrozumienia początkującym, żeby w pierwszej kolejności zajęli się nauką podstawowych narzędzi, ściągali sobie skeletony z githuba lub podglądali proste projekty, przede wszystkim nauczyli się korzystać z dokumentacji języka i bibliotek, a potem działali, bo jeśli na początku przyswoją złe nawyki to będzie kiszka w przyszłości.
A piszę tak ponieważ czasem widzę kody niektórych juniorów to włosy się jeżą.
To na tyle :)