Newsgroup: it.comp.lang.javascript
Titolo: scegliere la condizione

Salve,
All' interno di una funzione ricorsiva ho necessita' di variare un
controllo if a seconda che un chckbx sia o meno spuntato
Per la cronaca, ma in se' non e' rilevante,
si tratta di una implementazione dell' algoritmo di  di dijkstra
(itinerario piu' breve)
e voglio che sia possibile scegliere di cercare un collegamento solo
stradale  o solo via ferrovia.
non ho trovato nulla di meglio che scrivere inizialmente il controllo
in formato stringa  (fuori ciclo, alla prima chiamata) da evalutare
quando mi servira'
qualecontrollo=document.forms.formnome.FERROVIA.checked?
'((primacondizioneaccettabile||secondacondizioneaccettabile
&&(acondizoneditrattaferroviariatrue) )':'
(primacondizioneaccettabile||secondacondizioneaccettabile)'
tradotto: voglio che se spunto: il controllo accetti solo le tratte di
tipo ferroviario che collegano le localita', se non spunto: siano
valutate tutte le tratte, anche se solo stradali
nb: a questo punto qualecontrollo e' solo una stringa
all' interno dello script che utilizza dijkstra
pongo
cecco=eval(qualecontrollo)//restituisce true o false
if (cecco){eccetera}
per funzionare funziona ma e' evidente che rallenta lo script in modo
mostruoso 
Il quesito non e' su dijkstra ma sulle modalita' di variare all'
interno di uno script il tipo di controllo
Mi rendo conto che vi richiedo doti quasi divinatorie  pero'  posto
speranzoso che qualcuno mi picchi sul crapone mostrandomi un modo piu'
efficiente
[ho un martello in mano e tutto mi sembra un chiodo]
Ciao, Paolo

 modo mostruoso
Faccio ricorso alle dote divinatorie che non possiedo, così riuscirò a fare
la mia brutta figura quotidiana.
Primo: perché salvi le condizioni in una variabile di stringa e poi ricorri
all'eval? Non è un lavoro doppio? Dovrebbe essere più efficiente:
    qualecontrollo=document.forms.formnome.FERROVIA.checked?
        ((primacondizioneaccettabile||secondacondizioneaccettabile
        &&(acondizoneditrattaferroviariatrue) ) :
        (primacondizioneaccettabile||secondacondizioneaccettabile)
e poi:
    if (qualecontrollo) eccetera
Secondo: queste condizioni cambiano durante l'esecuzione della funzione
ricorsiva? Mi sembrerebbe strano. Non sarebbe più efficiente valutare
"qualecontrollo" una volta per tutte prima che si entri nella funzione
ricorsiva?
Terzo: non conosco l'algoritmo di dijkstra (e si era capito). Ma queste cose
stuzzicano sempre il mio interesse. Non è che...?
Maurizio.


 o parole chiave
pippopd DiJkstra lo trovi
poi ho martellato parecchio.
ora il pupo e' cresciuto a pezzi e bocconi ma non essendo io un
programmatore e' dello stile un pezzo qui e un pezzo la' 
crescendo complessivamente la paginetta pesa  un enormita'
(ho aggiunto altre funzionalita')  e mi vien male adesso al solo
pensiero di sfrondarlo all' osso.
'nsomma
non e ' che sia molto leggibile...
o esempio di buona programmazione
[eufemismo] 
In realta' ho anche una remora a postare url della pagina di prova qui
perche' e'  praticamente una interfaccia delle pagine di un sito
altrui  [non commerciale]. Beninteso, il creatore del sito principale
da cui traggo la base dati (non  un database su server  ma una sequela
di array) e thumbnails e le pagine alle quali link(o)  i risultati e'
al corrente di quanto sto facendo, ma privo di autorizzazione non
credo sarebbe corretto da parte mia esporla.
Se funziona in modo adeguato verra' inglobata.
[e' appena il caso di dirlo, senza corrispettivi economici]
tornando a Dijkstra
ti segnalo ed ad altri inteerssati
http://www.csse.monash.edu.au/~lloyd/tildeAlgDS/Graph/Directed.html
mi pare una buona pagina per cominciare a vedere algoritmo di Dijkstra
professore olandese, credo, mancato nell' agosto del 2002.
ciao e grazie per l' interessamento.
E se anche alle condizioni informative sparagnine che ritengo di dover
impormi sei interessato a continuare il discorso ben volentieri eh?

        (primacondizioneaccettabile||secondacondizioneaccettabile)
 risolto (eureka)
 notevolmente piu' veloce nell' esecuzione
invece di fare un controllo complesso e unico
lo spezzo  
[faccio riferimento come nomi alle istruzioni utilizzate da pippopd
nel suo esempio piu' l' aggiunta della proprieta' ferrovia (booleana)]
lascio la condizione generica
if (aStrade[str].loc1==loc_attuale ||aStrade[str].loc2==loc_attuale)
che e' sempre discriminante e valida in ogni caso come controllo
 ma inserisco
{
{if (document.forms.formnome.FERROVIA.checked&&!aStrade[str].ferrovia)
continue
altre istruzioni da eseguire invariate}
}
essenziale l' inserimento delle parentesi graffe aggiuntive che danno
modo alla istruzione continue di reinserirsi al corretto livello dello
script
(leggi: se non le metto non funziona)
[non ho mai visto un errore intelligente]
saluti, Paolo