Newsgroup: it.comp.lang.javascript
Titolo: parametrizzare ciclo in javascript ???

In un form devo fare una serie di controlli Javascript del tipo:
if (document.Xpresenze.1.value > 2400)
	{ alert ("allarme"); };
if (document.Xpresenze.2.value > 2400)
	{ alert ("allarme"); };
...........
if (document.Xpresenze.100.value > 2400)
	{ alert ("allarme"); };
Posso parametrizzare il tutto con un ciclo del tipo:
for (NNN=0 ; NNN < 100 ; NNN++)
   if (document.Xpresenze.NNN.value > 2400)
	{ alert ("Allarme"); };
Come??
Nella mia ignoranza non riesco a "inserire" il parametro NNN ...

 Nella mia ignoranza non riesco a "inserire" il parametro NNN ...
straFAQ : document.Xpresenze.elements[NNN].value
-- 
[25 Luglio 2005] Roma sotto allarme terrorismo per via degli ultimi
attentati a Londra e Sharm-el-Sheikh.
Il TG4 di Emilio Fede manda un servizio sul rischio dei pedoni per via
delle strisce pedonali sbiadite.

 if (document.Xpresenze.1.value > 2400)
Attenzione: quell'"1" che č? name e id *NON* devono iniziare con un
numero...mettici un prefisso (tanto lo starai generando server-side, ci
metti un attimo). 
Consideriamo quindi che ogni input ha name="I_numero".
with(document.forms['Xpresenze'])
 for(var x=0;x<elements.length;x++)
  if(elements['I_'+x].value>2400)
   alert("allarme");
Quanto sopra in generale (per esempio presuppone che nella form ci siano
solo gli input text che ti interessano...altrimenti, se sai quanti sono a
priori, x<elements.length puň diventare un numero fisso oppure scritto
server-side, dipende dal contesto)
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M.

 Nella mia ignoranza non riesco a "inserire" il parametro NNN ...
Si chiama "square bracket notation". In JS ci si può riferire ad una
proprietà/metodo di un oggetto sia tramite la "dot notation" che la "square
bracket notation".
-- 
~ "Nell'anno 1969 è bastata la potenza di calcolo di due Commodore 64 per
mandare con successo una navicella sulla Luna. Nell'anno 2003 è
necessario un Pentium 4 a 2000 Mhz per far funzionare Windows XP.
Qualcosa deve essere andato storto."

 with(document.forms['Xpresenze'])
;)


 ;)
ghghgh 8)
-- 
~ "Nell'anno 1969 č bastata la potenza di calcolo di due Commodore 64 per
mandare con successo una navicella sulla Luna. Nell'anno 2003 č


 ghghgh 8)
???
-- 
"Ti sei salvato
 o sei entrato in banca pure tu?"
									    A.V.

 ???
Ci si riferisce al thread sull'uso del with. :)


 Ci si riferisce al thread sull'uso del with. :)
Aaaah quando si diceva che rallenta un po'hetto...in contesti come questo
per me è quasi indispensabile...
-- 
"qualcuno è andato per età
 qualcuno perchè già dottore
 e insegue una maturità, si è sposato, fa carriera
 ed è una morte un po' peggiore"
									    F.G.

 per me è quasi indispensabile...
Secondo me no. Un codice del genere:
with(document.forms['Xpresenze'])
 for(var x=0;x<elements.length;x++)
  if(elements['I_'+x].value>2400)
   alert("allarme");
Oltre che più performante, a mio avviso è molto più leggibile in questa
forma:
var els=document.forms["Xpresenze"].elements;
for (var i=0;i<els.length;i++)
	if ( els["I_"+i].value > 2400 )
		alert("allarme");
(a onor del vero, per migliorarne la leggibilità a prescindere dal codice,
si potrebbe aggiungere una variabile per il riferimento all'oggetto form, e
dare un nome più esplicativo ad "els")
In verità l'uso che viene fatto di "with" in quel modo, non è propriamente
l'uso per il quale dovrebbe essere usato; se uno legge bene tra le righe
della reference.
-- 
~ "Nell'anno 1969 è bastata la potenza di calcolo di due Commodore 64 per
mandare con successo una navicella sulla Luna. Nell'anno 2003 è


 Secondo me no. Un codice del genere:
