Skip to content

Commit ddd7bd8

Browse files
committed
fix(steps): translates the article about comparison
1 parent 37da7e2 commit ddd7bd8

File tree

2 files changed

+99
-95
lines changed

2 files changed

+99
-95
lines changed

1-js/02-first-steps/09-comparison/1-comparison-questions/solution.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ null == "\n0\n" → false
1010
null === +"\n0\n"false
1111
```
1212

13-
Some of the reasons:
13+
Alguns dos motivos:
1414

15-
1. Obviously, true.
16-
2. Dictionary comparison, hence false. `"a"` is smaller than `"p"`.
17-
3. Again, dictionary comparison, first char `"2"` is greater than the first char `"1"`.
18-
4. Values `null` and `undefined` equal each other only.
19-
5. Strict equality is strict. Different types from both sides lead to false.
20-
6. Similar to `(4)`, `null` only equals `undefined`.
21-
7. Strict equality of different types.
15+
1. Obviamente, verdade.
16+
2. Comparação de dicionário, portanto, falsa. `"a"` é menor que `"p"`.
17+
3. Novamente, comparação de dicionário, primeiro caractere `"2"` é maior que o primeiro caractere `"1"`.
18+
4. Os valores `null` e `undefined` são iguais apenas entre si.
19+
5. Igualdade estrita é estrita. Diferentes tipos de ambos os lados levam ao falso.
20+
6. Semelhante a `(4)`, `null` só é igual a `undefined`.
21+
7. Igualdade estrita de diferentes tipos.
Lines changed: 91 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,103 +1,107 @@
11
# Comparisons
22

3-
We know many comparison operators from maths.
3+
Conhecemos muitos operadores de comparação de matemática:
44

5-
In JavaScript they are written like this:
5+
Em JavaScript eles são escritos assim:
66

7-
- Greater/less than: <code>a &gt; b</code>, <code>a &lt; b</code>.
8-
- Greater/less than or equals: <code>a &gt;= b</code>, <code>a &lt;= b</code>.
9-
- Equals: `a == b`, please note the double equality sign `==` means the equality test, while a single one `a = b` means an assignment.
10-
- Not equals: In maths the notation is <code>&ne;</code>, but in JavaScript it's written as <code>a != b</code>.
7+
- Maior/menor que: <code>a &gt; b</code>, <code>a &lt; b</code>.
8+
- Maior/menor ou igual: <code>a &gt;= b</code>, <code>a &lt;= b</code>.
9+
- Equals: `a == b`, observe o sinal de igualdade duplo `==` significa o teste de igualdade, enquanto um único `a = b` significa uma atribuição.
10+
- Diferente: Em matemática a notação é <code>&ne;</code>, mas em JavaScript é escrita como <code>a != b</code>.
1111

1212
In this article we'll learn more about different types of comparisons, how JavaScript makes them, including important peculiarities.
1313

1414
At the end you'll find a good recipe to avoid "JavaScript quirks"-related issues.
1515

16-
## Boolean is the result
16+
Neste artigo vamos aprender mais sobre diferentes tipos de comparações, como o JavaScript as processa, incluindo peculiaridades importantes.
1717

18-
All comparison operators return a boolean value:
18+
No final, você encontrará uma boa receita para evitar problemas relacionados a "peculiaridades do JavaScript".
1919

20-
- `true` -- means "yes", "correct" or "the truth".
21-
- `false` -- means "no", "wrong" or "not the truth".
20+
## Booleano é o resultado
2221

23-
For example:
22+
Todos os operadores de comparação retornam um valor booleano:
23+
24+
- `true` -- significa "sim", "correto" ou "verdade".
25+
- `false` -- significa "não", "errado" ou "falso".
26+
27+
Por exemplo:
2428

2529
```js run
26-
alert( 2 > 1 ); // true (correct)
27-
alert( 2 == 1 ); // false (wrong)
28-
alert( 2 != 1 ); // true (correct)
30+
alert( 2 > 1 ); // true (correto)
31+
alert( 2 == 1 ); // false (errado)
32+
alert( 2 != 1 ); // true (correto)
2933
```
3034

31-
A comparison result can be assigned to a variable, just like any value:
35+
Um resultado de comparação pode ser atribuído a uma variável, assim como qualquer valor:
3236

3337
```js run
34-
let result = 5 > 4; // assign the result of the comparison
38+
let result = 5 > 4; // atribui o resultado da comparação
3539
alert( result ); // true
3640
```
3741

38-
## String comparison
42+
## Comparação de strings
3943

40-
To see whether a string is greater than another, JavaScript uses the so-called "dictionary" or "lexicographical" order.
44+
Para ver se uma string é maior que outra, o JavaScript usa o chamado ordem "dicionário" ou "lexicográfico".
4145

42-
In other words, strings are compared letter-by-letter.
46+
Em outras palavras, as strings são comparadas letra a letra.
4347

44-
For example:
48+
Por exemplo:
4549

4650
```js run
4751
alert( 'Z' > 'A' ); // true
4852
alert( 'Glow' > 'Glee' ); // true
4953
alert( 'Bee' > 'Be' ); // true
5054
```
5155

52-
The algorithm to compare two strings is simple:
56+
O algoritmo para comparar duas strings é simples:
5357

54-
1. Compare the first character of both strings.
55-
2. If the first character from the first string is greater (or less) than the other string's, then the first string is greater (or less) than the second. We're done.
56-
3. Otherwise, if both strings' first characters are the same, compare the second characters the same way.
57-
4. Repeat until the end of either string.
58-
5. If both strings end at the same length, then they are equal. Otherwise, the longer string is greater.
58+
1. Compare o primeiro caractere de ambas as strings.
59+
2. Se o primeiro caractere da primeira string for maior (ou menor) que o da outra string, então a primeira string será maior (ou menor) que a segunda e a operação será concluída.
60+
3. Caso contrário, se os primeiros caracteres de ambas as strings forem iguais, compare os segundos caracteres da mesma maneira.
61+
4. Repita até o final de uma das strings.
62+
5. Se ambas as strings terminarem com o mesmo comprimento, elas serão iguais. Caso contrário, a string mais longa é maior.
5963

60-
In the first example above, the comparison `'Z' > 'A'` gets to a result at the first step.
64+
No primeiro exemplo acima, a comparação `'Z' > 'A'` obtém um resultado na primeira etapa.
6165

62-
The second comparison `'Glow'` and `'Glee'` needs more steps as strings are compared character-by-character:
66+
A segunda comparação `'Glow'` e `'Glee'` precisa de mais etapas, pois as strings são comparadas caractere por caractere:
6367

64-
1. `G` is the same as `G`.
65-
2. `l` is the same as `l`.
66-
3. `o` is greater than `e`. Stop here. The first string is greater.
68+
1. `G` é o mesmo que `G`.
69+
2. `l` é o mesmo que `l`.
70+
3. `o` é maior que `e`. Pare aqui. A primeira string é maior.
6771

68-
```smart header="Not a real dictionary, but Unicode order"
69-
The comparison algorithm given above is roughly equivalent to the one used in dictionaries or phone books, but it's not exactly the same.
72+
```smart header="Não é um dicionário real, mas ordem Unicode"
73+
O algoritmo de comparação fornecido acima é aproximadamente equivalente ao usado em dicionários ou listas telefônicas, mas não é exatamente o mesmo.
7074
71-
For instance, case matters. A capital letter `"A"` is not equal to the lowercase `"a"`. Which one is greater? The lowercase `"a"`. Why? Because the lowercase character has a greater index in the internal encoding table JavaScript uses (Unicode). We'll get back to specific details and consequences of this in the chapter <info:string>.
75+
Por exemplo, um caso relevante. Uma letra maiúscula `"A"` não é igual à letra minúscula `"a"`. Qual é maior? A letra minúscula `"a"`. Por quê? Porque o caractere minúsculo tem um índice maior na tabela de codificação interna que o JavaScript usa (Unicode). Voltaremos a detalhes específicos e consequências disso no capítulo <info:string>.
7276
```
7377

