Skip to content

Commit fe966ce

Browse files
committed
docs: translate one more piece of call-apply-decorators article
1 parent 23ed1bf commit fe966ce

File tree

1 file changed

+19
-19
lines changed
  • 1-js/06-advanced-functions/09-call-apply-decorators

1 file changed

+19
-19
lines changed

1-js/06-advanced-functions/09-call-apply-decorators/article.md

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -212,36 +212,36 @@ Para tornar tudo mais claro, veremos mais profundamente como `this` é passado a
212212
2. Então quando `worker.slow(2)` é executado, o embrulhador recebe `2` como argumento e `this=worker` (é o objeto antes do ponto).
213213
3. Dentro do embrulhador, assumindo que o resultado ainda não está memorizado, `func.call(this, x)` passa o `this` atual (`=worker`) e o argumento atual (`=2`) para o método original.
214214

215-
## Going multi-argument
215+
## Passando vários argumentos
216216

217-
Now let's make `cachingDecorator` even more universal. Till now it was working only with single-argument functions.
217+
Agora vamos tornar o `cachingDecorator` ainda mais universal. Até agora este estava trabalhando apenas com funções de um único argumento.
218218

219-
Now how to cache the multi-argument `worker.slow` method?
219+
Agora, como memorizar o método `worker.slow` com vários argumentos?
220220

221221
```js
222222
let worker = {
223223
slow(min, max) {
224-
return min + max; // scary CPU-hogger is assumed
224+
return min + max; // assume-se que é assustadoramente devoradora de processamento
225225
}
226226
};
227227

228-
// should remember same-argument calls
228+
// deve lembrar-se das chamadas com o mesmo argumento
229229
worker.slow = cachingDecorator(worker.slow);
230230
```
231231

232-
Previously, for a single argument `x` we could just `cache.set(x, result)` to save the result and `cache.get(x)` to retrieve it. But now we need to remember the result for a *combination of arguments* `(min,max)`. The native `Map` takes single value only as the key.
232+
Anteriormente, para um único argumento, `x` poderíamos simplesmente `cache.set(x, result)` para guardar o resultado e `cache.get(x)` para recuperá-lo. Mas agora precisamos lembrar o resultado para uma *combinação de argumentos* `(min,max)`. O `Map` nativo recebe apenas um único valor como chave.
233233

234-
There are many solutions possible:
234+
Existem muitas soluções possíveis:
235235

236-
1. Implement a new (or use a third-party) map-like data structure that is more versatile and allows multi-keys.
237-
2. Use nested maps: `cache.set(min)` will be a `Map` that stores the pair `(max, result)`. So we can get `result` as `cache.get(min).get(max)`.
238-
3. Join two values into one. In our particular case we can just use a string `"min,max"` as the `Map` key. For flexibility, we can allow to provide a *hashing function* for the decorator, that knows how to make one value from many.
236+
1. Implementar uma nova estrutura de dados parecida com o mapa (ou usar uma estrutura de terceiros) que seja mais versátil e permita várias chaves.
237+
2. Usar mapas aninhados: `cache.set(min)` será um `Map` que armazena o par `(max, result)`. Assim, podemos obter o `result` como `cache.get(min).get(max)`.
238+
3. Juntar dois valores num só. No nosso caso particular, podemos usar uma sequência de caracteres `min,max` como chave do `Map`. Para maior flexibilidade, podemos permitir fornecer uma *função de baralhamento* para o decorador, que sabe como fazer um valor a partir de muitos.
239239

240-
For many practical applications, the 3rd variant is good enough, so we'll stick to it.
240+
Para muitas aplicações práticas, a terceira variante é suficientemente boa, pelo que ficaremos por ela.
241241

242-
Also we need to pass not just `x`, but all arguments in `func.call`. Let's recall that in a `function()` we can get a pseudo-array of its arguments as `arguments`, so `func.call(this, x)` should be replaced with `func.call(this, ...arguments)`.
242+
Também precisamos passar não apenas `x`, mas todos os argumentos na `func.call`. Lembremos que numa `func.call` podemos obter um pseudo-vetor dos seus argumentos como `arguments`, então `func.call(this, x)` deve ser substituído por `func.call(this, ...arguments)`.
243243

244-
Here's a more powerful `cachingDecorator`:
244+
Eis um `cachingDecorator` mais poderoso:
245245

246246
```js run
247247
let worker = {
@@ -276,16 +276,16 @@ function hash(args) {
276276

277277
worker.slow = cachingDecorator(worker.slow, hash);
278278

279-
alert( worker.slow(3, 5) ); // works
280-
alert( "Again " + worker.slow(3, 5) ); // same (cached)
279+
alert( worker.slow(3, 5) ); // funciona
280+
alert( "Again " + worker.slow(3, 5) ); // o mesmo (memorizado)
281281
```
282282

283-
Now it works with any number of arguments (though the hash function would also need to be adjusted to allow any number of arguments. An interesting way to handle this will be covered below).
283+
Agora funciona com qualquer número de argumentos (embora a função de baralhar também precise de ser ajustada para permitir qualquer número de argumentos. Uma maneira interessante de lidar com isto será abordada mais adiante).
284284

285-
There are two changes:
285+
Existem duas alterações:
286286

287-
- In the line `(*)` it calls `hash` to create a single key from `arguments`. Here we use a simple "joining" function that turns arguments `(3, 5)` into the key `"3,5"`. More complex cases may require other hashing functions.
288-
- Then `(**)` uses `func.call(this, ...arguments)` to pass both the context and all arguments the wrapper got (not just the first one) to the original function.
287+
- Na linha `(*)` chama `hash` para criar uma única chave a partir de `arguments`. Neste caso usamos uma função simples de "junção" que transforma os argumentos `(3,5)` na chave `"3,5"`. Os casos mais complexos podem exigir outras funções de baralhamento.
288+
- Então `(**)` usa `func.call(this, ...arguments)` para passar tanto o contexto quanto todos os argumentos que o embrulhador recebeu (não apenas o primeiro) para a função original.
289289

290290
## func.apply
291291

0 commit comments

Comments
 (0)