Modest Programmer logo
23 września 2018
Tagi: JavaScript
Dzisaj przedstawię Ci jak napisać prosty algorytm tak zwany FizzBuzz. Co to jest FizzBuzz? FizzBuzz jest to prosty algorytm o którego napisanie często proszą rekruterzy na rozmowach kwalifikacyjnych na stanowiska młodszego programisty. Na podstawie przekazanego argumentu zwracasz odpowiednią wartość. I tak jeżeli argument jest podzielny przez 3, zwracasz Fizz, jeżeli argument jest podzielny przez 5, zwracasz Buzz, a jeżeli jest podzielny przez 3 i 5 wtedy zwracasz FizzBuzz. Jeżeli argument nie jest podzielny przez 3 ani przez 5 to wtedy zwracasz wartość argumentu i ostatni warunek jeżeli argument nie jest liczbą zwracasz "Zły argument". Nic skomplikowanego prawda? No to zaczynamy :)
function fizzBuzz(arg) {

    if (typeof arg !== 'number') 
        return 'Zły argument';

    if (arg % 3 === 0) 
        return 'Fizz';

    if (arg % 5 === 0)
        return 'Buzz';

    if (arg % 3 === 0 && arg % 5 === 0)
        return 'FizzBuzz';

    return arg;
};
Na początek sprawdzamy czy argument jest liczbą, bo jeśli nie jest, to nie będziemy wykonywać niepotrzebne operacje. Następnie sprawdzamy czy reszta z dzielenia przez 3 wynosi 0, jeżeli tak to wiadomo że argument jest podzielny przez 3 i wtedy zwracamy Fizz. Kolejne sprawdzenie czy argument jest podzielny przez 5 i wtedy zwracamy Buzz, dalej sprawdzenie czy argument jest podzielny przez 3 i 5 jednocześnie, wówczas zwracamy FizzBuzz. Jeżeli żaden z warunków nie jest prawdziwy zwracamy przekazany do funkcji argument. Wygląda na to, że wszystko jest dobrze. Wykonajmy dla pewności kilka testów:
console.log(fizzBuzz(3)); //Fizz
console.log(fizzBuzz(5)); //Buzz
console.log(fizzBuzz(15)); //Fizz
console.log(fizzBuzz(1)); //1
console.log(fizzBuzz(false)); //Zły argument
Hmm, cos poszło nie tak. Dla argumentu 15 została zwrócona wartość Fizz, a powinno być FizzBuzz. Dlaczego tak się stało? Mamy złą kolejność naszych warunków, ponieważ 15 jest podzielne przez 3 i przez 5 to 1 warunek jest również prawdziwy dla 15 i dlatego funkcja zwróciła Fizz. Jest to bardzo często popełniany błąd, gdyby nie to że zdecydowaliśmy się przetestować wszystkie warunki, to tego błędu nie udało by się wychwycić. Prawidłowo napisany algorytm FizzBuzz powinien wyglądać następująco:
function fizzBuzz(arg) {

    if (typeof arg !== 'number') 
        return 'Zły argument';

    if (arg % 3 === 0 && arg % 5 === 0)
        return 'FizzBuzz';

    if (arg % 3 === 0) 
        return 'Fizz';

    if (arg % 5 === 0)
        return 'Buzz';

    return arg;
};

console.log(fizzBuzz(3)); //Fizz
console.log(fizzBuzz(5)); //Buzz
console.log(fizzBuzz(15)); //FizzBuzz
console.log(fizzBuzz(1)); //1
console.log(fizzBuzz(false)); //Zły argument
Teraz wszystkie wyniki są prawidłowe.

To wszystko co chciałem Ci przekazać w tym artykule. Zapraszam Cię do kolejnych artykułów z serii podstaw programowania w języku JavaScript.

Poprzedni artykuł - Get i set w JavaScript.
Następny artykuł - Wprowadzenie do DOM w JavaScript.
Autor artykułu:
Kazimierz Szpin
Kazimierz Szpin
Programista C#/.NET. Głównie pisze aplikacje w ASP.NET MVC, WPF oraz Windows Forms.
Autor bloga ModestProgrammer.pl
Dodaj komentarz
© Copyright 2019 modestprogrammer.pl. Wszelkie prawa zastrzeżone. Polityka prywatności. Design by Kazimierz Szpin