7478
## Comparison of different types
7579

76-
When comparing values of different types, JavaScript converts the values to numbers.
80+
Quando comparamos valores de tipos diferentes, o JavaScript converte os valores em números.
7781

78-
For example:
82+
Por exemplo:
7983

8084
```js run
81-
alert( '2' > 1 ); // true, string '2' becomes a number 2
82-
alert( '01' == 1 ); // true, string '01' becomes a number 1
85+
alert( '2' > 1 ); // true, string '2' se torna um número 2
86+
alert( '01' == 1 ); // true, string '01' se torna um número 1
8387
```
8488

85-
For boolean values, `true` becomes `1` and `false` becomes `0`.
89+
Para valores booleanos, `true` torna-se `1` e `false` torna-se `0`.
8690

87-
For example:
91+
Por exemplo:
8892

8993
```js run
9094
alert( true == 1 ); // true
9195
alert( false == 0 ); // true
9296
```
9397

94-
````smart header="A funny consequence"
95-
It is possible that at the same time:
98+
````smart header="Uma consequência engraçada"
99+
É possível que ao mesmo tempo:
96100
97-
- Two values are equal.
98-
- One of them is `true` as a boolean and the other one is `false` as a boolean.
101+
- Dois valores são iguais.
102+
- Um deles é `true` como booleano e o outro é `falso` como booleano.
99103
100-
For example:
104+
Por exemplo:
101105
102106
```js run
103107
let a = 0;
@@ -109,108 +113,108 @@ alert( Boolean(b) ); // true
109113
alert(a == b); // true!
110114
```
111115
112-
From JavaScript's standpoint, this result is quite normal. An equality check converts values using the numeric conversion (hence `"0"` becomes `0`), while the explicit `Boolean` conversion uses another set of rules.
116+
Do ponto de vista do JavaScript, esse resultado é bastante normal. Uma verificação de igualdade converte valores usando a conversão numérica (portanto, `"0"` se torna `0`), enquanto a conversão explícita `booleana` usa outro conjunto de regras.
113117
````
114118

