Jason. Cała informatyka w jednym miejscu!

Trzeci raz z rzędu piszę do Was tego samego dnia. Odejdźmy teraz od złożonych rzeczy i skupmy się na czymś prostszym. Taka pętla "foreach" w języku Java na przykład, która nazywana jest również "pętlą rozszerzoną". Debiut miał miejsce właśnie w Javie i pozwala na wygodniejszy sposób obsługi wszelkich tablic i list, czyli kontenerów przechowujących wiele danych w jednym miejscu. To będzie ostatni wpis na dzisiaj.

PĘTLA "FOREACH" W JĘZYKU JAVA KONTRA "ZWYKŁE FOR"

Pętla "foreach" (ang. "dla każdego") polega na obsłudze danej struktury przechowującej w sobie wiele elementów (tablica lub kolekcja) bez użycia zmiennej iteracyjnej, najczęściej znanej pod nazwą "i". Oprócz tego, skraca zapisy przy uzyskiwaniu dostępu do pojedynczego argumentu, gdyż na miejsce zmiennej liczbowej wchodzi lokalna zmienna referencyjna reprezentująca każdy pojedynczy element struktury. Przestrzegam przed jednym "ale". W Javie nie istnieje formalnie żadna pętla "foreach"! Taką nazwę wprowadzono dopiero w języku C# i tam rzeczywiście występuje takie słowo kluczowe. Ale tutaj słowo "for" pasuje do jednego, i do drugiego typu pętli!!! Żeby jakoś odróżniać te pętle między sobą (choć różnicę widać już w składni), korzysta się ze stwierdzenia "pętla rozszerzona" i to będzie oznaczać użycie "foreach". To tak na marginesie, żeby służyło jedynie rozwianiu wątpliwości spowodowanej podobieństwem nazw.

Najlepiej i w tej kwestii porównać sobie jedno z drugim. Podstawowa pętla "for" wygląda tak:

for (int i = 0; i < N; ++i) {
	// instrukcje
}

natomiast pętla rozszerzona wygląda w taki sposób:

for ([typ elementu] element : [instancja tablicy lub kolekcji tego samego typu]) {
	// instrukcje
}

Przejdźmy teraz do kodu korzystającego z tej odmiany pętli.

PRZYKŁAD KODU ŹRÓDŁOWEGO

Oto użycie prostej kolekcji "ArrayList" przechowującej liczby zmiennoprzecinkowe, tak dla małej odmiany. W środku znajduje się pętla "foreach". Przeanalizujcie to sobie na spokojnie:

KLASA "MAIN"

public class Main {
	public static void main(String[] args) {
		new ExtendedLoop();
	}
}

KLASA "EXTENDEDLOOP"

import java .util.ArrayList;

public class ExtendedLoop {
	private ArrayList<Double> numbers = new ArrayList<>();

	public ExtendedLoop() {
		addNumbers();
		sumNumbers();
	}

	private void addNumbers() {
		numbers.add(69.8);
		numbers.add(18.65);
		numbers.add(32.666);
	}

	private void sumNumbers() {
		double total = 0.0;

		for (Double n : numbers) {
			total += n;
		}

		System.out.println("Suma liczb zmiennoprzecinkowych znajdujących się w kolekcji wynosi " + total);
	}
}

Domyślnie, w tradycyjnej pętli "for" musielibyśmy podać zmienną iteracyjną, wyznaczyć granicę za pomocą metody "size" (w przypadku kolekcji) i poprzez zaangażowanie jeszcze metody "get", wydobyć konkretny argument. W sytuacjach gdy nie jest nam potrzebny indeks, pętla "foreach" okaże się dużo czytelniejsza, prostsza i wygodniejsza.

Pętla "foreach" w języku Java

Pętla "foreach" (rozszerzona) umożliwia skrócenie zapisu dotyczącego uzyskiwania dostępu do pojedynczego argumentu tablicy / kolekcji, który w tradycyjnej pętli "for" jest nieunikniony.


Moim zdaniem, więcej komentarzy nie potrzeba na taki lekki temat.

PODOBNE ARTYKUŁY