Milyen gyakran szoktál hátultesztelő (do - while) ciklust használni?

Címkék

Havi rendszerességgel (fejlesztő vagyok)
5% (22 szavazat)
Havi rendszerességgel (nem vagyok fejlesztő)
3% (13 szavazat)
Évente egyszer-kétszer (fejlesztő vagyok)
20% (80 szavazat)
Évente egyszer-kétszer (nem vagyok fejlesztő)
13% (51 szavazat)
Nem is tudom mikor láttam olyat utoljára (fejlesztő vagyok)
25% (100 szavazat)
Nem is tudom mikor láttam olyat utoljára (nem vagyok fejlesztő)
17% (70 szavazat)
Csak az eredmény érdekel
16% (66 szavazat)
Összes szavazat: 402

Hozzászólások

[X] amikor szukseg van ra :)

amugy miert erdekes ez?

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

amugy miert erdekes ez?

A héten írtam egyet, és nagyon szokatlan volt. Rájöttem, hogy egyetem óta gyakorlatilag foreach (és szinonimái) ciklust használtam, esetleg néha egy-egy for/while, de do-while a legkevésbé sem fordult elő. Gondoltam megkérdezem, hogy más is így van-e ezzel.

Nem is értem a kérdést: "gyakran"?!
Nem szoktam azon gondolkodni, hogy "kellene ide egy ciklus, de ne legyen hátultesztelős, mert azt a múlt héten már használtam"
Azt használom amire szükség van.

És még van egy olyan szintaktikai fogás is, hogy


#define Kavarás(x) \
do { something(x); action(x); } while(0)

Ez ugyebár egy hátultesztelő ciklus. De mi a fene az előnye? Az, hogy tehetünk mögé [illetve kötelező is tenni] vesszőspontot pl. ilyen helyzetben:


if (i==j) Kavarás(i);
else printf ("Nem kellett a kavarás\n");

Ugyebár ha a 'Kavarás' simán egy blokk lett volna, akkor ez lenne belőle:


if (i==j) { something(i); action(i); };
else printf ("Nem kellett a kavarás\n");

ami a fordítónak azt sugallná, hogy az 'else' előtt két utasítás van: egy blokk, meg egy null.

Én épp azt vitatom, hogy ezt használják.
A google szerint van rá 149 találat erre ad 12 találatot 2 oldalon. A "mutasd mindet" után már csak 141 találat van.
Ettől az egyenbillengészeti körduplányra is több találat van, mégse mondanád azt, hogy ezt használják...

Igaz, igaz, nem néztem utána, betippeltem hogy van sok, elégszer hallottam így, hogy ne lepődjek meg ezen.
Ilyen kevés google találattal (aminek egy része ráadásul a vesszőspont karakterről szól) én is a hibás használat felé hajlok, mint létező szinonímára.
(Nem érdemes idegeskedni, ha úgy alakul akkor egy fél év sem kell, és mindenki erőltetetten így fogja használni ha akarod ha nem, aztán csak te idegesíted magad.)

Engedd meg, hogy a te hozzászólásodra válaszolva foglaljam össze ezt az alkotó vitát, a későbbjövők dolgát megkönnyítendő.

-- Ilyen szó nincs, hiszen egy dolognak nem lehet egynél több neve.
-- De lehet, ezt nevezzük szinonimának.

-- Ilyen szó nincs, hiszen én nem használom, nem is találkoztam még vele.
-- És mégis vannak olyanok, akik használják.

-- Ilyen szó nincs, hiszen kevesen használják.
-- Oké, neked van igazad, ilyen szó nincs.

Épp most optimalizáltam egy hátultesztelős ciklust előre kiszámolt indexelősre. A sokszor futó belső ciklusmag eggyel kevesebb utasításból áll így fordítás után :-).

Szóval az idei találkozásom megvolt a hátultesztelős ciklusokkal, de igazából -1-re kellene szavaznom, mert kiirtottam.