[CUT]
Eh, qua entriamo nei meandri dell'abitudine...ricorda che arrivo dal basic
dove il with è sempre stato il mio pane quotidiano. 
A mio avviso invece è più leggibile la mia (ma è altamente soggettivo),
forse perché dò per scontato che ci sia una e una sola form, e così diventa
più semplice e stringato (praticamente leggo element e capisco...). 
E' solo abitudine IMHO, la velocità oggigiorno non penso possa rubarsi più
di qualche millisecondo, almeno per il 99,9% degli utilizzi.
-- 
"E' l' ignoranza che crea l'intolleranza
 di gente cieca e senza coscienza"
									  S.S.S.

 di qualche millisecondo, almeno per il 99,9% degli utilizzi.
Personalmente io non la vedo solo come questione di abitudine, ma anche di
buona programmazione.
Insomma, si può dire che nella maggior parte dei casi, su web, le
performance non sono rilevanti. Ma questo non ci autorizza a scrivere del
codice dichiaratamente non performante, tipo un recupero di una collection
ad ogni ciclo di for (mi pare che anche tu una volta scrivesti un
getElementsBy"qualcosa" in un for :) ), o cose analoghe.
Si può fare, se i vantaggi in termini di riusabilità e leggibilità del
codice sono effettivamente rilevanti. Allora, come si suol dire, il gioco
vale ampiamente la candela.


 buona programmazione.
Io no, non vedo differenze di buona programmazione tra le 2 logiche.
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.


E poi su ff 1.06 viene fuori un warning dicendo che il with e'
deprecato... quindi in teoria ne viene proprio sconsigliato l'utilizzo
perche' potrebbe venire rimosso... giusto?

 Io no, non vedo differenze di buona programmazione tra le 2 logiche.
Scrivere del codice dichiaratamente poco performante, senza una notevole
contropartita ti sembra buona programmazione? O il fatto che questo possa
minarne la leggibilità? (ti rimando alla descrizione di "leggibilità" del
post precedente)


 lento) sia a livello "umano".
Sì, boh, forse lo usiamo a 2 livelli diversi. Io non credo di aver mai
scritto un with con all'interno del blocco 200 righe, più o meno è sempre
per approcci tipo questo esempio. Certo che se sono 200 righe torna scomodo
come dichiarare delle var all'inizio della function...
-- 
"e mai che mi sia venuto in mente
 di essere più ubriaco di voi
 di essere molto più ubriaco di voi"
									  F.D.A.

 come dichiarare delle var all'inizio della function...
Sicuramente per approcci di questo tipo il with non lo uso, per i motivi
che ho già spiegato.
Ma secondo me il punto è un altro: come dice il documento sui veri
programmatori,  "Il Vero Programmatore puo' scrivere un ciclo DO lungo 5
pagine senza fare confusione", e per quanto possa a lui apparire leggibile
non è propriamente tale.
Insomma, se tu scrivi codice solo per te, al quale poi magari rimetti mano
in modo abbastanza continuativo (e non lo lasci a sé stesso per tre anni
senza buttarci occhio), è un conto. Ma se lavori in team, o per terzi o con
terzi (intesi questi terzi come sviluppatori), o su codice altrui, vedresti
la differenza.


 Come l'eval, per quanto mi riguarda, esiste bene o male un unico caso.
Questa la reference che utilizzo (ecmascript 262), non ci arrivo proprio
sul quando è indispensabile...
12.10 The with Statement
Syntax
WithStatement :
with ( Expression ) Statement
Description
The with statement adds a computed object to the front of the scope chain
of the current execution
context, then executes a statement with this augmented scope chain, then
restores the scope chain.
- 68 -
Semantics
The production WithStatement : with ( Expression ) Statement is evaluated
as follows:
1. Evaluate Expression.
2. Call GetValue(Result(1)).
3. Call ToObject(Result(2)).
4. Add Result(3) to the front of the scope chain.
5. Evaluate Statement using the augmented scope chain from step 4.
6. Let C be Result(5). If an exception was thrown in step 5, let C be
(throw, V, empty), where V is the
exception. (Execution now proceeds as if no exception were thrown.)
7. Remove Result(3) from the front of the scope chain.
8. Return C.
NOTE
No matter how control leaves the embedded 'Statement', whether normally or
by some form of abrupt
completion or exception, the scope chain is always restored to its former
state.
-- 
"Ho smesso di fumare.
 Vivrò una settimana di più.
 E in quella settimana pioverà a dirotto"
									    W.A.

 WithStatement :