115-
## Strict equality
119+
## Igualdade estrita
116120

117-
A regular equality check `==` has a problem. It cannot differentiate `0` from `false`:
121+
Uma verificação de igualdade regular `==` tem um problema. Ele não pode diferenciar `0` de `false`:
118122

119123
```js run
120124
alert( 0 == false ); // true
121125
```
122126

123-
The same thing happens with an empty string:
127+
A mesma coisa acontece com uma string vazia:
124128

125129
```js run
126130
alert( '' == false ); // true
127131
```
128132

129-
This happens because operands of different types are converted to numbers by the equality operator `==`. An empty string, just like `false`, becomes a zero.
133+
Isso acontece porque operandos de tipos diferentes são convertidos em números pelo operador de igualdade `==`. Uma string vazia, assim como `false`, torna-se um zero.
130134

131-
What to do if we'd like to differentiate `0` from `false`?
135+
O que fazer se quisermos diferenciar `0` de `false`?
132136

133-
**A strict equality operator `===` checks the equality without type conversion.**
137+
**Um operador de igualdade estrito `===` verifica a igualdade sem conversão de tipo.**
134138

135-
In other words, if `a` and `b` are of different types, then `a === b` immediately returns `false` without an attempt to convert them.
139+
Em outras palavras, se `a` e `b` forem de tipos diferentes, então `a === b` retornará imediatamente `false` sem tentar convertê-los.
136140

137-
Let's try it:
141+
Vamos tentar:
138142

139143
```js run
140-
alert( 0 === false ); // false, because the types are different
144+
alert( 0 === false ); // false, porque os tipos são diferentes
141145
```
142146

143-
There is also a "strict non-equality" operator `!==` analogous to `!=`.
147+
Há também um operador de "não igualdade estrita" `!==` análogo a `!=`.
144148

145-
The strict equality operator is a bit longer to write, but makes it obvious what's going on and leaves less room for errors.
149+
O operador de igualdade estrita é um pouco mais longo para escrever, mas torna óbvio o que está acontecendo e deixa menos espaço para erros.
146150

147-
## Comparison with null and undefined
151+
## Comparação com null e undefined
148152

149-
There's a non-intuitive behavior when `null` or `undefined` are compared to other values.
153+
Há um comportamento não intuitivo quando `null` ou `undefined` são comparados a outros valores.
150154

151-
For a strict equality check `===`
152-
: These values are different, because each of them is a different type.
155+
Para uma verificação de igualdade estrita `===`
156+
: Esses valores são diferentes, porque cada um deles é de um tipo diferente.
153157

154158
```js run
155159
alert( null === undefined ); // false
156160
```
157161

158-
For a non-strict check `==`
159-
: There's a special rule. These two are a "sweet couple": they equal each other (in the sense of `==`), but not any other value.
162+
Para uma verificação não estrita `==`
163+
: Há uma regra especial. Esses dois são um "casal doce": eles se igualam (no sentido de `==`), mas não qualquer outro valor.
160164

161165
```js run
162166
alert( null == undefined ); // true
163167
```
164168

165-
For maths and other comparisons `< > <= >=`
166-
: `null/undefined` are converted to numbers: `null` becomes `0`, while `undefined` becomes `NaN`.
169+
Para matemática e outras comparações `< > <= >=`
170+
: `null/undefined` são convertidos em números: `null` torna-se `0`, enquanto `undefined` torna-se `NaN`.
167171

168-
Now let's see some funny things that happen when we apply these rules. And, what's more important, how to not fall into a trap with them.
172+
Agora vamos ver algumas coisas engraçadas que acontecem quando aplicamos essas regras. E, o que é mais importante, como não cair na armadilha com eles.: Esses valores são diferentes, porque cada um deles é de um tipo diferente.
169173

170-
### Strange result: null vs 0
174+
### Resultado estranho: null vs 0
171175

172-
Let's compare `null` with a zero:
176+
Vamos comparar `null` com um zero:
173177

174178
```js run
175179
alert( null > 0 ); // (1) false
176180
alert( null == 0 ); // (2) false
177181
alert( null >= 0 ); // (3) *!*true*/!*
178182
```
179183

