Jaký je správný způsob, jak převést ze smyčky for do while?

hlasů
1

Mám pro smyčku ve tvaru:

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

A já chci, aby jej převést na while (hlavně proto, že chci hrát s hodnotou ivnitřní smyčky jít dopředu a dozadu a můj spolupracovník myslí, že dělá to v cyklu for je náchylný k problémům. Mám sklon Souhlasíte s ním). Tak jsem napsal něco jako:

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

Který podnítil některé některé hlasité komentáře. Moje úvaha je, že nevíte, co je kód uvnitř smyčky dělá - to může (a dělá) mít více continuepříkazů.

V reakci napsal toto:

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

Udělena jeho méně linek, ale stále si myslím, můj kód je elegantnější - Co si o tom myslíš?

Položena 03/11/2009 v 18:26
zdroj uživatelem
V jiných jazycích...                            


6 odpovědí

hlasů
3

A já chci, aby jej převést na while (hlavně proto, že chci hrát s hodnotou i uvnitř smyčky jít dopředu a dozadu a můj spolupracovník myslí, že dělá to v cyklu for je náchylný k problémům. Mám sklon dohodnout s ním).

To je naprosto přijatelné ve většině jazyků. Neexistuje žádný důvod, aby se zabránilo smyčky for.

Odpovězeno 03/11/2009 v 18:30
zdroj uživatelem

hlasů
5

Hraní s hodnotou indexu, zatímco ve struktuře smyčkování je náchylný k problémům, bez ohledu na to, co je opakování struktura .

Nebude to na tom, jestli je to pro smyčce nebo while, jde o to bude indexer nakonec dovede k rozhodnutí o ukončení smyčky?

Pokud jste přesvědčeni, že jste indexovací nakonec způsobí, že vaše exit podmínka má být dosaženo, pak to je vše, co by měl být zaujatý, ani zda se má použít pro nebo na chvíli.

Odpovězeno 03/11/2009 v 18:31
zdroj uživatelem

hlasů
0

Nejjednodušší způsob, jak to udělat, je to převést do while, například jak je uvedeno níže.

for (int i = from; i < to; ) {
  // do some code (I don't know exactly what, it is subject to change)
  i += rand()*10;
}
Odpovězeno 03/11/2009 v 18:33
zdroj uživatelem

hlasů
2

Zdá se mi, že to může být jednodušší a srozumitelnější převést jej na adresu:

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

a tak oddělit ukončení smyčky od proměnné inkrementaci.

Když vidím smyčku s mezní kontrolou (např i < limit) bych tendenci se domnívat, že tam je proměnná, která je modifikována (rozumně) konzistentním způsobem. Neexistuje žádný důvod, proč nemůžete dělat, co chcete, ale já bych se přiklánět k čitelnější a očekávané chování.

Odpovězeno 03/11/2009 v 18:34
zdroj uživatelem

hlasů
0

Chcete-li odpovědět na otázku, o které kódují bych vybrat; I vybrat delší kód. Jeho mnohem čitelnější první (delší) smyčky. A ano, mohu číst druhým, ale i když máte spoustu zkušeností se musíte podívat dvakrát vědět, co to dělá smyčku. Plus kompilátor optimalizuje kód dost dobře.

Odpovězeno 03/11/2009 v 18:35
zdroj uživatelem

hlasů
1

Proč se obtěžovat s hloupými smyček, když si můžete udělat to samé (a mnohem více!) S uber-mocné goto?

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

Pokud jste jedním z těch slabým srdcem programátorů, které snižují goto, pak můžete zkusit s tímto:

i = fro;
while(1) {
    //your stuff here
    if (++i < to) break;
}
Odpovězeno 03/11/2009 v 18:38
zdroj uživatelem

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