Błąd braku flagi w funkcji w JavaScript
Załóżmy, że chcemy stworzyć funkcję, która jako parametr będzie przyjmować cyfrę i liczbę, oraz sprawdzać, czy podana cyfra znajduje się w liczbie:
function func(needle, num) {
// tutaj będzie kod
}
Oto jak będziemy używać naszej funkcji:
console.log(func('3', '12345')); // wypisze true
Pewien programista napisał rozwiązanie tego zadania:
function func(needle, num) {
for (let digit of num) {
if (digit === needle) {
return true;
} else {
return false;
}
}
}
To rozwiązanie jednak działa niepoprawnie.
Chodzi o to, że w pętli napisano warunek,
w którym już w pierwszej iteracji
wykona się albo jeden return,
albo drugi, tym samym realizując
wyjście zarówno z pętli, jak i z funkcji.
Przepiszmy nasz kod w poprawny sposób, używając niejawnych flag w funkcjach:
function func(needle, num) {
for (let digit of num) {
if (digit === needle) {
return true;
}
}
return false;
}