DEV Community

Discussion on: FizzBuzz Typescript & SOLID Principles

Collapse
 
jvanbruegge profile image
Info Comment hidden by post author - thread only visible in this permalink
Jan van Brügge • Edited

Object oriented programming is so much bloat. A lot simpler:

type Rule = (n: number)  => string;

function mkRule(div: number, word: string): Rule {
    return n => n % div === 0 ? word : '';
}

function range(start: number, end: number) {
    return [...Array(end - start).keys()]
        .map(x => x + start);
}

function fizzbuzz(rules: Rule[], end = 100): string[] {
    return range(1, end)
        .map(i => {
            const str = rules
                .reduce((word, rule) => word + rule(i), '');
            return str === '' ? `${i}` : str;
        });
}

const answer = fizzbuzz([
    mkRule(3, 'Fizz'),
    mkRule(5, 'Buzz')
]);

console.log(answer.join(', '));
Enter fullscreen mode Exit fullscreen mode
Collapse
 
jwp profile image
John Peters • Edited

Nice, single responsibility in functional style. Even more clear.

Collapse
 
jvanbruegge profile image
Jan van Brügge

Now even more functional :P

Some comments have been hidden by the post's author - find out more