Skip to content

Commit 513e84a

Browse files
Portuguese (Brazil) version
Portuguese (Brazil) version
1 parent 143bda7 commit 513e84a

24 files changed

+1898
-1
lines changed

doc/language.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"default": "en",
3-
"listed": ["en", "fi", "ru", "zhtw", "zh", "tr", "pl", "ko", "ja", "es", "it", "hu"]
3+
"listed": ["en", "fi", "ru", "zhtw", "zh", "tr", "pl", "ko", "ja", "es", "it", "hu","pt"]
44
}
55

doc/pt/array/constructor.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
## O construtor `Array`
2+
3+
Uma vez que o construtor `Array` é ambíguo na forma como ele lida com seus parâmetros,
4+
o uso da notação `[]` é fortemente recomendado ao criar novo arrays.
5+
6+
[1, 2, 3]; // Resultado: [1, 2, 3]
7+
new Array(1, 2, 3); // Resultado: [1, 2, 3]
8+
9+
[3]; // Resultado: [3]
10+
new Array(3); // Resultado: []
11+
new Array('3') // Resultado: ['3']
12+
13+
Nos casos onde somente um argumento é passado para o construtor `Array` e quando o argumento é
14+
um `Number`, o construtor retornará um novo array *sem elementos* com a propriedade `length` configurada de acordo com o valor do argumento.
15+
É importante perceber que **somente** a propriedade `length` do novo array será configurada desta maneira; os índices do array não serão inicializados.
16+
17+
var arr = new Array(3);
18+
arr[1]; // undefined
19+
1 in arr; // false, o índice não foi definida
20+
21+
Ser capaz de definir o comprimento de um array antecipadamente é útil em poucos casos,
22+
como ao replicar uma string, em que se evita o uso de um loop.
23+
24+
new Array(count + 1).join(stringToRepeat);
25+
26+
### Conclusão
27+
28+
O uso de literais é preferencial na inicialição de Arrays. São curtos, possuem uma sintaxe limpa, e contribuem para a legibilidade do código.
29+

