Mi a különbség a for és a foreach között?
Akkor a példák alapján láthatod, hogy a FOR ciklust akkor használják, ha a ciklus ismétlésénél kulcsfontosságú szerepet játszik egy számláló (valamettől valameddig el kell számolni és ez alapján csinálni valamit), míg a FOREACH ciklust általában valamilyen felsorolható adatszerkezet (string, tömb, lista, stb.) elemeinek bejárására használják.
Bővebben:
Programozási nyelvtől függően a FOR ciklus lehet:
1) Előre meghatározott lépésszámú ciklus,
2) vagy lehet feltételes, elöltesztelő, kezdőfeltételes ciklus.
Az első esetre egy példa a Pascal nyelv:
for [identifier] := [integer_expression] to [integer_expression] do ...
Példa: for i := 1 to 5 do ...
for [identifier] := [integer_expression] downto [integer_expression] do ...
Példa: for i := 5 to 1 do ...
Ezekben a nyelvekben azért előre meghatározott lépésszámú, mert azt adod meg, hogy mettől meddig akarsz elszámlálni.
A második esetre a C-szerű nyelvek a példa:
for (int i = 1; i <= 5; i++)
Ezekben a nyelvekben ez a ciklus azért feltételes, mert egy kérdést teszel fel a számítógépnek, amire igennel vagy nemmel válaszolhat. Ebben a példában: "Az i kisebb vagy egyenlő öttel?"
Elöltesztelő, mert a számítógép a feltételt előbb ellenőrzi, minthogy a ciklusmagot végrehajtaná.
Kezdőfeltételes, mert addig hajtja végre a ciklusmagot a számítógép, amíg a kérdésre igennel válaszol. Amint egyszer hamis választ ad a kérdésre, a ciklus ismétlését abbahagyja.
A FOREACH ciklus - amely nyelv támogatja - pedig arra jó, hogy egy általad megadott felsorolható adatszerkezetből mindig kiválasztja a soron következő elemet, amelyet egy általad megadott változón keresztül érhetsz el a ciklusmagon belül:
int[] tomb = { 1, 2, 3 };
foreach (int kivalasztott_elem in tomb) Console.WriteLine(kivalasztott_elem);
Három megjegyzés a FOREACH ciklusról:
1) igazából ez csak egy szintaktikai könnyítés a programozónak
2) amit FOREACH ciklussal meg tudsz csinálni, azt meg tudod FOR vagy WHILE ciklussal is
3) az esetek nagy részében az iterator design pattern-t használja ki
Bocsi, elbénáztam. Javítom:
Példa: for i := 5 to 1 do ...
helyett
Példa: for i := 5 downto 1 do ...
"Ezekben a nyelvekben ez a ciklus azért feltételes, mert egy kérdést teszel fel a számítógépnek, amire igennel vagy nemmel válaszolhat. Ebben a példában: "Az i kisebb vagy egyenlő öttel?""
Hát, ez mondjuk egy jó nagy hülyeség.
A számlálós ciklus soha nem feltételes.
7:
1. Nem kötelező a válaszadás. Azoknak meg kifejezetten nem ajánlott, akik maguk is erősen hiányos ismeretekkel bírnak. Mi értelme annak, hogy a hülyeséget terjeszti valaki? Aki nem tud arabusul, az ne beszéljen arabusul.
2. Bár nem szokásom a wikipédiára hivatkozni, ez a szócikk véletlenül nagyon a helyén van, ráadásul magyarul - íme:
Egy hülyeség sajnos volt ebben a szócikkben is, tételesen ez:
"Hasonló példa a Pascalban írt alábbi hátul tesztelő végtelen ciklus is, amely egy billentyű lenyomására várakozik (addig ismétli a semmit, amíg egy billentyűt meg nem nyomnak).
repeat until keypressed;"
A végtelen ciklustól ez bizony nagyon messze van. A végtelen ciklusból ugyanis nincs kilépési lehetőség - ezért is végtelen -, ebből meg van.
A foreach adatszerkezetek bejárására alkalmas. Ebben az esetben a bejárásra nincs ráhatásod, mindig csak az aktuálisan vizsgált elemet tudod feldolgozni. Nem tudod, hogy ez hányadik, vagy hogy milyen sorrend alapján kapod meg az elemeket, ugyanis ez az adatszerkezet implementációs részlete. Akkor használod, amikor ezek nem érdekelnek.
A for egy olyan vezérlési szerkezet, melynek három része van: inicializáció, iteráció előtt lefutó feltétel, iteráció után lefutó utasítás. Ezek közül a legtöbb nyelvben bármelyik kihagyható. Elég nagy szabadságot kínál, gyakorlatilag bármilyen adat feldolgozására szabható.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!