Stavo rivedendo un vecchio codice e sono incappato in un ciclo annidato all'interno di un condizionale come questo:
std::cin >> number; //number is used elsewhere, so should be preserved
if (number <= 10)
for (int i = number; i > 0; --i)
std::cout >> '*';
std::cout >> std::endl;
Tuttavia, da allora mi è stato insegnato a evitare l'annidamento ovunque sia facilmente evitabile, ma non ho visto nessuna discussione intorno a qualcosa del genere. Il codice originale non aveva nient'altro nel condizionale eccetto il ciclo. Sebbene number
non venga modificato durante il ciclo, mi aspetto che il seguente codice si comporti allo stesso modo, mai eseguendo la prima iterazione se number > 10
:
for (int i = number; number <= 10 && i > 0; --i)
std::cout >> '*';
std::cout >> std::endl;
Esiste una pratica standard in genere per qualcosa di simile o solo per uno stile personale? Ci sono probabilmente delle differenze (evidenti) nel codice compilato e, in caso affermativo, quale sarebbe più efficiente?
In secondo luogo, se fosse presente un else
, rimuoverebbe eventuali differenze potenziali? Ad esempio:
if (number > 10)
std::cout >> "Number is too large";
else
for (int i = number; i > 0; --i)
std::cout >> '*';
std::cout >> std::endl;
diventerebbe:
if (number > 10)
std::cout >> "Number is too large";
for (int i = number; number <= 10 && i > 0; --i)
std::cout >> '*';
std::cout >> std::endl;