wynik = 0; for (i = 0; i < tab.length; i++) { wynik += tab[i]; } W języku JavaScript podany w ramce fragment funkcji ma za zadanie
wynik = 0; for (i = 0; i < tab.length; i++) { wynik += tab[i]; }W języku JavaScript podany w ramce fragment funkcji ma za zadanie
A. wyświetlić wszystkie elementy tablicy.
B. dodać do każdego elementu tablicy stałą wartość.
C. wprowadzić do każdego elementu tablicy aktualną wartość zmiennej i.
D. policzyć sumę wszystkich elementów tablicy.
Pytanie z egzaminu CKE, styczeń 2020 (arkusz E.14-SG-20.01).
Ten fragment kodu oblicza sumę wszystkich elementów tablicy tab i zapisuje ją w zmiennej wynik. Na początku wynik = 0 ustawia wartość startową, czyli tak zwany akumulator. Potem pętla for przechodzi po kolejnych indeksach tablicy: i zaczyna się od 0, działa dopóki i < tab.length, a po każdym obiegu zwiększa i o 1. Instrukcja wynik += tab[i] oznacza dokładnie to samo co wynik = wynik + tab[i]. Czyli do dotychczasowej sumy dopisywana jest wartość bieżącego elementu tablicy. Jeśli tab ma wartości [2, 5, 3], to wynik po kolei przyjmie 2, potem 7, potem 10. W praktyce taki schemat jest bardzo częsty: liczenie sumy cen w koszyku, punktów gracza, średniej ocen albo łącznej liczby wyświetleń. Z mojego doświadczenia to jeden z najważniejszych wzorców w programowaniu: przejście po tablicy i akumulacja wyniku. W nowoczesnym JavaScript dobrą praktyką byłoby zadeklarować zmienne przez let, np. let wynik = 0; oraz let i = 0, żeby nie tworzyć przypadkiem zmiennych globalnych. W kodzie produkcyjnym często spotkasz też metodę reduce(), ale klasyczna pętla for jest nadal bardzo dobra do nauki, bo dokładnie pokazuje co dzieje się z indeksem i z wartością sumy.
W tym kodzie łatwo pomylić samo przechodzenie po tablicy z modyfikowaniem albo wyświetlaniem jej elementów. Pętla for rzeczywiście odwiedza każdy element tablicy, bo używa indeksu i oraz warunku i < tab.length, ale wewnątrz pętli nie ma instrukcji, która wpisywałaby coś do tablicy. Gdyby celem było wprowadzenie aktualnej wartości i do każdego elementu, pojawiłby się zapis w rodzaju tab[i] = i. Tutaj jest odwrotnie: wartość tab[i] jest odczytywana i dodawana do zmiennej wynik. To ważna różnica, bo operator przypisania do elementu tablicy zmienia dane, a operator += przy zmiennej wynik zmienia tylko akumulator sumy. Kod nie wyświetla też elementów tablicy, ponieważ nie ma tu console.log(), alert(), document.write() ani żadnej operacji na DOM. Samo odwołanie do tab[i] nie powoduje prezentacji danych użytkownikowi, ono tylko pobiera wartość z pamięci programu. Nie jest to również dodawanie stałej wartości do każdego elementu tablicy. Taki zapis wyglądałby raczej tak: tab[i] += 5, czyli zmieniany byłby konkretny element tablicy. W pokazanym fragmencie elementy tablicy pozostają bez zmian, a zmienia się jedynie zmienna wynik. Typowy błąd myślowy polega tu na zauważeniu operatora += i uznaniu, że coś jest dodawane do tablicy. Trzeba jednak patrzeć na lewą stronę instrukcji. Lewa strona to wynik, więc właśnie wynik rośnie w każdej iteracji. Moim zdaniem to dobra zasada przy analizie kodu: najpierw sprawdź, co jest po lewej stronie przypisania, bo tam trafia rezultat działania.