Newsgroup: it.comp.programmare
Titolo: Perche' nessuno ha previsto cicli cosi?

Una cosa molto semplice e molto utile:
do
{
    istruzioni eseguite ad ogni ciclo
}
while (controllo condizione)
{
    istruzioni eseguite se la condizione ï¿œ vera (blocco x)
}
else
{
    istruzioni eseguite se la condizione ï¿œ falsa (blocco y)
}
In pratica il blocco x viene eseguito al termine di ogni ciclo se la 
condizione ï¿œ vera e quindi se verrï¿œ eseguito un nuovo ciclo.
Il blocco y viene eseguito al termine dell'ultimo ciclo.
A me sarebbe molto ma molto utile!
C'ï¿œ qualche linguaggio che implementi qualcosa di simile?

 simile?
C'è un'interessante ricerca fatta da non ricordo
quale linguista, secondo cui certi costrutti sono
non dico più o meno innati ma in qualche misura più
o meno facili da apprendere. Forse se il costrutto
che dici fosse *molto* naturale sarebbe stato prima
o poi implementato. E' possibile che presenti
qualche "difficoltà" di impatto visivo o qualcosa di
simile, ma non mi stupirei se fosse realmente molto
utile, più della sua (facile) riscrittura con i
costrutti usuali, e fosse quindi presente in qualche
linguaggio.
ciao
Apx.

 linguaggio.
Trad: "boh!"
:)

 }
non fai prima ad usare un if else all'interno di un loop ?

 C'ï¿œ qualche linguaggio che implementi qualcosa di simile?
E tu cerchi un linguaggio specifico per avere una struttura facilmente 
realizzabile in altro modo?
Mi pare che in lisp si possano definire perfino le strutture.
Prova a guardare quello...

 non fai prima ad usare un if else all'interno di un loop ?
No, perch� lo scopo di questa struttura � proprio quello di prevedere 
blocchi di codice da eseguire _dopo_ il controllo della condizione, non 
prima.
La struttura che ho proposto, oltre ad evitare di scrivere due volte lo 
stesso controllo condizionale (una volta per l'if che proponi e una 
volta per il while), permette soprattutto di operare liberamente anche 
su variabili implicate nel controllo condizionale, dopo che il controllo 
� stato fatto ma prima che venga eseguito un nuovo ciclo.
Mi sono trovato in questa situazione problematica dovendo scorrere il 
contenuto di una variabile.
La ricerca non era carattere per carattere, ma a salti, quindi il ciclo 
for (che prevede un semplice blocco di istruzioni fra un ciclo e 
l'altro: l'incremento della variabile di ciclo) non era usabile.
Per� mi serviva poter incrementare un puntatore dopo la valutazione 
della condizione, condizione che riguardava proprio la posizione del 
puntatore che quindi non potevo assolutamente incrementare prima della 
valutazione della condizione.
Ho risolto, ma un ciclo come quello qua sotto mi avrebbe fatto molto 
comodo e avrebbe prodotto codice molto pi� semplice e leggibile:
do
{
    scorrimento a salti della variabile $testo
    utilizzando il puntatore $pos e un puntatore
    temporaneo $prossimapos che si sposta in avanti
    rispetto a $pos
}
while ($pos < strlen($testo))
{
    pos = $prossimapos;
}

 realizzabile in altro modo?
Quella era una curiositï¿œ.

 condizione � vera e quindi se verr� eseguito un nuovo ciclo.
while (true) {
   // istruzioni eseguite ad ogni ciclo
   if (controllo condizione) {
      // istruzioni eseguite se la condizione � vera
   } else {
      // istruzioni eseguite se la condizione � falsa
      break;
   }
}
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Il blocco y viene eseguito al termine dell'ultimo ciclo.
C++:
while (true) {
    if (condizione) {
       // ...
    } else {
       // ...


 } 
http://www.python.org/dev/peps/pep-0315/

 C'è qualche linguaggio che implementi qualcosa di simile?
http://docs.python.org/reference/compound_stmts.html#the-while-statement
ma non sono sicuro sia quello che tu voglia.
Ciao  Manlio

 }
S� ma trattasi di un workaround pessimo. Perfettamente funzionante, 
intendiamoci, ma che rende la programmazione criptica.
Il bello della programmazione � che sia pulita, limpida, chiara gi� 
dalla prima occhiata.
Le strutture servono anche ad avere un codice pulito, semplice e chiaro.

 intendiamoci, ma che rende la programmazione criptica.
S�, non piace neanche a me. Mai usato i while (true) con condizioni
d'uscita interne. Mai usate persino funzioni con pi� punti d'uscita
(bench� comode molte volte). La tua domanda iniziale era per� un po'
criptica, nel senso che pensavo stessi chiedendo in che modo ricostruire
la stessa cosa in un qualsiasi linguaggio di programmazione. Nel modo in
cui ti ho detto implementi lo stesso algoritmo. Che poi la soluzione sia
"pulita" � tutt'altro paio di maniche.


 d'uscita interne. Mai usate persino funzioni con pi� punti d'uscita
Quoto, cicli sempre veri con break interni sono degli accrocchi orribili 
che dovrebbero essere vietati dalle regole della buona programmazione 
tanto quanto i goto.

 tanto quanto i goto.
Non bisogna esagerare per�. A volte cicli del genere possono essere utili,
cos� come il goto (per esempio � ancora il metodo pi� efficiente se si
vuol uscire da cicli annidati).


Grat ha scritto:

Perch�? Per la leggibilit� e la coerenza, l'importante che il ciclo 
contenga poche righe, al massimo quelle che si riescono a percepire 
tutte in un colpo d'occhio (10-12 forse?).
In compenso ti alleviano da variabili che servono solo per uscire dal ciclo.