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++; }
WHILE ciklus
A WHILE és a FOR közötti különbség abban van, hogy míg a FOR ciklusnál a ciklusváltozó kezdő- és végértéke határozta meg az ismétlések számát, a WHILE ciklusnál az ismétlések számát nem egy ciklusváltozó, hanem egy feltétel határozza meg (pl. a < b). Amíg a feltétel igaz, addig az adott parancsokat a WHILE ciklus ismételni fogja.
"ahol a for ciklus kivétel nélkül egy kibővített while."
A for egyetlen nyelvben sem kibővített while, mivel, ahogy idéztem is (c++ esetén például*) a for nem alternatívája a while-nak (fordítva ez már igaz). Ha így volna, akkor a while-t már felemésztette volna a nyelvek életében elkerülhetetlen fejlődés, letisztulás. Senki nem hülye, hogy felesleges nyelvi elemekkel terhelje a saját implementációját.
* (C++-ban a for ciklus MAJDNEM teljesen ekvivalens az elől tesztelős ciklussal (a continue viselkedése más), de más nyelvekben nem feltétlenül van ez így: a for ciklus átírható más ciklussá, de visszafelé általában NEM.)
Nem kell hozzá atomtudósnak lenni, hogy belássa bárki, a for szimplább, gyengébb, kevesebb lehetőséget felvonultató iteráció mint a while. Ez nyilvánvaló. Én magam eddig egyetlen egy, nagyon szegényes eszközkészlettel bíró nyelvet feljesztettem. Annál (nyilván) átgondoltam, hogy mit fogok implementálni egyetlen iterációs lehetőségként. Akkor is 100-ból 100 forrás a while ciklust emelte ki a többi lehetőség közül. A for ugyanakkor messze a legrosszabb. Akit korábban idéztem, annak igaza van, azért alkalmazzák a for-t, mert a többinél áttekinthetőbb, az emberi gondolkodással leginkább rokonítható.
Hatékonyságbeli ok: Compiler máshogy fordítja át a két
ciklust. Ez teljes mértékben azon múlik, hogy hogy
optimalizálták. Sok esetben a while ciklus nagy ismét-
lődési számnál gyorsabb eredményt produkál egy sima
ms compiler esetén.
A példádnál szinte mindegy, melyiket használod.
Amikor megjelentek a fejlettebb programozási nyelvek,
akkor csináltak 2 módszert, egyiket for, másikat while
névre keresztelték, más paraméterezéssel lehet őket
használni, ennek csupán kényelmi oka volt, hogy az adott
feladatot minél kevesebb agyi munkával lehessen megoldani,
és pl a for számlálóját ne kelljen állandóan fejben tarta-
ni, míg while esetén a teljes ciklust le kell játszani
fejben, különben jönnek a bugok :)
Megkérnék minden kedves (minimális önérzettel rendelkező programozót), hogy írjon az info@gyakorikerdesek.hu-ra és kérvényezze ennek a 43%-os majomnak a végleges kitiltását az oldalról, hogy megállíthassuk az elképesztően ostoba károkozását.
Linkeljétek be a kérdéseket, idézzétek a válaszokat, hogy az egyrészt miért hibás, másrészt miért iszonyú bunkó és lekezelő, mindezt nulla alapra, így az üzemeltetők is kénytelenek lesznek belátni, hogy nem való erre az oldalra.
Ha így teszünk talán ma este már nem fog részegen ide írogatni!
"A c++ nyelvben az egyetlen lényegi különbség a while és a for között a continue viselkedése, az is abban tér el, hogy a for esetében a léptetést is lefuttatja"
A continue nem futtat le semmit azon kívül hogy megszakítja a blokk futását. A ciklus van úgy megvalósítva hogy a blokkja lefutása után minden esetben megtörténjen a for harmadik argumentumában levő kód lefutása. Ezért tökéletes számlálásokhoz. És minden nyelvben így van.
"Ezért tökéletes számlálásokhoz."
Vagy nem.
"És minden nyelvben így van."
LOL
"Nem kell hozzá atomtudósnak lenni, hogy belássa bárki, a for szimplább, gyengébb, kevesebb lehetőséget felvonultató iteráció mint a while."
Még ha fordítva mondanád csak szimpla baromság lenne, így viszont ordas nagy baromság...
A for pont, hogy többet tud, annyival, hogy létezik egy "nulladik" "lépése" (az első paraméter), meg egy opcionális utolsó "lépése" (a harmadik paraméter) ami a ciklusmag utolsó utasítása után végrehajtódik.
Mellesleg visszafelé is simábban átírod, csak a for(;<feltétel>;){} hülyén néz ki.
Ahogy ez sem igaz: "a FOR ciklusnál a ciklusváltozó kezdő- és végértéke határozta meg az ismétlések számát". Ez konvenció kérdése, mint már említettük.
Honnan idézgeted a baromságaid? Kezd érdekelni mi ez a könyv amit fekete listára kell tennem a diákjaimnak.
Mondjuk ez a kedvencem:
"Ezzel csak az a baj, hogy ha a benne lévő feltételt vizsgálja, akkor már legalább egyszer le is futott, tehát nem lehet azt kijelenteni, hogy egyszer sem futott le."
:-D Remélem nem dolgozol sehol, mert aki ilyet kijelent, arra egy Hello Worldöt sem szabad bízni.
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!