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?
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.
>> A me sarebbe molto ma molto utile!
>>
>> C'ᅵ qualche linguaggio che implementi qualcosa di
>> 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.
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;
}
> E tu cerchi un linguaggio specifico per avere una struttura facilmente
> realizzabile in altro modo?
Quella era una curiositᅵ.
> In pratica il blocco x viene eseguito al termine di ogni ciclo se la
> 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
> 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.
C++:
while (true) {
if (condizione) {
// ...
} else {
// ...
> 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;
> }
> 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?
http://docs.python.org/reference/compound_stmts.html#the-while-statement
ma non sono sicuro sia quello che tu voglia.
Ciao Manlio
> while (true) {
> // istruzioni eseguite ad ogni ciclo
> if (controllo condizione) {
> // istruzioni eseguite se la condizione � vera
> } else {
> // istruzioni eseguite se la condizione � falsa
> break;
> }
> }
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.
> S� ma trattasi di un workaround pessimo. Perfettamente funzionante,
> 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.
> 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
Quoto, cicli sempre veri con break interni sono degli accrocchi orribili
che dovrebbero essere vietati dalle regole della buona programmazione
tanto quanto i goto.
> Quoto, cicli sempre veri con break interni sono degli accrocchi orribili
> che dovrebbero essere vietati dalle regole della buona programmazione
> 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).
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.