Вынесите правила делимости и соответствующие строки в данные, затем собирайте результат из всех совпавших правил в фиксированном порядке.
Как бы ты реализовал расширяемость бизнес-правил FizzBuzz (например, добавление нового правила для числа 7), чтобы код был поддерживаемым и чистым?
Вынесите правила делимости и соответствующие строки в данные, затем собирайте результат из всех совпавших правил в фиксированном порядке.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Вынесите правила делимости и соответствующие строки в данные, затем собирайте результат из всех совпавших правил в фиксированном порядке.
const rules = [
{ divisor: 3, text: 'Fizz' },
{ divisor: 5, text: 'Buzz' },
{ divisor: 7, text: 'Bazz' }
];
function fizzBuzz(number, rules) {
const result = rules
.filter(rule => number % rule.divisor === 0)
.map(rule => rule.text)
.join('');
return result || String(number);
}
Контракт: целое число и заранее проверенные положительные делители с непустыми текстами. Новое правило добавляется без вложенных if. Порядок правил задаёт порядок слов при нескольких совпадениях.