[snip]
C'č anche piů di quanto ti serve per capire l'effettivo uso di with; o
meglio il caso in cui non se ne puň fare a meno (cosě come succede per
l'eval).
In ogni caso, i vari passaggi elencati dovrebbero farti capire quanto l'uso
di with sia notevolmente poco performante, soprattutto nei casi in cui
sussistono dei cicli all'interno del blocco.
-- 
~ "Nell'anno 1969 č bastata la potenza di calcolo di due Commodore 64 per
mandare con successo una navicella sulla Luna. Nell'anno 2003 č


 persone non ci arriva subito; ma solo se ci sbatte il capo contro.
uhm ci dici quale sia il caso?
grazie

 uhm ci dici quale sia il caso?
"Sai benissimo che la pappa pronta da me non l'avrai. :) Quel che cerco di
fare io è stimolare la materia grigia con qualche spunto, poi le persone
devono fare il loro personale percorso per arrivarci."
-- 
~ "Nell'anno 1969 è bastata la potenza di calcolo di due Commodore 64 per
mandare con successo una navicella sulla Luna. Nell'anno 2003 è


 
uhm proprio pronta non è perchè piu' o meno tutti ci siamo letti e 
riletti la documentazione e ci abbiamo pensato su. Poi la cosa è palese 
per cui sarà cosa da poco o che ci siamo già accorti.

 per cui sarà cosa da poco o che ci siamo già accorti.
...oppure sta solo facendo lo sborone?  :-)


 Poi la cosa è palese per cui sarà cosa da poco o che ci siamo già accorti.
Si tratta solo dell'unico caso in cui si può considerare tecnicamente il
with indispensabile, a parer mio allo stesso modo dell'unico caso in cui
l'eval diventa indispensabile. Né più né meno.
Se uno non si è mai imbattuto in tale casistica, saperlo o non saperlo non
fa differenza.


 ...oppure sta solo facendo lo sborone?  :-)
Beh, se volessi fare lo sborone avrei tante altre tematiche che potrei
portare... 8)
Tornando seri, ho semplicemente voluto precisare che la tua affermazione,
detta con assoluta certezza, sul fatto che "il with non è mai
indispensabile" non era corretta. Tutto qui. Non volevo certo imbastire
tutto 'sto discorso. :)


 indispensabile" non era corretta. 
Beh, non hai precisato nulla, hai solo ipotizzato...e io insisto: secondo
me sei te che ti stai sbagliando.....


 e io insisto: secondo me sei te che ti stai sbagliando.....
Ah, eretico. :)
Scherzi a parte, le vicende passate insegnano - e tu che mi conosci
dovresti anche saperlo - che se affermo queste cose è difficile che mi
sbagli, è più facile il contrario.


 sbagli, è più facile il contrario.
Eggià...per questo insisto, sai, i programmatori sono curiosi e proprio
perché immagino tu abbia ragione vorrei sapere questo stranissimo caso
(così lo passo anche agli sviluppatori M$ di 
vb.net
 e vedo come hanno
risolto, se è riproponibile in quest'altro ambiente/contesto)


 risolto, se è riproponibile in quest'altro ambiente/contesto)
Probabilmente in contesti diversi vi sono alternative migliori.


 riparleremo ad una futura cena.
Quando vuoi, io ad Agosto lavorerò di bestia tutto il mese, fino al 20
Settembre sono blindato, quindi...quando vuoi


 Settembre sono blindato, quindi...quando vuoi
Io sarň in ferie le due settimane centrali di agosto, e quella a cavallo
tra la fine di agosto e l'inizio di settembre. Tranne questi periodi,
quindi, un buco per vedersi lo trovo volentieri.
-- 
~ "Nell'anno 1969 č bastata la potenza di calcolo di due Commodore 64 per
mandare con successo una navicella sulla Luna. Nell'anno 2003 č


 quindi, un buco per vedersi lo trovo volentieri.
Settimana prossima quindi. Ci sentiamo magari Lunedì per tipo martedì o
mercoledì.
