Ciao, sono un nuovo iscritto, sto seguendo questo corso con la speranza di riuscire a fare dei plugin per un engine di videogame che utilizza appunto i file js di javascript. Volevo chiederti, cortesemente in maniera onsesta, se il tuo videocorso puo' essermi d'aiuto o devo cercare roba più specifica nel campo videogiochi?
Ciao Sares. Dovresti darmi piu' info riguardo questo engine di videogame. Per esempio se e' un progetto che gira sul browser allora questo corso dovrebbe essere ok, salvo non ti serva qualcosa di veramente specifico. Mentre se e' un progetto che gira con Node JS allora ti consiglio di cercare direttamente un corso di Node, questo videocorso e' piu' orientato all'uso di JS come front-end. Alla fine il linguaggio e' lo stesso, ma questo corso ha delle sezioni completamente dedicate a come JS interagisce con la pagina web.
@@Achille-yf7dm Si tratta di "RPG MAKER MV" e anche nel trailer di presentazione parla di javascript. l'esportazione dei giochi, va su WIN, MAC, IOS,ANDROID e siti in HTML5.
@@BitterGamesUnity da quello che ho letto ti serve imparare puro JS, questo tutorial va' bene. Se vai di fretta, puoi saltare le sezioni 6 e 7 che approfondiscono l'uso di JS nel browser. Una volta che avrai dimestichezza, puoi approfondire JS leggendo uno dei libri che suggerisco qui: tutorialjavascript.altervista.org/link-utili
Ciao, ho trovato questo esercizio sugli scope: const a = 4; function foo () { const b = a * 3; function bar (c) { const b = 2; console.log(a, b, c); } bar(b * 4); } foo(); Non ho capito una cosa: La seconda b non influisce sulla prima perché quest'ultima è const e quindi non può essere modificata, vero?
Salve Playbay, al tuo script puoi anche sostituire tutti i "const" con "let" ed il risultato non cambia. La funzione "bar" ha al suo interno la dichiarazione di una variabile chiamata "b" e quindi ignora variabili con lo stesso nome che non sono nello stesso blocco di codice. Se hai 2 variabili con lo stesso nome nello stesso blocco di codice, JS ti da' un errore. Se invece sono in blocchi di codice diversi, anche se in scope, JS ignora quella esterna e usa la variabile relativa al blocco di codice eseguito.
@@Achille-yf7dm Grazie mille! Sempre chiarissimo! Avrei ancora un'altra domanda e poi azzardo una risposta: bar(b * 4) fa parte della funzione foo(), giusto? Quindi come può leggere la "b" che è all'interno di bar(c)? Non è un ambiente globale rispetto a bar(c), che è locale? La mia risposta: bar(b * 4) NON vede ciò che è dentro la funzione "bar", perché quest'ultima è locale. Però, assegnando un valore a "c" è come se entrasse dentro la funzione bar(c) (poiché c diventa b*4). Quindi "c" potrà prendere b = 2 e moltiplicarlo per 4. E' corretto?
@@playbay4225 dentro alla funzione foo() stai assegnando un valore a "b": const b = a * 3; e siccome "a" ha valore di 4, questa "b" ha valore 12. Quindi quando vai ad invocare bar(b * 4); hai gia' il valore di "b", e stai invocando: bar(12 * 4) Dentro alla funzione bar(), crei un'altra variabile chiamata "b" che non ha nulla a che fare con la "b" dell'ambiente esterno e le assegni valore 2. Riassumendo: - la "b" dell'ambiente foo ha valore 12 e puo' essere usata nell'ambiente foo e in teoria nell'ambiente bar. - la "b" dell'ambiente bar ha valore 2 e puo' essere usata solo nell'ambiente bar. - siccome nell'ambiente bar hai una variabile che ha lo stesso nome di una variabile che e' presente in un ambiente esterno (ambiente foo), la variabile dell'ambiente bar "vince" e se provi a fare il suo output hai 2. - proprio per evitare questo genere di confusione non bisognerebbe mai usare nomi uguali per variabili diverse. - se vuoi avere a che fare con la stessa variabile in tutti gli ambienti: const a = 4; function foo() { const b = a * 3; function bar(c) { console.log(b); // 12 b = 2; /* qui stai assegnando un nuovo valore alla "b" dell'ambiente foo e avrai un errore perche' e' una costante */ console.log(a, b, c); } bar(b * 4); } foo();
@@playbay4225 console.log(), in questo caso, ti visualizza solo i valori delle variabili che sono disponibili in quell'ambiente. Ho inserito quel console.log() per farti vedere che all'interno di bar puoi accedere al valore di "b" che proviene da un ambiente esterno. Se pero', in bar crei un'altra variabile che ha lo stesso nome di quella proveniente dall'ambiente esterno, quella esterna viene ignorata perche' la variabile dell'ambiente interno ha la precedenza. Ecco un po' di esempi che si focalizzano sulla funzione foo: - esempio 1 function bar (c) { const b = 2; // questa variabile ha lo stesso nome di quella esterna, pero' questa ha la precedenza console.log(a, b, c); // 4, 2, 48 } - esempio 2 function bar (c) { let b = 2; // questa variabile ha lo stesso nome di quella esterna, pero' questa ha la precedenza console.log(a, b, c); // 4, 2, 48 } - esempio 3 function bar (c) { b = 2; // questa e' la stessa variabile dell'ambiente esterno, errore perche' stiamo cambiando il valore di una costante console.log(a, b, c); } - esempio 4 function bar (c) { // non faccio niente console.log(a, b, c); // 4, 12, 48 } - esempio 5 function bar (c) { let x = 2; // questa e' una nuova variabile, quindi la variabile b non viene toccata ed e' disponibile in bar console.log(a, b, c, x); // 4, 12, 48, 2 }
Questa vuole essere una critica costruttiva, sto seguendo un altro corso, ma per mia incomprensione su quest'argomento sono andato a cercare un ulteriore spiegazione... trovando questo video non solo non ho capito nulla, ma mi ha creato più confusione. Secondo me il video andrebbe rifatto da capo, ci sono troppi impappinamenti con le keyword, impappinamenti con le spiegazioni stesse... Considerando che questo è l'unico video in italiano che tratta questo argomento mi auguro che questa critica sia uno stimolo per fare meglio, sia per chi ti segue, sia per una soddisfazione tua personale
Salve Carlo, questo è uno dei primi video che ho registrato e forse ci sono un po' più inceppamenti del solito. Ora sono nel mezzo di un altro progetto, ma se avrò tempo in futuro, vedrò di tenere in considerazione il tuo commento.
Ciao, sono un nuovo iscritto, sto seguendo questo corso con la speranza di riuscire a fare dei plugin per un engine di videogame che utilizza appunto i file js di javascript.
Volevo chiederti, cortesemente in maniera onsesta, se il tuo videocorso puo' essermi d'aiuto o devo cercare roba più specifica nel campo videogiochi?
Ciao Sares. Dovresti darmi piu' info riguardo questo engine di videogame.
Per esempio se e' un progetto che gira sul browser allora questo corso dovrebbe essere ok, salvo non ti serva qualcosa di veramente specifico. Mentre se e' un progetto che gira con Node JS allora ti consiglio di cercare direttamente un corso di Node, questo videocorso e' piu' orientato all'uso di JS come front-end.
Alla fine il linguaggio e' lo stesso, ma questo corso ha delle sezioni completamente dedicate a come JS interagisce con la pagina web.
@@Achille-yf7dm Si tratta di "RPG MAKER MV" e anche nel trailer di presentazione parla di javascript.
l'esportazione dei giochi, va su WIN, MAC, IOS,ANDROID e siti in HTML5.
@@BitterGamesUnity da quello che ho letto ti serve imparare puro JS, questo tutorial va' bene. Se vai di fretta, puoi saltare le sezioni 6 e 7 che approfondiscono l'uso di JS nel browser. Una volta che avrai dimestichezza, puoi approfondire JS leggendo uno dei libri che suggerisco qui: tutorialjavascript.altervista.org/link-utili
@@Achille-yf7dm Grazie! Una donazione sarà fatta più che volentieri in settimana ;)
@Sares ti ringrazio!!
Ciao, ho trovato questo esercizio sugli scope:
const a = 4;
function foo () {
const b = a * 3;
function bar (c) {
const b = 2;
console.log(a, b, c); }
bar(b * 4); }
foo();
Non ho capito una cosa: La seconda b non influisce sulla prima perché quest'ultima è const e quindi non può essere modificata, vero?
Salve Playbay, al tuo script puoi anche sostituire tutti i "const" con "let" ed il risultato non cambia. La funzione "bar" ha al suo interno la dichiarazione di una variabile chiamata "b" e quindi ignora variabili con lo stesso nome che non sono nello stesso blocco di codice.
Se hai 2 variabili con lo stesso nome nello stesso blocco di codice, JS ti da' un errore. Se invece sono in blocchi di codice diversi, anche se in scope, JS ignora quella esterna e usa la variabile relativa al blocco di codice eseguito.
@@Achille-yf7dm Grazie mille! Sempre chiarissimo! Avrei ancora un'altra domanda e poi azzardo una risposta: bar(b * 4) fa parte della funzione foo(), giusto? Quindi come può leggere la "b" che è all'interno di bar(c)? Non è un ambiente globale rispetto a bar(c), che è locale?
La mia risposta: bar(b * 4) NON vede ciò che è dentro la funzione "bar", perché quest'ultima è locale. Però, assegnando un valore a "c" è come se entrasse dentro la funzione bar(c) (poiché c diventa b*4). Quindi "c" potrà prendere b = 2 e moltiplicarlo per 4. E' corretto?
@@playbay4225 dentro alla funzione foo() stai assegnando un valore a "b":
const b = a * 3; e siccome "a" ha valore di 4, questa "b" ha valore 12.
Quindi quando vai ad invocare bar(b * 4); hai gia' il valore di "b", e stai invocando: bar(12 * 4)
Dentro alla funzione bar(), crei un'altra variabile chiamata "b" che non ha nulla a che fare con la "b" dell'ambiente esterno e le assegni valore 2.
Riassumendo:
- la "b" dell'ambiente foo ha valore 12 e puo' essere usata nell'ambiente foo e in teoria nell'ambiente bar.
- la "b" dell'ambiente bar ha valore 2 e puo' essere usata solo nell'ambiente bar.
- siccome nell'ambiente bar hai una variabile che ha lo stesso nome di una variabile che e' presente in un ambiente esterno (ambiente foo), la variabile dell'ambiente bar "vince" e se provi a fare il suo output hai 2.
- proprio per evitare questo genere di confusione non bisognerebbe mai usare nomi uguali per variabili diverse.
- se vuoi avere a che fare con la stessa variabile in tutti gli ambienti:
const a = 4;
function foo() {
const b = a * 3;
function bar(c) {
console.log(b); // 12
b = 2; /* qui stai assegnando un nuovo valore alla "b" dell'ambiente foo e avrai un errore perche' e' una costante */
console.log(a, b, c);
}
bar(b * 4);
}
foo();
@@Achille-yf7dm Grazie! Ho provato a sostituire "const b" con "let b" e mi sono sorte 3 domande:
1) Hai scritto
@@playbay4225 console.log(), in questo caso, ti visualizza solo i valori delle variabili che sono disponibili in quell'ambiente. Ho inserito quel console.log() per farti vedere che all'interno di bar puoi accedere al valore di "b" che proviene da un ambiente esterno. Se pero', in bar crei un'altra variabile che ha lo stesso nome di quella proveniente dall'ambiente esterno, quella esterna viene ignorata perche' la variabile dell'ambiente interno ha la precedenza.
Ecco un po' di esempi che si focalizzano sulla funzione foo:
- esempio 1
function bar (c) {
const b = 2; // questa variabile ha lo stesso nome di quella esterna, pero' questa ha la precedenza
console.log(a, b, c); // 4, 2, 48
}
- esempio 2
function bar (c) {
let b = 2; // questa variabile ha lo stesso nome di quella esterna, pero' questa ha la precedenza
console.log(a, b, c); // 4, 2, 48
}
- esempio 3
function bar (c) {
b = 2; // questa e' la stessa variabile dell'ambiente esterno, errore perche' stiamo cambiando il valore di una costante
console.log(a, b, c);
}
- esempio 4
function bar (c) {
// non faccio niente
console.log(a, b, c); // 4, 12, 48
}
- esempio 5
function bar (c) {
let x = 2; // questa e' una nuova variabile, quindi la variabile b non viene toccata ed e' disponibile in bar
console.log(a, b, c, x); // 4, 12, 48, 2
}
Questa vuole essere una critica costruttiva, sto seguendo un altro corso, ma per mia incomprensione su quest'argomento sono andato a cercare un ulteriore spiegazione... trovando questo video non solo non ho capito nulla, ma mi ha creato più confusione. Secondo me il video andrebbe rifatto da capo, ci sono troppi impappinamenti con le keyword, impappinamenti con le spiegazioni stesse...
Considerando che questo è l'unico video in italiano che tratta questo argomento mi auguro che questa critica sia uno stimolo per fare meglio, sia per chi ti segue, sia per una soddisfazione tua personale
Salve Carlo, questo è uno dei primi video che ho registrato e forse ci sono un po' più inceppamenti del solito.
Ora sono nel mezzo di un altro progetto, ma se avrò tempo in futuro, vedrò di tenere in considerazione il tuo commento.