Miért használnak egyesek for ciklus helyett while ciklust számláláshoz?
Van-e esetleg ennek valami hatékonyságbeli oka, vagy csak egyszerű szimpátia?
Tehát például ehelyett: for (int i = 0; i < 20; i++) { cout << i << endl; } van, aki ezt használja: int i; while (i < 20) { cout << i << endl; i++; }
"Ugyanez for esetén helyből kizárt, az ugyanis legalább egyszer mindenképpen lefut."
Elvből hülyeség amit mondasz.
Tessék itt a példa kód. Futtasd le. :)
Java:
public class Main {
... public static void main(String[] args) {
... ... System.out.println("---");
... ... for(int i = 10; i < 10; i++) {
... ... ... System.out.println(i);
... ... }
... ... System.out.println("---");
... }
}
Terminál:
$ javac Main.java
$ java Main
---
---
Én nem látok számot a 2db vonal között.
Kipróbáltam c# Ben és nem fut le a for egyszer sem ha a benne levő feltétel egyből hamis.
Úgy van. Ügyes vagy. Jár a keksz. Mondj ellent magadnak, hogy a for legalább 1x lefut.
Hűha, mik mennek itt. Oké, first things first: Alacsony szinten nem létezik olyan, hogy "for ciklus". A for ciklus lényegében egy syntax candy, ami egy while ciklust utilizál magában, ezt pedig körülveszi egy inicializációs, és egy lépéses kódszegmenssel, és az egészet egy blokkba foglalja.
A for(int i=0; i<10; i++){ Console.WriteLine(i) } nagyjából a következőnek felel meg:
{
int i=0;
while(i<10)
{
Console.WriteLine(i);
i++;
}
}
Az egész körbe van véve egy plusz kapcsos zárójellel, így a teljes ciklus egy külön blokkba kerül, ezért a benne definiált ciklusváltozó nem lesz látható a cikluson kívül.
A for ciklus éppezért egy okosított while ciklusnak tekinthető. NEm enhéz észrevenni, hogy a for(;i<10;) pontosan ugyanannak felel meg, mint a while(i<10). A for ciklus tehát bármit meg tud valósítani, ami egy while ciklusba foglalható, és egy picit többet is, rövidebb, egyszerűbb szintaxissal.
A kettő között így funkcionálisan kár különbséget keresni, a különbség a felhasználásában rejlik, ami konvención alapszik. Aki felsorolásra while ciklust használ az.. nos, nem kifejzetten követi ezt a konvenciót, amit a legtöbb helyen nem kimondottan szeretnek.
Ez olyan, mint a diesel és benzin esete. Egyik az egyikre
esküszik, másik a másikra.
Nyelvenként eltérő az eredmény, eltérő a memóriakezelés,
stacket is máshogy rakja tele.
Egyébként írj baromi hosszú ciklust, ami cikluson belül
hajt végre sima műveleteket, és nézd meg, hogy van-e
időbeli eltérés a lefutás között. Nagyon meg fogsz
lepődni.
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!