From 33eba5d1316bef26fdec2dec2089101d87aae4f3 Mon Sep 17 00:00:00 2001 From: Andrea Longo Date: Sun, 7 Mar 2021 11:30:15 +0100 Subject: [PATCH 1/3] translate article and tasks --- .../02-eval/1-eval-calculator/solution.md | 6 +- .../02-eval/1-eval-calculator/task.md | 4 +- 1-js/99-js-misc/02-eval/article.md | 68 +++++++++---------- 3 files changed, 39 insertions(+), 39 deletions(-) diff --git a/1-js/99-js-misc/02-eval/1-eval-calculator/solution.md b/1-js/99-js-misc/02-eval/1-eval-calculator/solution.md index 24d40c9b8..9c200ebbe 100644 --- a/1-js/99-js-misc/02-eval/1-eval-calculator/solution.md +++ b/1-js/99-js-misc/02-eval/1-eval-calculator/solution.md @@ -1,4 +1,4 @@ -Let's use `eval` to calculate the maths expression: +Utilizziamo `eval` per risolvere l'espressione matematica: ```js demo run let expr = prompt("Type an arithmetic expression?", '2*3+2'); @@ -6,6 +6,6 @@ let expr = prompt("Type an arithmetic expression?", '2*3+2'); alert( eval(expr) ); ``` -The user can input any text or code though. +L'utente può inserire qualsiasi testo o codice. -To make things safe, and limit it to arithmetics only, we can check the `expr` using a [regular expression](info:regular-expressions), so that it only may contain digits and operators. +Per rendere tutto più sicuro, limitiamo ai soli caratteri aritmetici, possiamo verificare `expr` utilizzando un'[espressione regolare](info:regular-expressions), in questo modo potrà contenere solamente cifre e operatori. diff --git a/1-js/99-js-misc/02-eval/1-eval-calculator/task.md b/1-js/99-js-misc/02-eval/1-eval-calculator/task.md index ece43ec9e..00b9aa689 100644 --- a/1-js/99-js-misc/02-eval/1-eval-calculator/task.md +++ b/1-js/99-js-misc/02-eval/1-eval-calculator/task.md @@ -4,8 +4,8 @@ importance: 4 # Eval-calculator -Create a calculator that prompts for an arithmetic expression and returns its result. +Create una calcolatrice che richiede all'utente (tramite prompt) un'espressione aritmetica e ne ritorni il risultato. -There's no need to check the expression for correctness in this task. Just evaluate and return the result. +Non c'è alcun bisogno di testare la correttezza dell'espressione. Limitatevi ad eseguirla e ritornarne il risultato. [demo] diff --git a/1-js/99-js-misc/02-eval/article.md b/1-js/99-js-misc/02-eval/article.md index 1fdafeeec..199940e2d 100644 --- a/1-js/99-js-misc/02-eval/article.md +++ b/1-js/99-js-misc/02-eval/article.md @@ -1,25 +1,25 @@ -# Eval: run a code string +# Eval: eseguire una stringa di codice -The built-in `eval` function allows to execute a string of code. +La funzione integrata `eval` consente di eseguire stringhe di codice. -The syntax is: +La sintassi da utilizzare è: ```js let result = eval(code); ``` -For example: +Ad esempio: ```js run let code = 'alert("Hello")'; eval(code); // Hello ``` -A string of code may be long, contain line breaks, function declarations, variables and so on. +Una stringa di codice potrebbe essere molto lunga, potrebbe contenere interruzioni di riga, dichiarazioni di funzione, variabili e cosi via. -The result of `eval` is the result of the last statement. +Il risultato ritornato da `eval` corrisponde a quello dell'ultima istruzione. -For example: +Ad esempio: ```js run let value = eval('1+1'); alert(value); // 2 @@ -30,7 +30,7 @@ let value = eval('let i = 0; ++i'); alert(value); // 1 ``` -The eval'ed code is executed in the current lexical environment, so it can see outer variables: +Il codice valutato viene eseguito nel lexical environment corrente, quindi può accedere alle variabili esterne: ```js run no-beautify let a = 1; @@ -46,56 +46,56 @@ function f() { f(); ``` -It can change outer variables as well: +Può quindi modificare le variabili esterne: ```js untrusted refresh run let x = 5; eval("x = 10"); -alert(x); // 10, value modified +alert(x); // 10, valore modificato ``` -In strict mode, `eval` has its own lexical environment. So functions and variables, declared inside eval, are not visible outside: +In strict mode, `eval` viene eseguito in un lexical environment separato. Quindi le funzioni e le variabili dichiarate internamente, non sono visibili all'esterno: ```js untrusted refresh run -// reminder: 'use strict' is enabled in runnable examples by default +// reminder: 'use strict' è abilitato di default negli esempio che stiamo eseguendo eval("let x = 5; function f() {}"); -alert(typeof x); // undefined (no such variable) -// function f is also not visible +alert(typeof x); // undefined (variabile inesistente) +// anche la funzione f non è visibile ``` -Without `use strict`, `eval` doesn't have its own lexical environment, so we would see `x` and `f` outside. +Senza `use strict`, `eval` non viene eseguito in un lexical environment separato, quindi saremo in grado di vedere `x` e `f` dall'esterno. -## Using "eval" +## Utilizzare "eval" -In modern programming `eval` is used very sparingly. It's often said that "eval is evil". +Nella programmazione moderna `eval` viene utilizzato di rado. Spesso si dice "eval is evil" ("eval è il diavolo"). -The reason is simple: long, long time ago JavaScript was a much weaker language, many things could only be done with `eval`. But that time passed a decade ago. +La motivazione è piuttosto semplice: molto tempo fa, JavaScript era un linguaggio molto povero, molte cose potevano essere fatte solamente tramite `eval`. Ma quei tempi, ormai sono passati da un decennio. -Right now, there's almost no reason to use `eval`. If someone is using it, there's a good chance they can replace it with a modern language construct or a [JavaScript Module](info:modules). +Al momento, non esiste alcuna ragione per cui utilizzare `eval`. Se qualcuno lo sta utilizzando, c'è una buona possibilità che questo sia rimpiazzabile con un costrutto del linguaggio oppure con un [modulo JavaScript](info:modules). -Please note that its ability to access outer variables has side-effects. +Fate attenzione che la sua capacità di accedere alle variabile esterne, può generare side-effects. -Code minifiers (tools used before JS gets to production, to compress it) rename local variables into shorter ones (like `a`, `b` etc) to make the code smaller. That's usually safe, but not if `eval` is used, as local variables may be accessed from eval'ed code string. So minifiers don't do that renaming for all variables potentially visible from `eval`. That negatively affects code compression ratio. +I code minifiers (strumenti utilizzati sugli script JS prima di spostarli in produzione, per comprimerli) rinominano le variabili locali con nomi più brevi (come `a`, `b` etc) in modo da rendere il codice più breve. Questa operazione, solitamente, è sicura. Non lo è, però, se stiamo utilizzando `eval`, poiché al suo interno potremmo provare ad accedere alle variabili locali. Quindi i minifiers non rinominano tutte le variabili che sono potenzialmente accessibili da `eval`. Questo comporta una perdita di qualità della compressione del codice. -Using outer local variables inside `eval` is also considered a bad programming practice, as it makes maintaining the code more difficult. +L'utilizzo delle variabili locali all'interno di `eval` è considerata una bad practice nella programmazione, poiché rende il codice molto più complesso da mantenere. -There are two ways how to be totally safe from such problems. +Esistono due modi per mettersi al sicuro da questi problemi. -**If eval'ed code doesn't use outer variables, please call `eval` as `window.eval(...)`:** +**Se il codice all'interno di eval non richiede variabili esterne, allora invocate `eval` come `window.eval(...)`:** -This way the code is executed in the global scope: +In questo modo il codice viene eseguito nello scope globale: ```js untrusted refresh run let x = 1; { let x = 5; - window.eval('alert(x)'); // 1 (global variable) + window.eval('alert(x)'); // 1 (variabile globale) } ``` -**If eval'ed code needs local variables, change `eval` to `new Function` and pass them as arguments:** +**Se il codice all'interno di eval ha bisogno di variabili locali, sostituite `eval` con `new Function` e passategliele come argomenti:** ```js run let f = new Function('a', 'alert(a)'); @@ -103,12 +103,12 @@ let f = new Function('a', 'alert(a)'); f(5); // 5 ``` -The `new Function` construct is explained in the chapter . It creates a function from a string, also in the global scope. So it can't see local variables. But it's so much clearer to pass them explicitly as arguments, like in the example above. +Il costrutto `new Function` viene spiegato più nel dettaglio nel capitolo . Crea una nuova funzione a partire da una stringa, sempre nello scope globale. Quindi può accedere alle variabili locali. Questo è molto più semplice passargliele esplicitamente come argomenti, come nell'esempio visto sopra. -## Summary +## Riepilogo -A call to `eval(code)` runs the string of code and returns the result of the last statement. -- Rarely used in modern JavaScript, as there's usually no need. -- Can access outer local variables. That's considered bad practice. -- Instead, to `eval` the code in the global scope, use `window.eval(code)`. -- Or, if your code needs some data from the outer scope, use `new Function` and pass it as arguments. +L'invocazione di `eval(code)` esegue una stringa di codice e ne ritorna il risultato dell'ultima istruzione. +- Viene raramente utilizzano in JavaScript moderno, quindi in genere non ne avremo bisogno. +- Può accedere alle variabili locali. Questa è considerata una bad practice. +- Piuttosto di utilzzare `eval` nello scope globale, utilizzate `window.eval(code)`. +- Oppure, se il codice dovesse avere bisogno di data dallo scope esterno, utilizzate il costrutto `new Function` e passategliele come argomenti. From 1eacf66561e5a0a3f39f111a60e342354e73263f Mon Sep 17 00:00:00 2001 From: Andrea <45577511+longo-andrea@users.noreply.github.com> Date: Sun, 7 Mar 2021 13:21:24 +0100 Subject: [PATCH 2/3] Apply suggestions from code review Co-authored-by: Simone Pasini <66781510+pasor1@users.noreply.github.com> --- .../02-eval/1-eval-calculator/solution.md | 2 +- .../02-eval/1-eval-calculator/task.md | 2 +- 1-js/99-js-misc/02-eval/article.md | 22 +++++++++---------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/1-js/99-js-misc/02-eval/1-eval-calculator/solution.md b/1-js/99-js-misc/02-eval/1-eval-calculator/solution.md index 9c200ebbe..9fe755c83 100644 --- a/1-js/99-js-misc/02-eval/1-eval-calculator/solution.md +++ b/1-js/99-js-misc/02-eval/1-eval-calculator/solution.md @@ -8,4 +8,4 @@ alert( eval(expr) ); L'utente può inserire qualsiasi testo o codice. -Per rendere tutto più sicuro, limitiamo ai soli caratteri aritmetici, possiamo verificare `expr` utilizzando un'[espressione regolare](info:regular-expressions), in questo modo potrà contenere solamente cifre e operatori. +Per rendere il tutto più sicuro e consentire solo caratteri aritmetici, possiamo verificare `expr` utilizzando un'[espressione regolare](info:regular-expressions), in questo modo la stringa potrà contenere solamente cifre e operatori. diff --git a/1-js/99-js-misc/02-eval/1-eval-calculator/task.md b/1-js/99-js-misc/02-eval/1-eval-calculator/task.md index 00b9aa689..a279ebeb9 100644 --- a/1-js/99-js-misc/02-eval/1-eval-calculator/task.md +++ b/1-js/99-js-misc/02-eval/1-eval-calculator/task.md @@ -4,7 +4,7 @@ importance: 4 # Eval-calculator -Create una calcolatrice che richiede all'utente (tramite prompt) un'espressione aritmetica e ne ritorni il risultato. +Create una calcolatrice che richieda all'utente (tramite prompt) un'espressione aritmetica e ne ritorni il risultato. Non c'è alcun bisogno di testare la correttezza dell'espressione. Limitatevi ad eseguirla e ritornarne il risultato. diff --git a/1-js/99-js-misc/02-eval/article.md b/1-js/99-js-misc/02-eval/article.md index 199940e2d..a5ebe104d 100644 --- a/1-js/99-js-misc/02-eval/article.md +++ b/1-js/99-js-misc/02-eval/article.md @@ -15,7 +15,7 @@ let code = 'alert("Hello")'; eval(code); // Hello ``` -Una stringa di codice potrebbe essere molto lunga, potrebbe contenere interruzioni di riga, dichiarazioni di funzione, variabili e cosi via. +Una stringa di codice può essere molto lunga, contenere interruzioni di riga, dichiarazioni di funzione, variabili e cosi via. Il risultato ritornato da `eval` corrisponde a quello dell'ultima istruzione. @@ -30,7 +30,7 @@ let value = eval('let i = 0; ++i'); alert(value); // 1 ``` -Il codice valutato viene eseguito nel lexical environment corrente, quindi può accedere alle variabili esterne: +Il codice valutato viene eseguito nel *lexical environment* corrente, quindi può accedere alle variabili esterne: ```js run no-beautify let a = 1; @@ -46,7 +46,7 @@ function f() { f(); ``` -Può quindi modificare le variabili esterne: +Allo stesso modo, può modificare le variabili esterne: ```js untrusted refresh run let x = 5; @@ -54,10 +54,10 @@ eval("x = 10"); alert(x); // 10, valore modificato ``` -In strict mode, `eval` viene eseguito in un lexical environment separato. Quindi le funzioni e le variabili dichiarate internamente, non sono visibili all'esterno: +In strict mode, `eval` viene eseguito in un *lexical environment* separato. Quindi le funzioni e le variabili dichiarate internamente, non sono visibili all'esterno: ```js untrusted refresh run -// reminder: 'use strict' è abilitato di default negli esempio che stiamo eseguendo +// attenzione: 'use strict' è abilitato di default negli esempi che stiamo eseguendo eval("let x = 5; function f() {}"); @@ -65,7 +65,7 @@ alert(typeof x); // undefined (variabile inesistente) // anche la funzione f non è visibile ``` -Senza `use strict`, `eval` non viene eseguito in un lexical environment separato, quindi saremo in grado di vedere `x` e `f` dall'esterno. +Senza `use strict`, `eval` non viene eseguito in un *lexical environment* separato, quindi saremo in grado di vedere `x` e `f` dall'esterno. ## Utilizzare "eval" @@ -75,9 +75,9 @@ La motivazione è piuttosto semplice: molto tempo fa, JavaScript era un linguagg Al momento, non esiste alcuna ragione per cui utilizzare `eval`. Se qualcuno lo sta utilizzando, c'è una buona possibilità che questo sia rimpiazzabile con un costrutto del linguaggio oppure con un [modulo JavaScript](info:modules). -Fate attenzione che la sua capacità di accedere alle variabile esterne, può generare side-effects. +Fate attenzione: la sua capacità di accedere alle variabile esterne può generare side-effects. -I code minifiers (strumenti utilizzati sugli script JS prima di spostarli in produzione, per comprimerli) rinominano le variabili locali con nomi più brevi (come `a`, `b` etc) in modo da rendere il codice più breve. Questa operazione, solitamente, è sicura. Non lo è, però, se stiamo utilizzando `eval`, poiché al suo interno potremmo provare ad accedere alle variabili locali. Quindi i minifiers non rinominano tutte le variabili che sono potenzialmente accessibili da `eval`. Questo comporta una perdita di qualità della compressione del codice. +I *code minifiers* (strumenti utilizzati per comprimere gli script JS prima di metterli in produzione) rinominano le variabili locali con nomi più brevi (come `a`, `b` etc) in modo da rendere il codice più breve. Questa operazione, solitamente, è sicura. Non lo è, però, se stiamo utilizzando `eval`, poiché al suo interno potremmo provare ad accedere alle variabili locali. Quindi i minifiers non rinominano tutte le variabili che sono potenzialmente accessibili da `eval`. Questo comporta un peggioramento del fattore di compressione del codice. L'utilizzo delle variabili locali all'interno di `eval` è considerata una bad practice nella programmazione, poiché rende il codice molto più complesso da mantenere. @@ -103,12 +103,12 @@ let f = new Function('a', 'alert(a)'); f(5); // 5 ``` -Il costrutto `new Function` viene spiegato più nel dettaglio nel capitolo . Crea una nuova funzione a partire da una stringa, sempre nello scope globale. Quindi può accedere alle variabili locali. Questo è molto più semplice passargliele esplicitamente come argomenti, come nell'esempio visto sopra. +Il costrutto `new Function`, che viene spiegato più nel dettaglio nel capitolo , crea una nuova funzione a partire da una stringa. Questa viene creata nel contesto globale, quindi non può accedere alle variabili locali, ma è comunque possibile passargliele esplicitamente come argomenti, come nell'esempio visto sopra. ## Riepilogo L'invocazione di `eval(code)` esegue una stringa di codice e ne ritorna il risultato dell'ultima istruzione. -- Viene raramente utilizzano in JavaScript moderno, quindi in genere non ne avremo bisogno. +- Viene raramente utilizzato in JavaScript moderno, quindi in genere non ne avremo bisogno. - Può accedere alle variabili locali. Questa è considerata una bad practice. - Piuttosto di utilzzare `eval` nello scope globale, utilizzate `window.eval(code)`. -- Oppure, se il codice dovesse avere bisogno di data dallo scope esterno, utilizzate il costrutto `new Function` e passategliele come argomenti. +- Oppure, se il codice dovesse avere bisogno di dati dallo scope esterno, utilizzate il costrutto `new Function` e passateglieli come argomenti. From 0a1678c48e0b125e78a9c2024d9787dde7d4accb Mon Sep 17 00:00:00 2001 From: Andrea <45577511+longo-andrea@users.noreply.github.com> Date: Sun, 7 Mar 2021 20:55:52 +0100 Subject: [PATCH 3/3] Apply suggestions from code review Co-authored-by: Dorin David <70648503+Dorin-David@users.noreply.github.com> --- 1-js/99-js-misc/02-eval/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/99-js-misc/02-eval/article.md b/1-js/99-js-misc/02-eval/article.md index a5ebe104d..acbfd091f 100644 --- a/1-js/99-js-misc/02-eval/article.md +++ b/1-js/99-js-misc/02-eval/article.md @@ -73,7 +73,7 @@ Nella programmazione moderna `eval` viene utilizzato di rado. Spesso si dice "ev La motivazione è piuttosto semplice: molto tempo fa, JavaScript era un linguaggio molto povero, molte cose potevano essere fatte solamente tramite `eval`. Ma quei tempi, ormai sono passati da un decennio. -Al momento, non esiste alcuna ragione per cui utilizzare `eval`. Se qualcuno lo sta utilizzando, c'è una buona possibilità che questo sia rimpiazzabile con un costrutto del linguaggio oppure con un [modulo JavaScript](info:modules). +Al momento, non esiste alcuna ragione per utilizzare `eval`. Se qualcuno lo sta utilizzando, c'è una buona possibilità che questo sia rimpiazzabile con un costrutto del linguaggio oppure con un [modulo JavaScript](info:modules). Fate attenzione: la sua capacità di accedere alle variabile esterne può generare side-effects. pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy