Javascript Javascript non ho capito

Stato
Discussione chiusa ad ulteriori risposte.

Fastidio

Utente Gold
1 Gennaio 2014
594
55
104
287
Ciao a tutti!
Non riesco a capire cos'è e soprattutto come si utilizza il ciclo for ... in . Me lo potete spiegare per favore?
Per tutti i scettici rompiballe: si ho cercato in internet su libri ma non ho trovato quasi nulla e quel poco che ho trovato lo spiegano malissimo quindi devo ripiegare qui a scrivere :p
Io spero che sia la sezione giusta dato che non ho trovato la sezione "javascript "

P.s.: un esecuzione ciclica di tipo iterativo .. Cosa diamine vorrebbe iterativo?
Attendo vostre risposte grazie ;)
 
Non riesco a capire cos'è e soprattutto come si utilizza il ciclo for ... in . Me lo potete spiegare per favore?
È un ciclo utilizzato per attraversare tutti gli elementi di un oggetto. In diversi linguaggi spesso è chiamato foreach.
Un esempio in C#:
C#:
 string[] marray = new string[] { "pippo",  "ciao", "123", "pizza" };
            foreach (string s in marray)
            {
                Console.WriteLine(s);
            }
In questo codice possiamo vedere che creo un array di stringhe, e in un foreach (equivalente del for in in JavaScript) applico l'iterazione di essa, stampando ogni stringa in quell'array.
Wikipedia ci dice che l'iterazione è utilizzata solitamente fino al verificarsi di particolari condizioni logiche specificate, quindi prendiamo d'esempio questo codice (sempre in C#):
C#:
string[] marray = new string[] { "pippo",  "ciao", "123", "pizza" };
foreach (string s in marray)
            {
                if (s == "123") // *
                {
                    Console.WriteLine(s);
                    break; // uscirà dal loop perchè la condizione è vera
                }
            }
* La condizione nel primo e nel secondo momento fallirà perchè vengono controllate in ordine: prima pippo, poi ciao e poi 123. Si ferma su 123 perchè la condizione è vera, e siccome abbiamo trovato il nostro elemento nell'array, usciamo dal loop logicamente.

Questo è il codice C# che ti ho mostrato prima:
C#:
string[] marray = new string[] { "pippo",  "ciao", "123", "pizza" };
            foreach (string s in marray)
            {
                Console.WriteLine(s);
            }
C'è da discutere però sul fatto che in Javascript l'approccio per iterare un'array con un for .. in non è ben accetto da tutti. Esempio:
JavaScript:
for (var e in marray) {
...
}
marray verrà interpretato come qualsiasi oggetto e attraversa tutte le proprietà dell'oggetto, per questo è definito lento come approccio.

Riassumendo tutto questo - ti elencherò i due approcci, sia quello considerato errato che quello corretto.

  • Quello considerato errato, viene:
JavaScript:
var marray = ["pippo", "ciao", "123", "pizza"];
for (var e in marray) { // e = elemento
console.log(marray[e]);
}
  • Quello considerato corretto oltre ad essere il più veloce (con un indice) viene:
JavaScript:
var marray = ["pippo", "ciao", "123", "pizza"];
for (var i=0; i<marray.length; i++) { // i = indice
   console.log(marray[i]);
}
 
Iterativo=ciclo.
Sostanzialmente una struttura iterativa (chiamata più semplicemente ciclo) permette di eseguire un'operazione (che scegli tu) un certo numero di volte.
Molto banalmente, metti per esempio che vuoi stampare in output tutti i numeri naturali compresi tra due valori:
for(int i=0; i<100; i++)
{
System.out.println(i); //la sintassi del codice che stampa l'output è in Java, non so come sia in Javascript
}
Tra il body (parte di codice tra le parentesi graffe) ci vanno le istruzioni che andranno iterate.
Generalmente la variabile (può essere benissimo anche solo temporanea) che "controlla" il ciclo venendo poi incrementata si chiama contatore o indice (la variabile i).
Quindi, volendo generalizzare il tutto, un ciclo funziona in questo modo:

for(inizializzazione variabile; condizione da rispettare perché il ciclo finisca; incremento variabile)
{
//istruzioni da iterare (BODY)
}
Come vedi i cicli, in programmazione, sono indispensabili e fondamentali non solo in alcuni algoritmi e paradigmi di programmazione ma anche per evitare al programmatore una mole di lavoro impressionante.
Concentrati molto su questa parte, è la base della programmazione.
Se hai dei dubbi comunque chiedi pure.
 
Grazie a entrambi! @Red John in javascript l'esempio che mi hai fatto è traducibile così
Codice:
for(var i=0; i<=100; i++){
     document.writeln (i); /*la sintassi del codice che stampa l'output è in Java, non so come sia in Javascript*/
}
 
Grazie a entrambi! @Red John in javascript l'esempio che mi hai fatto è traducibile così
Codice:
for(var i=0; i<=100; i++){
     document.writeln (i); /*la sintassi del codice che stampa l'output è in Java, non so come sia in Javascript*/
}
Spiega meglio quello che devi fare però (motiva quell'operatore <=).
Per stampare l'output ti ho già scritto il codice:
JavaScript:
console.log(i);
 
Si ho capito e so cos'è il ciclo for. Ma for in non ho capito cosa serve e come va ad influire su un espressione (se così posso chiamarla)
 
Ultima modifica:
Si ho capito e so cos'è il ciclo for. Ma for in non ho capito cosa serve e come va ad influire su un espressione (se così posso chiamarla)
Ok, lo spiegherò in modo più semplice, sta volta lasciamo perdere Java o C# per evitare che ti confondi, utilizzeremo solo come esempio Javascript.

1) Se devi solo stampare dei numeri che vanno ad incrementare fino ad un determinato numero sulla console, non c'è bisogno di usare un for-in loop in JavaScript.
2) Ho il seguente codice:
JavaScript:
var username;
var marray =["Red John","eagle_","nullptr","murdercode", "SpeedJack"];
for(var i=0; i<marray.length; i++){// i = indice
   console.log(marray[i]);
}
Analizziamolo:
JavaScript:
var marray =["Red John","eagle_","nullptr","murdercode", "SpeedJack"];
Qui dichiariamo un'array, cioè una lista contenente alcuni nomi di utenti Inforge a caso.
JavaScript:
var username;
Fai conto che questa variabile contiene il nome immesso dalla console da parte di un utente su una casella di testo di una pagina.
Quindi, tu non sai che cosa immette l'utente. Allora noi dobbiamo confrontare quello che immette l'utente con tutti quei nomi nell'array (in quella lista).
Facciamo così:
JavaScript:
var username;
// facciamo conto che l'utente ha messo come nome: eagle_, quindi var username è eagle_
// mettiamo conto che tu voi controllare se esiste in questa lista sotto quell'username (eagle_)
// allora dobbiamo fare " l' iterazione della lista ", "percorriamo" o meglio confrontiamo tutti gli elementi
// e vedere se esiste quell' username (eagle_)
// quest'array conta da 0, quindi non da 1.
// puoi capire da dove conta da qui: var i = 0 (all'inizio del loop, cioè il ciclo)
// perciò "Red John" è l'elemento 0, "eagle_" è l'elemento 1, "nullptr" l'elemento 2 eccetera
var marray =["Red John","eagle_","nullptr","murdercode", "SpeedJack"];
for(var i=0; i<marray.length; i++){// i = indice
  if (marray[i] == username) {  // username abbiamo detto che è eagle_
    console.log("OK!!! l'utente ha immesso l'username eagle_ che è esistente nella lista")
}
  else { // in caso che l'elemento che si sta provando a confrontare non è quello che ha immesso l'utente
    console.log("una condizione fallita")
  }
}
In sintesi: testa il primo elemento (0 - Red John), poi il secondo, (1 - eagle_) e così via...
Questo codice:
JavaScript:
if (marray[i] == username) {  // username abbiamo detto che è eagle_
    console.log("OK!!! l'utente ha immesso l'username eagle_ che è esistente nella lista")
}
nel ciclo for-in fa questi tentativi:
JavaScript:
if ("Red John" == "eagle_") { // se la stringa Red John è uguale a eagle_ allora momentaneamente non esiste, perciò prova quello successivo
}

