Mi a helyes módja annak, hogy átalakítani a for ciklus egy while ciklus?

szavazat
1

Van egy hurok a következő formában:

for (int i = from; i < to; i++) {
  // do some code (I don't know exactly what, it is subject to change)
}

És szeretnék átalakítani, hogy egy while (leginkább azért, mert szeretnék játszani, melynek értéke ia cikluson belül, hogy menjen előre és hátra, és a munkatársam azt hiszi, hogy ezt a for ciklus hajlamosak a problémákra. Én inkább egyetértek vele). Ezért írtam, valahogy így:

int i = from;
while (i < to) {
  try {
    // do some code (I don't know exactly what, it is subject to change)
  } finally {
    i++;
  }
}

Amely a kérdést néhány néhány hangos megjegyzéseket. Saját érvelés, hogy nem tudja, mi a kód belsejében a hurok nem - ez lehet (és nem) több continueparancsokat.

Erre válaszul ezt írta:

int i = from - 1;
while (++i < to) {
  // do some code (I don't know exactly what, it is subject to change)
}

Megadott a kevésbé vonalak, de még mindig úgy gondolom kódomat elegánsabb - mit gondol?

A kérdést 03/11/2009 18:26
a forrás felhasználó
Más nyelveken...                            


6 válasz

szavazat
3

És szeretnék átalakítani, hogy egy while (leginkább azért, mert szeretnék játszani az i értéke a cikluson belül, hogy menjen előre és hátra, és a munkatársam azt hiszi, hogy ezt a for ciklus hajlamosak a problémákra. Hajlok egyetértek vele).

Ez tökéletesen elfogadható a legtöbb nyelven. Nincs ok arra, hogy elkerülje a hurok.

Válaszolt 03/11/2009 18:30
a forrás felhasználó

szavazat
5

Játék az értéke az index, míg a hurok szerkezet hajlamos a problémákat, nem számít, milyen a hurkos szerkezete .

Ez nem fog számít, ha ez egy hurok vagy while, a lényeg, akkor az indexelő végül, hogy dönteni hurok megszűnése?

Ha biztos abban, hogy te indexelő utóbb okozhat a kilépési feltétel nem érhető el, akkor ez minden, amit kell az érintett, nem hogy használ-e az, vagy egy darabig.

Válaszolt 03/11/2009 18:31
a forrás felhasználó

szavazat
0

A legegyszerűbb módja ennek az lenne, hogy ne alakuljon át, miközben hurkot, például az alábbiakban.

for (int i = from; i < to; ) {
  // do some code (I don't know exactly what, it is subject to change)
  i += rand()*10;
}
Válaszolt 03/11/2009 18:33
a forrás felhasználó

szavazat
2

Számomra úgy tűnik, hogy könnyebb lehet, és olvashatóbb átalakítani, hogy:

while (condition == true) {
   // do stuff
   // set the condition flag appropriately
}

és így szét a felmondás a hurok a változó növelés.

Ha látok egy hurkot a határ ellenőrzése (pl i < limit) azt hinni, hogy van egy változó, módosításra kerül a (ésszerűen) következetes módon. Nincs ok, amiért nem tudsz csinálni, amit akar, de én sovány felé olvashatóbb és több várható viselkedését.

Válaszolt 03/11/2009 18:34
a forrás felhasználó

szavazat
0

A választ a kérdésre, hogy melyik kód azt válassza; Azt adja meg a hosszabb kódot. Ez sokkal könnyebb olvasni az első (hosszabb) hurok. És igen tudom olvasni a második, de akkor is, ha sok tapasztalat van, hogy nézd meg kétszer tudni, hogy mi hurok csinál. Plusz a fordító optimalizálja a kódot elég jól.

Válaszolt 03/11/2009 18:35
a forrás felhasználó

szavazat
1

Miért zavarja a buta hurkok, ha lehet ugyanezt (és sokkal több!) A über-erős goto?

i = fro;
my_loop:
//all your stuff here
i++;
if (i < to) goto my_loop;

Ha Ön egyike azoknak gyenge szívű programozók, hogy csökkentik a goto, akkor próbálja meg ezzel kapcsolatban:

i = fro;
while(1) {
    //your stuff here
    if (++i < to) break;
}
Válaszolt 03/11/2009 18:38
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more