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.