180-
Mathematically, that's strange. The last result states that "`null` is greater than or equal to zero", so in one of the comparisons above it must be `true`, but they are both false.
184+
Matematicamente, isso é estranho. O último resultado afirma que "`null` é maior ou igual a zero", então em uma das comparações acima deve ser `true`, mas ambos são falsos.
181185

182-
The reason is that an equality check `==` and comparisons `> < >= <=` work differently. Comparisons convert `null` to a number, treating it as `0`. That's why (3) `null >= 0` is true and (1) `null > 0` is false.
186+
A razão é que uma verificação de igualdade `==` e comparações `> < >= <=` funcionam de forma diferente. As comparações convertem `null` em um número, tratando-o como `0`. É por isso que (3) `null >= 0` é verdadeiro e (1) `null > 0` é falso.
183187

184-
On the other hand, the equality check `==` for `undefined` and `null` is defined such that, without any conversions, they equal each other and don't equal anything else. That's why (2) `null == 0` is false.
188+
Por outro lado, a verificação de igualdade `==` para `undefined` e `null` é definida de tal forma que, sem nenhuma conversão, eles são iguais e não são iguais a mais nada. É por isso que (2) `null == 0` é falso.
185189

186-
### An incomparable undefined
190+
### Um incomparável indefinido
187191

188-
The value `undefined` shouldn't be compared to other values:
192+
O valor `undefined` não deve ser comparado a outros valores:
189193

190194
```js run
191195
alert( undefined > 0 ); // false (1)
192196
alert( undefined < 0 ); // false (2)
193197
alert( undefined == 0 ); // false (3)
194198
```
195199

196-
Why does it dislike zero so much? Always false!
200+
Por que não gostam do zero? Sempre falso!
197201

198-
We get these results because:
202+
Obtemos esses resultados porque:
199203

200-
- Comparisons `(1)` and `(2)` return `false` because `undefined` gets converted to `NaN` and `NaN` is a special numeric value which returns `false` for all comparisons.
201-
- The equality check `(3)` returns `false` because `undefined` only equals `null`, `undefined`, and no other value.
204+
- Comparações `(1)` e `(2)` retornam `false` porque `undefined` é convertido em `NaN` e `NaN` é um valor numérico especial que retorna `false` para todas as comparações.
205+
- A verificação de igualdade `(3)` retorna `false` porque `undefined` só é igual a `null`, `undefined` e nenhum outro valor.
202206

203-
### Avoid problems
207+
### Evite problemas
204208

205-
Why did we go over these examples? Should we remember these peculiarities all the time? Well, not really. Actually, these tricky things will gradually become familiar over time, but there's a solid way to avoid problems with them:
209+
Por que examinamos esses exemplos? Devemos nos lembrar dessas peculiaridades o tempo todo? Bem, na verdade não. Na verdade, essas coisas complicadas gradualmente se tornarão familiares com o tempo, mas há uma maneira sólida de evitar problemas com elas:
206210

207-
- Treat any comparison with `undefined/null` except the strict equality `===` with exceptional care.
208-
- Don't use comparisons `>= > < <=` with a variable which may be `null/undefined`, unless you're really sure of what you're doing. If a variable can have these values, check for them separately.
211+
- Trate qualquer comparação com `undefined/null` exceto a igualdade estrita `===` com cuidado excepcional.
212+
- Não use comparações `>= > < <=` com uma variável que pode ser `null/undefined`, a menos que você tenha certeza do que está fazendo. Se uma variável puder ter esses valores, verifique-os separadamente.
209213

210-
## Summary
214+
## Resumo
211215

212-
- Comparison operators return a boolean value.
213-
- Strings are compared letter-by-letter in the "dictionary" order.
214-
- When values of different types are compared, they get converted to numbers (with the exclusion of a strict equality check).
215-
- The values `null` and `undefined` equal `==` each other and do not equal any other value.
216-
- Be careful when using comparisons like `>` or `<` with variables that can occasionally be `null/undefined`. Checking for `null/undefined` separately is a good idea.
216+
- Os operadores de comparação retornam um valor booleano.
217+
- As strings são comparadas letra por letra na ordem do "dicionário".
218+
- Quando valores de tipos diferentes são comparados, eles são convertidos em números (com a exclusão de uma verificação de igualdade estrita).
219+
- Os valores `null` e `undefined` são iguais `==` entre si e não são iguais a nenhum outro valor.
220+
- Tenha cuidado ao usar comparações como `>` ou `<` com variáveis ​​que podem ocasionalmente ser `null/undefined`. Verificar por `null/undefined` separadamente é uma boa ideia.

0 commit comments

Comments
 (0)