--- quando itera un altro nome, quindi subito dopo (se la condizione fallisce) ---

if ("eagle_" == "eagle_") { // se la stringa egale_ è uguale a eagle_ allora esiste, e stampa sulla console che quell'username è contenente nella lista!
console.log("lo contiene");
}

Questo è un esempio su cosa può essere utile.
Mi sono messo nei panni di un principiante e ho tentato di non usare nessun termine troppo difficile, anche se ho fatto fatica. Spero di essermi spiegato bene, fammi qualsiasi domanda se vuoi, e ricorda comunque che almeno un minimo (non sto dicendo molto) di studio ci vuole per capire queste cose, almeno se non hai una "buona logica".
 
Si ho capito e so cos'è il ciclo for. Ma for in non ho capito cosa serve e come va ad influire su un espressione (se così posso chiamarla)
Sì, mi rendo conto che alle prime armi tutto possa sembrare così astratto.
Il mio consiglio è di cercare di capire, anche scrivendo su un foglio di carta, come "ragiona il computer" quando quel codice viene eseguito.
Ovvero, riprendiamo l'esempio stupidissimo di prima:
Lasciamo perdere la sintassi, quello che conta è l'idea.
for(int i=0; i<100; i++)
{
stampa(i);
}
Dunque, quando questo testo viene eseguito, il computer riconosce che è un ciclo.
Parte quindi da i=0, entra nel ciclo perché i=0 è MINORE di 100 (condizione d'entrata nel ciclo) e incrementa i di 1 (i=1 quindi ora). Si passa poi nel body e vengono effettuate le istruzioni tra le graffe, in questo caso di stampare i. i=1 e quindi stampa 1.
Adesso i è ancora minore di 100?
Se sì continuo il ciclo
Se no esco dal ciclo

i=1 ancora quindi l'iterazione continua.
Si rientra nel ciclo, i viene di nuovo incrementato di uno => i=2 => rientra nel body e stampa 2.
2 è minore di 100? .... e così via.
Il controllo della condizione per rimanere dentro al ciclo avviene in una prima fase istantaneamente al primissimo ciclo, poi avviene alla fine di ogni iterazione fino a raggiungere i=100, questo sarà l'ultimo ciclo e uscirà prima di stampare 100 (100 non lo stampa quindi, arriva fino a 99).

Cerca di fare tutto questo ragionamento alle prime volte, a mio parere può essere molto utile.
E' poi logico che per imparare ad utilizzare correttamente le strutture iterative devi esercitarti molto e, per capire a cosa servono più concretamente in programmazione, iniziare a lavorare con array di elementi (come negli esempi fatti da @nullptr). I cicli posso servire anche, tra le molte cose, per scorrere array di dati, ordinarli e cercare un singolo elemento.
Ti lascio qui due guide scritte dal sottoscritto (anche se sono state scritte per la sezione Java non cambia nulla se non un po' di sintassi) che potrebbero, magari tra un po' di tempo, esserti abbastanza utili:

http://www.inforge.net/xi/resources...le-sort-ordinamento-a-bolla-spiegazione.2800/
http://www.inforge.net/xi/resources/spiegazione-algoritmo-di-ricerca-ricerca-binaria.2802/
Spero di essere stato d'aiuto.
Saluti,
Red John
 
@nullptr @RedJohn vi ringrazio per le spiegazioni ho capito.
Voi il linguaggio di javascript da dove lo avete imparato? Sapete un libro valido che tratti la programmazione dai i primi passi fino a cose più difficili? (Fa niente se sono tante pagine). Il problema mio è che sto studiando da un libro in cui spiegano da cani e trattano argomenti difficili fin dalle prime pagine. Le mie conoscenze arrivano fino a html5 e css3 ma non di più :/
 
@nullptr @RedJohn vi ringrazio per le spiegazioni ho capito.
Voi il linguaggio di javascript da dove lo avete imparato? Sapete un libro valido che tratti la programmazione dai i primi passi fino a cose più difficili? (Fa niente se sono tante pagine). Il problema mio è che sto studiando da un libro in cui spiegano da cani e trattano argomenti difficili fin dalle prime pagine. Le mie conoscenze arrivano fino a html5 e css3 ma non di più :/
Io il JavaScript non l'ho mai studiato, ho solo avuto esperienze molti anni fa ma niente più di tanto. Come linguaggio è indubbiamente il più famoso e che sta avendo successo tutt'ora, ma non mi affascina tanto. Oltretutto ne so qualcosa, soprattutto su queste cose che sono molto semplici.
 
Ultima modifica da un moderatore:
@nullptr @RedJohn vi ringrazio per le spiegazioni ho capito.
Voi il linguaggio di javascript da dove lo avete imparato? Sapete un libro valido che tratti la programmazione dai i primi passi fino a cose più difficili? (Fa niente se sono tante pagine). Il problema mio è che sto studiando da un libro in cui spiegano da cani e trattano argomenti difficili fin dalle prime pagine. Le mie conoscenze arrivano fino a html5 e css3 ma non di più :/
Per quanto mi riguarda il Javascript non l'ho mai studiato (per quello negli esempi che ti ho fatto non ho usato la sintassi), comunque con un po' di pazienza su Internet trovi tutto.
E' normale che lo trovi diverso dall'html e dal css, questi ultimi non sono dei veri linguaggi di programmazione in quanto non prevedono l'utilizzo e la definizione di variabili, strutture dati et similia (vengono definiti infatti linguaggi di markup).
Comunque il linguaggio di programmazione per il programmatore è solo uno strumento, quando si sa programmare poco importa se si tratta di Javascript, Java, C++ o qualsiasi altro linguaggio di programmazione (a meno che non cambi proprio il paradigma), c'è solo da adattarsi alla sintassi (con questo ovviamente non voglio dire che i linguaggi sono tutti uguali, sia chiaro).
L'importante comunque è non farsi spaventare dalla complessità degli argomenti, bisogna avere molta pazienza in questo campo.
 
Stato
Discussione chiusa ad ulteriori risposte.