Amúgy egyáltalán nem vagyok ellene, csak valahogy sosem jut eszembe csinálni.

+1 "sosem jut eszembe csinálni"

Pont a napokban jött fel egy kérdés, amire hirtelen repeat-es megoldás jutott eszembe (random ID-t kellett volna generálni, a már meglévők mellé, és nem volt jó sem dátum alapú, sem általam ismert hash formájú string sem), de mire belemásztam volna (5 perc) meg is változott a terv ("legyen x ügyfél / y. számla").

(És azóta se jut eszembe egyszerűbb megoldás, de az se, hogy ezelőtt mikor volt utoljára szükségem rá, nem kizárt az se, hogy sose kellett használnom.)

Epp a napokban jottem ra, hogy amit Epam Academy-n mutattak anno, hogy hogy is kene modern Spring webappot irni, az gyakorlatilag funkcionalis vonalon megy, illetve vett at dolgokat. Nem csoda, hogy nem ertettem, mi ez a nagy felhajtas a funkcionalis korul, mikor mar alapvetoen hasonlo stilusban kodolok :)

Hát, most lehet hogy nagyon hülyének fogtok nézni... persze én is megtanultam az elöltesztelőset meg a hátultesztelőset, mégis a gyakorlatban eszméletlen sokszor valami olyasmire van szükségem, amit sehol sem tanítottak: középen tesztelősre. Ahol mész körbe-körbe, és az egyetlen kilépés a körben se nem közvetlenül a belépési pont előtt, se nem közvetlenül amögött van, hanem kábé a kör átellenes felén. Mittommén van 5 utasításnyi előkészület, aztán leellenőrzöl valamit, és ha még benn kell maradni, akkor további 7 utasítás, meg az előző 5 újra, és aztán csekkolod megint hogy mész-e tovább. Technikailag ilyenkor az ember csinál egy végtelen ciklust (ami lehet akár while vagy for, akár do-while, utóbbit csak azért kerülöm mert szintaktikailag ronda), és középen feltételesen breakel.

Szerintem igy, idoben megadva, kb. akkor lenne ertelme a kerdesnek, ha mindenki ugyanannyit programozna (es folyamatos lenne).

Ha valaki havonta programoz mondjuk egy-ket napot, de mindig do-while-t hasznal mas meg napi rendszeresseggel programoz, de csak evente do-while-ozik, akkor ez a kerdes lehet, hogy hamis megallapitasra vezet.

Amugy +1 arra, hogy attol fugg, hogy hogyan adja ki jobban.

/sza2

Zavarba jöttem, mire szavazzak, inkább leírom. Nem vagyok programozó, de azért olykor szükségem van rá. Magas szintű nyelven - a szóhasználatomban ez minden, ami nem assembly - szinte kizárólag elől tesztelőset írok. Ha az élet úgy hozza, hamarabb írok break-et, mintsem hátul tesztelős ciklust.

Ezzel szemben assembly-ben jellemzően, azaz szinte kizárólag hátul tesztelőset írok. Egykoron Z80-ra kitalálták a DJNZ-t:

LD B, const
LOOP: ...
...
DJNZ LOOP
....

Vagy PIC assembly-ben, bx-et valahová allokáltuk a memóriában korábban:

movlw const
movwf bx
loop: ...
...
decfsz bx
goto loop
...

No, nem mintha ne lehetne vizsgálni, pollingolni egy hardware eseményt akár.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Épp tegnap írtam egy ilyet:


loop do
	...
	if ... then
		...
		break
	end
end

Majd a következő iterációban az egész ciklus/if ki lett cserélve egy .each/.select kombóra.
______________
"If you immediately know the candlelight is fire, the meal was cooked a long time ago."

Nem vagyok fejlesztő, de most meglepett, hogy Perlben a do {} while () NEM ciklus, azaz a last, next nem ebből lép ki, hanem (ha van), a külső ciklusból. Agyhalál.