Skip to content

Commit 7797c95

Browse files
committed
Finish a simple translation
There are some grammar erros
1 parent 240ce48 commit 7797c95

File tree

1 file changed

+179
-30
lines changed

1 file changed

+179
-30
lines changed

1-js/02-first-steps/11-logical-operators/article-pt.md

Lines changed: 179 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ if (hour < 10 || hour > 18 || isWeekend) {
6464
}
6565
```
6666

67-
## OU encontrao primeiro valor verdadeiro
67+
## OU encontra o primeiro valor verdadeiro
6868

6969
A lógica descrita acima é algo clássico. Agora, vamos ver as funcionalidades "extras" do JavaScript.
7070

@@ -101,56 +101,205 @@ Isso nos mostra algumas utilidades interessantes comparadas ao "puro, clássico,
101101

102102
1. **Obtendo o primeiro valor verdadeiro de uma lista de variáveis ou expressões.**
103103

104-
Imagine que temos várias variáveis que podem conter algum dado ou ser `null/undefined`. Como podemos encontrar a primeira com algum dado?
104+
Imagine que temos várias variáveis que podem conter algum dado ou ser `null/undefined`. Como podemos encontrar a primeira com algum dado?
105105

106-
Nós podemos usar OU `||`:
106+
Nós podemos usar OU `||`:
107107

108-
```js run
109-
let currentUser = null;
110-
let defaultUser = "John";
108+
```js run
109+
let currentUser = null;
110+
let defaultUser = "John";
111111

112-
*!*
113-
let name = currentUser || defaultUser || "unnamed";
114-
*/!*
112+
*!*
113+
let name = currentUser || defaultUser || "unnamed";
114+
*/!*
115115

116-
alert( name ); // seleciona "John" - o primeiro valor verdadeiro
117-
```
116+
alert( name ); // seleciona "John" - o primeiro valor verdadeiro
117+
```
118118

119-
Se ambos `currentUser` e `defaultUser` forem falsos, o resultado será `"unnamed"`.
119+
Se ambos `currentUser` e `defaultUser` forem falsos, o resultado será `"unnamed"`.
120120
2. **Interpretação de curto-circuito**
121121

122-
Operandos podem não ser apenas valores, mas operações arbitrárias. OU interpreta e testa elas da esquerda para a direita. A interpretação para quando um valor verdadeiro é encontrado e este valor é retornado. Este processo é chamado de "interpretação de curto-circuito" pois vai o mais curto possível da esquerda para a direita.
122+
Operandos podem não ser apenas valores, mas operações arbitrárias. OU interpreta e testa elas da esquerda para a direita. A interpretação para quando um valor verdadeiro é encontrado e este valor é retornado. Este processo é chamado de "interpretação de curto-circuito" pois vai o mais curto possível da esquerda para a direita.
123123

124-
Isto é claramente visto quando a expressão dada como segundo argumento tem um efeito como a atribuição de uma variável.
124+
Isto é claramente visto quando a expressão dada como segundo argumento tem um efeito como a atribuição de uma variável.
125125

126-
No exemplo abaixo, `x` não tem nenhuma atribuição:
126+
No exemplo abaixo, `x` não tem nenhuma atribuição:
127127

128-
```js run no-beautify
129-
let x;
128+
```js run no-beautify
129+
let x;
130130
131-
*!*true*/!* || (x = 1);
131+
*!*true*/!* || (x = 1);
132132
133-
alert(x); // undefined, pois (x = 1) não é interpretados
134-
```
133+
alert(x); // undefined, pois (x = 1) não é interpretados
134+
```
135135

136-
Se, por outro lado, o primeiro argumento é `false`, `||` interpreta o segundo, fazendo assim a atribuição:
136+
Se, por outro lado, o primeiro argumento é `false`, `||` interpreta o segundo, fazendo assim a atribuição:
137137

138-
```js run no-beautify
139-
let x;
138+
```js run no-beautify
139+
let x;
140140
141-
*!*false*/!* || (x = 1);
141+
*!*false*/!* || (x = 1);
142142
143-
alert(x); // 1
144-
```
143+
alert(x); // 1
144+
```
145145

146-
Uma atribuição é um caso simples. Outros SIDE EFFECTS podem também estarem envolvidos.
146+
Uma atribuição é um caso simples. Outros SIDE EFFECTS podem também estarem envolvidos.
147147

148-
Como podemos ver, esse caso é como um "uma maneira mais curta de se usar `if`". O primeiro operando é convertido para boolean. Se for false, o segundo operando é interpretado.
148+
Como podemos ver, esse caso é como um "uma maneira mais curta de se usar `if`". O primeiro operando é convertido para boolean. Se for false, o segundo operando é interpretado.
149149

150-
Na maioria das vezes, é melhor usar o `if` "regular" para manter a facilidade de entendimento do código, mas vez ou outra isso pode ser útil.
150+
Na maioria das vezes, é melhor usar o `if` "regular" para manter a facilidade de entendimento do código, mas vez ou outra isso pode ser útil.
151151

152+
## && (E)
152153

154+
O operador E é representado com dois e's comerciais `&&`:
153155
156+
```js
157+
result = a && b;
158+
```
159+
160+
Em programação clássica, E retorna `true` se ambos os operandos forem verdadeiros e `false`, caso contrário:
161+
162+
```js run
163+
alert( true && true ); // true
164+
alert( false && true ); // false
165+
alert( true && false ); // false
166+
alert( false && false ); // false
167+
```
168+
169+
Um exemplo com `if`:
170+
171+
```js run
172+
let hour = 12;
173+
let minute = 30;
174+
175+
if (hour == 12 && minute == 30) {
176+
alert( 'Agora são 12:30' );
177+
}
178+
```
179+
180+
Da mesma forma com OU, qualquer valor é permitido como um operando de E:
181+
182+
```js run
183+
if (1 && 0) { // interpre como true && false
184+
alert( "não funciona, pois o resultado é falso" );
185+
}
186+
```
187+
188+
## "E" encontra o primeiro valor falsos
189+
190+
Dados múltiplos valores encadeados com E's:
191+
192+
```js
193+
result = value1 && value2 && value3;
194+
```
195+
196+
O operador `&&` faz o seguinte:
197+
198+
- Interpreta os operandos da esquerda para a direita.
199+
- Para cada operando, o converte para um boolean. Se o resultado for `false`, para e retorna o valor original daquele operando.
200+
- Se todos os operandos foram interpretados (i.e. todos são verdadeiros), retorna o último operando.
201+
202+
Em outras palavras, E retorna o primeiro valor falso ou o último valor se nenhum for falso.
203+
204+
As regras acima são similares ao OU. A diferença é que E retorna o primeiro valor *falso* enquanto OR retorna o primeiro valor *verdadeiro*.
205+
206+
Exemplos:
207+
208+
```js run
209+
// se o primeiro valor é verdadeiro,
210+
// E retorna o segundo parâmetro:
211+
alert( 1 && 0 ); // 0
212+
alert( 1 && 5 ); // 5
213+
214+
// se o primeiro valor é falso,
215+
// E retorna ele. O segundo operando é ignorado.
216+
alert( null && 5 ); // null
217+
alert( 0 && "não importa o quê" ); // 0
218+
```
219+
220+
Nós podemos também passar vários valores seguidos. Veja como o primeiro falso é retornado:
221+
222+
```js run
223+
alert( 1 && 2 && null && 3 ); // null
224+
```
225+
226+
Quando todos valores são falsos, o último valor é retornado:
227+
228+
```js run
229+
alert( 1 && 2 && 3 ); // 3, que é o último
230+
```
231+
232+
````smart header="Precedência do E `&&` é maior do que do OU `||`"
233+
A precedência do operador E `&&` é maior do que do OU `||`.
234+
235+
Portanto, o código `a && b || c && d` é essencialmente o mesmo como se as expressões `&&` estivessem entre parênteses: `(a && b) || (c && d)`.
236+
````
237+
238+
Assim como OU, o operador E `&&` às vezes pode substituir um `if`.
239+
240+
Por exemplo:
241+
242+
```js run
243+
let x = 1;
244+
245+
(x > 0) && alert( 'Maior que zero!' );
246+
```
247+
248+
A ação na parte direita do `&&` executaria somente se a interpretação chegasse até ela. Ou seja, apenas se `(x > 0)` for verdadeiro.
249+
250+
Então, basicamente temos uma analogia para:
251+
252+
```js run
253+
let x = 1;
254+
255+
if (x > 0) {
256+
alert( 'Maior que zero!' );
257+
}
258+
```
259+
260+
A variação com `&&` parece mais curta. Mas `if` é mais óbvio e tende a ser um pouco mais legível.
261+
262+
Então recomendamos a utilização de cada CONSTRUCT para seu propósito: use `if` se queremos SE e use `&&` se queremos E.
263+
264+
## ! (NÃO)
265+
266+
O operador booleano NÃO é representado com um sinal de exclamação `!`.
267+
268+
Sua sintaxe é bem simples:
269+
270+
```js
271+
result = !value;
272+
```
273+
274+
O operador aceita um único argumento e faz o seguinte:
275+
276+
1. Converte o operando para um tipo boolean: `true/false`.
277+
2. Retorna o seu valor inverso.
278+
279+
Por exemplo:
280+
281+
```js run
282+
alert( !true ); // false
283+
alert( !0 ); // true
284+
```
285+
286+
Uma repetição do NOT `!!` às vezes é usado para converter um valor para o tipo boolean:
287+
288+
```js run
289+
alert( !!"string não vazia" ); // true
290+
alert( !!null ); // false
291+
```
292+
293+
Ou seja, o primeiro NOT converte o valor para boolean e retorna o seu inverso e o segundo NOT o inverte de novo. No final, nós temos uma conversão do valor para boolean.
294+
295+
Existem outras formas mais extensas de se fazer a mesma coisa -- uma função `Boolean`:
296+
297+
```js run
298+
alert( Boolean("string não vazia") ); // true
299+
alert( Boolean(null) ); // false
300+
```
301+
302+
A precedência do NOT `!` é a mais alta entre todos os operadores lógicos, então ele é executado primeiro, antes que `&&` ou `||`.
154303

155304

156305

@@ -175,4 +324,4 @@ Isso nos mostra algumas utilidades interessantes comparadas ao "puro, clássico,
175324

176325

177326

178-
```
327+
```

0 commit comments

Comments
 (0)