Newsgroup: it.comp.lang.javascript
Titolo: dubbio su istruzione "continue" in un loop

Ciao a tutti. Ho un dubbio amletico.
La funzione qua sotto compie una ricerca di tipo AND su un array
"stringa", argomento della funzione, che è poi la stringa inserita
all'utente in un campo di testo e splittata. La stringa viene
confrontata con ciascuna elemento di un database db[indice] e se
coincidenza == true l'elemento del database viene aggiunto a un array
matrix (che verrà poi visualizzato come output)
La funzione non è farina del mio sacco, l'ho tratta da un testo e
adattata alle mie esigenze. Ma ho un dubbio. L'autore della funzione
sostiene che l'istruzione "continue" interrompe il loop di ricerca sulla
stringa dell'utente se non trova il primo elemento dell'array "stringa"
nell'elemento del database in quel momento sotto esame, perchè
trattandosi di una ricerca di tipo AND sarebbe inutile andare avanti a
cercare ulteriori elementi coincidenti...
Io non capisco però una cosa: l'istruzione continue secondo me non
interrompe affatto il loop di ricerca sulla stringa dell'utente: si
limita a saltare al record successivo. Ma allora è davvero necessaria ??
_grazie !_
Roberto
function ricerca_and (stringa) {
        var matrix = new Array();
        var coincidenza = true;
        for (i = 0; i < db.length; i++);
        {
                for (j = 0; j < stringa.length; j++)
                {
                        if (db[i].indexOf(stringa[j]) == -1);
                        coincidenza = false;
                        continue;
                }
                if (coincidenza)
                        matrix[matrix.length] = db[i];
        }
        stampa_output(matrix);
}


Adesso io non ho guardato bene la funzione o valutato il contesto in cui si
deve trovare.......cmq l'utilizzo o meno dell'istruzione continue dipende
dal fatto che si voglia o meno eseguire una nuova iterazione del ciclo al
verificarsi della condizione......
Con l'istruzione break ad esempio si esce dal ciclo al verificarsi della
condizione e ad esempio in un ciclo for , con l'istruzione continue ,viene
valutata l'espressione d'incremento (j) e controllata l'espressione di test
(j < stringa.length; ) per stabilire se deve essere eseguita un'altra
iterazione......
andreotta fabiano
 WebMªster ATI POWER s.n.c.
 
andr...@atipower.it
 
http://www.atipower.it
    -new-
 
http://www.afdsoftware.freeweb.org
 
http://www.jsdir.com

 verificarsi della condizione......
E' proprio questo che mi ha mandato in crisi. Nell'esempio che ho citato
ci sono due loop "for", e l'istruzione "continue" sta nel loop annidato.
Secondo me riguarda quest'ultimo, cioč esegue la successiva iterazione
sul ciclo interno e non su quello esterno. L'autore del libro da cui ho
desunto l'esempio ("JavaScript Application Cookbook", ed. O'Reilly),
perň, sembra lmsciar intendere che lui usa l'istruzione "continue" per
interrompere il ciclo esterno !
Mi sono rotto la testa per cercare da qualche parte se mi ero perso
qualcosa sui loop, ma tutto quel che ho trovato l'ho trovato sul libro
di Flanagan ("JavaScript: la guida"), dove si spiega che per
"continuare" un loop esterno bisogna farvi riferimento mediante una
etichetta. Questo č quanto ho capito io. Anche nel sito jsdir, stessa
musica.
Allora ho lasciato perdere, pensando di essere incappato in una svista
dell'autore (in fondo č umano anche lui), ma il dubbio mi č rimasto...
Grazie comunque
_Roberto_ 

 Se fai prove con questo codice, vedi anche quanti cicli risparmi.
Beh, un GRAZIE bello grosso qui ci sta bene, direi :)
Sono andato a vedere se nel sito della O'Reilly c'era una rettifica a
proposito di questa funzione, ma per il momento fra le errata online non
ho trovato nulla. Sarei quasi tentato di segnalare il mio dubbio anche
là (anche perchè il testo, qui in Italia, costa sulle 90 mila e a
giudicare dalla lista di refusi presente nel sito non è precisamente
l'unico svarione presente nel libro ...)
_ciao !_
Roberto

 sostituire con un break
Bingo. Sono tornato per sicurezza nel sito della O'Reilly, e ho trovato
questo:
In the inner "for" loop, wouldn't it be more efficient to simply "break"
out of the loop at this point, as the Boolean AND fails on the first
occurance? The way it is written, it will continue to compare the
tokenized elements of the search string to the database record, rather
than just move on to the next record.
Certo che anche i grandi editori ogni tanto sbagliano... :)
_Ciao !=
Roberto