Visualizzazione dei risultati da 1 a 5 su 5

Discussione: un piccolo aiuto

  1. #1

    un piccolo aiuto

    salve a tutti.. da un mesetto che sto cercando di imparare JS (il mio primo linguaggio di programmazione) e nonostante i primi periodi abbia faticato un po', adesso le cose sembra che vadano per il verso giusto.
    Sto seguendo delle lezioni su youtube per capire anche un po' di pratica e c'era questo esercizietto qui:

    for(var i = 0, j = 9; i <= j; i++, j--)
    {
    document.write(i + (j + " "));
    document.write(br);
    }
    e dovrebbe stampare 09 18 27 36 45. ma se tolgo la stringa vuota mi esce una sfilza di 9... ora la mia domanda è: quella stringa serve per dire a JS che si tratta di stringa e quindi deve concatenare e non aggiungere? Lo so che è banale per voi, ma sto cercando di curare tutto nei minimi particolari per avere una buona base. Grazie in anticipo!!!

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,746
    quella stringa serve per dire a JS che si tratta di stringa e quindi deve concatenare e non aggiungere?
    Ciao, esattamente come hai detto. Più in generale si parla del casting implicito (o altri termini come "implicit type coercion"), secondo cui l'interprete JavaScript esegue una conversione automatica del tipo di dati per poter risolvere l'espressione.

    La conversione di tipo è comunque stabilita in base a molteplici fattori che possono presentarsi nell'espressione, come i tipi di valore in gioco, i vari operatori, la posizione e la priorità usata per la risoluzione delle singole operazioni e quindi dell'intera espressione.

    Qui alcuni riferimenti:
    Cosa vuol dire effettuare il cast di un oggetto ad un altro tipo di dato?
    Conversioni tra tipi di variabili
    Typecasting in Javascript

    Ora, il tuo è un esempio relativamente semplice ma può comunque risultare difficile (anche per i meno principianti) comprendere cosa sta avvenendo dietro le quinte per ottenere quel particolare risultato; ci sono poi casi molto più complessi per cui è praticamente impossibile capirne il procedimento per la risoluzione, usato dall'interprete, se non si ha piena conoscenza di tutte le procedure applicate nell'elaborazione. Questo per dire che a livello pratico può essere giusto utile conoscere in linea generale alcuni comportamenti relativi alle operazioni più comuni; sarà poi l'esperienza, e i vari casi che andrai ad incontrare man mano, a determinare l'apprendimento delle varie nozioni utili caso per caso.

    In questo caso la "somma" tra un numero e una stringa, forza l'interprete a convertire preventivamente il valore numerico in stringa; quindi si ottiene un "concatenamento" di stringhe.

    Per meglio chiarire il procedimento, i passaggi sono questi:

    - prima di tutto viene risolta l'espressione tra le parentesi (j + " ") che converte j (numero) in stringa, secondo il principio accennato sopra, restituendo quindi una stringa;

    - a questo punto, con lo stesso principio, viene eseguita l'operazione (i + "stringa"), dove "stringa" è chiaramente il risultato della precedente operazione, convertendo quindi anche i (numero) in stringa e restituendo una stringa ottenuta dalla concatenazione di queste due.

    Ovviamente in questo caso conta la sequenza nella risoluzione delle varie parti dell'espressione; matematicamente viene risolta per prima la parte tra parentesi, però la stessa espressione può essere scritta in modo più semplice.

    Prendendo per buono il fatto che la somma di un valore numerico con una stringa restituisce sempre una stringa, quella stessa espressione può essere scritta in questo modo:
    codice:
    ('' + i + j)
    Prima cosa, non serve usare una stringa contenente uno spazio (come hai fatto tu), si può usare una stringa completamente vuota ("").

    La risoluzione adopera lo stesso principio spiegato sopra ma in questo caso abbiamo ottimizzato la sequenza. Trattandosi della somma di una serie di valori tutti allo stesso livello, l'ordine di risoluzione è chiaramente quello matematico, cioè le singole operazioni sono risolte da sinistra a destra.

    Sarà quindi risolta prima l'operazione ('' + i), in cui i (numerico) è convertito in stringa, ottenendo quindi una stringa. A quel punto viene risolta la seconda parte ("stringa" + j), con il solito principio. Il risultato sarà quindi la concatenazione dei valori numerici convertiti in stringa.

    Spero sia tutto chiaro.

    Buon proseguimento


    PS: occhio al regolamento di sezione, titoli autoesplicativi delle discussioni e uso dei tag per il codice... vedo già l'ombra di ciro78 che sta arrivando col manganello
    Ultima modifica di KillerWorm; 07-05-2020 a 14:46
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web.
    Ti resta... humm spè

    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

  3. #3
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio


    PS: occhio al regolamento di sezione, titoli autoesplicativi delle discussioni e uso dei tag per il codice... vedo già l'ombra di ciro78 che sta arrivando col manganello
    Chiedo venia!

    comunque lo spazio tra le virgolette l'ho messo per dividere ogni ciclo

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,746
    comunque lo spazio tra le virgolette l'ho messo per dividere ogni ciclo
    ah ok, avevo ipotizzato che tu avessi impostato quel document.write(br) per ottenere una qualche interruzione di riga, per questo lo spazio mi sembrava superfluo se usato nella stringa solo per forzare la conversione. Ad ogni modo restano validi i concetti spiegati
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web.
    Ti resta... humm spè

    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

  5. #5
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,261
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio

    PS: occhio al regolamento di sezione, titoli autoesplicativi delle discussioni e uso dei tag per il codice... vedo già l'ombra di ciro78 che sta arrivando col manganello
    infatti ieri giornata piena ma oggi sono qui a bacchettare Detto questo gulliver occhio al regolamento.
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.