doc/pt/array/general.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
## Iteração com Arrays e propriedades
2+
3+
Embora arrays em JavaScript sejam objetos, não existem boas razões para utilizar
4+
o [`for in`](#object.forinloop) loop. De fato, existem muitas boas razões para
5+
**evitar** o uso de `for in` com arrays.
6+
7+
> **Nota:** JavaScript arrays **não** são *arrays associativos*. JavaScript utiliza
8+
> [objects](#object.general) apenas para mapear chaves com valores. Enquanto arrays associativos
9+
> **preservam** a ordem, objetos **não preservam**.
10+
11+
Uma vez que o `for in` loop enumera todas as propriedades que estão na cadeia
12+
prototype e visto que o único modo de excluir tais propriedades é por meio do uso
13+
do [`hasOwnProperty`](#object.hasownproperty), ele chega a ser **vinte vezes**
14+
mais custoso que o uso normal do `for` loop.
15+
16+
### Iteração
17+
18+
A fim de atingir a melhor performance ao interagir sobre arrays,
19+
a melhor opção é utilizar o clássico `for` loop.
20+
21+
var list = [1, 2, 3, 4, 5, ...... 100000000];
22+
for(var i = 0, l = list.length; i < l; i++) {
23+
console.log(list[i]);
24+
}
25+
26+
Existe um detalhe importante no exemplo acima , que é o caching
27+
do comprimento do array via `l = list.length`.
28+
29+
Embora a propriedade `length` esteja definida no próprio array, ainda existe
30+
um trabalho extra ao executar a busca em cada iteração do array.
31+
Enquanto que recentes engines JavaScript **talvez** implementem um otimização
32+
para este caso, não existe uma maneira de saber quando o código será executado em uma
33+
dessas novas engines.
34+
35+
De fato, deixando de lado o armazenamento em caching pode resultar em um loop **duas vezes mais rápido**
36+
do que com o armazenamento em caching.
37+
38+
### A propriedade `length`
39+
40+
Enquanto que o *getter* da propriedade `length` retorna o total de elementos
41+
que estão contidos no array, o *setter* pode ser usado para **truncar** o array.
42+
43+
var foo = [1, 2, 3, 4, 5, 6];
44+
foo.length = 3;
45+
foo; // [1, 2, 3]
46+
47+
foo.length = 6;
48+
foo.push(4);
49+
foo; // [1, 2, 3, undefined, undefined, undefined, 4]
50+
51+
Atribuir um valor de menor para length trunca o array. Por outro lado, incrementando
52+
o valor de length cria um array esparso.
53+
54+
### Conclusão
55+
56+
Para melhor performance, é recomendado o uso do `for` loop e o cache da propriedade
57+
`length`. O uso do `for in` loop na iteração com array é um sinal de código mal escrito
58+
e tendencioso a apresentar defeitos, além de ter performance ruim.
59+

doc/pt/core/delete.md

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
## O operador `delete`
2+
3+
Em resumo, é *impossível* remover variáveis globais, funções e outras coisas em JavaScript
4+
que tenham o atributo `DontDelete` definido.
5+
6+
### Código global e código de função
7+
8+
Quando uma variável ou função é definida no escopo global ou em
9+
um [escopo de função](#function.scopes) ela passa a ser uma propriedade de ambos
10+
objeto Activation e do objeto Global. Tais propriedades possuem um conjunto de atributos, um dos quais é o `DontDelete`.
11+
Declarações de funções e variáveis em código global e em código de função
12+
sempre criam propriedades com `DontDelete`, e portanto não podem ser removidas.
13+
14+
// variável global:
15+
var a = 1; // DontDelete está definido
16+
delete a; // false
17+
a; // 1
18+
19+
// função comum:
20+
function f() {} // DontDelete está definido
21+
delete f; // false
22+
typeof f; // "function"
23+
24+
// mudar o valor do atributo não ajuda:
25+
f = 1;
26+
delete f; // false
27+
f; // 1
28+
29+
### Propriedades explícitas
30+
31+
Propriedades definidas explicitamente podem ser apagadas normalmente.
32+
33+
// definição explícita de propriedade:
34+
var obj = {x: 1};
35+
obj.y = 2;
36+
delete obj.x; // true
37+
delete obj.y; // true
38+
obj.x; // undefined
39+
obj.y; // undefined
40+
41+
No exemplo acima, `obj.x` e `obj.y` podem ser removidos por que eles não possuem o
42+
atributo `DontDelete`. Este é o motivo pelo qual o exemplo abaixo também funciona.
43+
44+
// Desconsiderando o IE, isto funciona bem:
45+
var GLOBAL_OBJECT = this;
46+
GLOBAL_OBJECT.a = 1;
47+
a === GLOBAL_OBJECT.a; // true - apenas uma variável global
48+
delete GLOBAL_OBJECT.a; // true
49+
GLOBAL_OBJECT.a; // undefined
50+
51+
Aqui nós utilizamos um truque para remover `a`. Aqui o [`this`](#function.this)
52+
faz referência ao objeto Global e declara explicitamente a variável `a` como
53+
sua propriedade a qual nos permite removê-la.
54+
55+
O IE (pelo menos 6-8) possui defeitos, então o código acima não funciona.
56+
57+
### Argumentos de função e propriedades nativas
58+
59+
Argumentos de função, [objetos `arguments`](#function.arguments) e
60+
propriedades nativas tambêm possuem o `DontDelete` definido.
61+
62+
// argumentos de funções e propriedades:
63+
(function (x) {
64+
65+
delete arguments; // false
66+
typeof arguments; // "object"
67+
68+
delete x; // false
69+
x; // 1
70+
71+
function f(){}
72+
delete f.length; // false
73+
typeof f.length; // "number"
74+
75+
})(1);
76+
77+
### Objetos hosts
78+
79+
O comportamento do operador `delete` pode ser imprevisível para objetos hosts.
80+
Devido a especificação, objetos hosts têm permissão para implementar qualquer tipo de comportamento.
81+
82+
### Conclusão
83+
84+
O operador `delete` freqüentemente apresenta um comportamento inesperado e só
85+
pode ser usado com segurança para remover propriedades definidas explicitamente em objetos normais.

doc/pt/core/eval.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
## Por que não utilizar `eval`
2+
3+
A função `eval` executará uma string de código JavaScript no escopo local.
4+
5+
var foo = 1;
6+
function test() {
7+
var foo = 2;
8+
eval('foo = 3');
9+
return foo;
10+
}
11+
test(); // 3
12+
foo; // 1
13+
14+
Entreranto, `eval` somente é executado no escopo local quando é chamado diretamente
15+
*e* quanto o nome da função chamada é `eval`.
16+
17+
var foo = 1;
18+
function test() {
19+
var foo = 2;
20+
var bar = eval;
21+
bar('foo = 3');
22+
return foo;
23+
}
24+
test(); // 2
25+
foo; // 3
26+
27+
O uso de `eval` deve ser evitado. 99.9% de seu "uso" pode ser alcançado **sem** ele.
28+
29+
### `eval` dissimulado
30+
31+
As [funções timeout](#other.timeouts) `setTimeout` e `setInterval` podem ambas receberem uma string
32+
como primeiro argumento. Tais strings **sempre** serão executadas no escopo global uma vez que
33+
`eval` não é chamado diretamente, naquele caso.
34+
35+
### Problemas de segurança
36+
37+
`eval` também é considerado um problema de segurança, por que executa **qualquer** código dado.
38+
Ele **nunca** deve ser utilizado com strings de origens duvidosas ou desconhecidas.
39+
40+
### Conclusão
41+
42+
`eval` nunca deve ser utilizado. Qualquer código que faça uso de `eval` seve ser questionado
43+
em sua utilizade, performance e segurança. Se algo necessita de `eval` para funcionar, então **não** deve ser utilizado.
44+
Um *design melhor* deve ser utilizado, um que não faça uso de `eval`.
45+

doc/pt/core/semicolon.md

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
## Inserção automática do ponto e vírgula
2+
3+
Apesar do JavaScript possuir uma sintaxe no estilo C, o uso do ponto e vírgula **não** é obrigatório.
4+
5+
JavaScript não é uma linguagem 'semicolon-less'. De fato, o ponto e vírgula é necessário para o interpretação do código. Entretanto, o parser do JavaScript insere o **automaticamente** ponto e vírgula sempre que ocorrer um error de parser, decorrente da falta do ponto e vírgula.
6+
7+
var foo = function() {
8+
} // parse error, semicolon expected
9+
test()
10+
11+
A inserção acontece e o parser realiza uma nova tentativa.
12+
13+
var foo = function() {
14+
}; // no error, parser continues
15+
test()
16+
17+
A inseção automática de ponto e vírgula é considerada um dos **maiores** equívocos no design da linguagem pois pode influenciar no comportamento do código.
18+
19+
### Como funciona
20+
21+
O código abaixo não possui ponto e vírgula, então fica à cargo do parser inserir o ponto e vírgula onde julgar necessário.
22+
23+
(function(window, undefined) {
24+
function test(options) {
25+
log('testing!')
26+
27+
(options.list || []).forEach(function(i) {
28+
29+
})
30+
31+
options.value.test(
32+
'long string to pass here',
33+
'and another long string to pass'
34+
)
35+
36+
return
37+
{
38+
foo: function() {}
39+
}
40+
}
41+
window.test = test
42+
43+
})(window)
44+
45+
(function(window) {
46+
window.someLibrary = {}
47+
48+
})(window)
49+
50+
Abaixo está o resultado do processamento do parser.
51+
52+
(function(window, undefined) {
53+
function test(options) {
54+
55+
// Not inserted, lines got merged
56+
log('testing!')(options.list || []).forEach(function(i) {
57+
58+
}); // <- inserted
59+
60+
options.value.test(
61+
'long string to pass here',
62+
'and another long string to pass'
63+
); // <- inserted
64+
65+
return; // <- inserted, breaks the return statement
66+
{ // treated as a block
67+
68+
// a label and a single expression statement
69+
foo: function() {}
70+
}; // <- inserted
71+
}
72+
window.test = test; // <- inserted
73+
74+
// The lines got merged again
75+
})(window)(function(window) {
76+
window.someLibrary = {}; // <- inserted
77+
78+
})(window); //<- inserted
79+
80+
> **Nota:** O parser do JavaScript não manipula corretamente 'return statements' que são seguidos de uma nova linha. Apesar de não ser necessariamente uma > > > falha da inserção automática do ponto e vírgula, ainda pode gerar efeitos colaterais não-esperados.
81+
82+
O parser mudou o comportamento do código acima drásticamente. Em determinados casos, o parser **não procede** como o esperado.
83+
84+
### Parênteses
85+
86+
No caso de parênteses, o parser **não** insere o ponto e vírgula.
87+
88+
log('testing!')
89+
(options.list || []).forEach(function(i) {})
90+
91+
Este código é interpretado em uma só linha.
92+
93+
log('testing!')(options.list || []).forEach(function(i) {})
94+
95+
As chances de `log` não retornar uma função são **muito** altas; portanto, o código acima irá produzir um `TypeError` informando que `undefined is not a function`.
96+
97+
### Conclusão
98+
99+
It is highly recommended to **never** omit semicolons. It is also recommended
100+
that braces be kept on the same line as their corresponding statements and to
101+
never omit them for single-line `if` / `else` statements. These measures will
102+
not only improve the consistency of the code, but they will also prevent the
103+
JavaScript parser from changing code behavior.
104+
105+
É **fortemente** recomendado que nunca se omita o ponto e vírgula. Também é recomendado que chaves sejam mantidas na mesma linha que seus statements e que nunca sejam omitadas em declações de uma só linha como `if` / `else` statements. Tais medidas não somente melhorarão a consistência do código, como também irão previnir alteração no comportamento do código por má interpretação do parser do JavaScript.
106+

0 commit comments

Comments
 (0)