1
00:00:01,140 --> 00:00:02,160
En esta conferencia

2
00:00:02,160 --> 00:00:04,680
repasemos cómo funciona el cortocircuito

3
00:00:04,680 --> 00:00:06,903
con algunos operadores lógicos.

4
00:00:08,460 --> 00:00:11,190
Entonces, en JavaScript, algunos operadores lógicos,

5
00:00:11,190 --> 00:00:14,730
como el final y el operador o,

6
00:00:14,730 --> 00:00:18,060
tienen una característica llamada cortocircuito.

7
00:00:18,060 --> 00:00:21,540
Entonces, cortocircuito en operadores lógicos,

8
00:00:21,540 --> 00:00:24,030
significa que, en determinadas condiciones,

9
00:00:24,030 --> 00:00:27,750
el operador devolverá inmediatamente el primer valor

10
00:00:27,750 --> 00:00:31,050
y ni siquiera mirar el segundo valor.

11
00:00:31,050 --> 00:00:33,570
Y esto probablemente suene confuso.

12
00:00:33,570 --> 00:00:37,140
Entonces, por supuesto, escribamos algo de código aquí.

13
00:00:37,140 --> 00:00:39,780
Entonces, comenzando con el operador final,

14
00:00:39,780 --> 00:00:43,770
el operador final sufre un cortocircuito cuando opera por primera vez.

15
00:00:43,770 --> 00:00:46,800
Entonces, cuando el primer valor es falso

16
00:00:46,800 --> 00:00:49,893
y luego devolverá inmediatamente ese primer valor.

17
00:00:51,000 --> 00:00:53,080
Entonces usemos un console.log aquí

18
00:00:54,120 --> 00:00:56,220
y hagamos lo que acabo de decir.

19
00:00:56,220 --> 00:00:57,870
Entonces, cuando el primer valor es verdadero

20
00:00:57,870 --> 00:01:00,240
el operador final regresará automáticamente

21
00:01:00,240 --> 00:01:01,770
la segunda operante,

22
00:01:01,770 --> 00:01:05,160
entonces el segundo valor, no importa cuál sea.

23
00:01:05,160 --> 00:01:06,660
Entonces digamos algo de cuerda.

24
00:01:06,660 --> 00:01:10,080
Y así, de hecho, inmediatamente obtenemos algo de cuerda aquí.

25
00:01:10,080 --> 00:01:12,930
Y aquí no tenemos ningún cortocircuito.

26
00:01:12,930 --> 00:01:15,840
El cortocircuito funciona en el operador final.

27
00:01:15,840 --> 00:01:17,883
cuando el primer valor es falso.

28
00:01:19,080 --> 00:01:22,920
Entonces aquí si tenemos falso, entonces hay un cortocircuito.

29
00:01:22,920 --> 00:01:26,730
y el operador ni siquiera mira el segundo valor.

30
00:01:26,730 --> 00:01:30,330
Entonces, en cambio, devuelve inmediatamente el primero aquí.

31
00:01:30,330 --> 00:01:32,490
Y eso va a ser muy útil

32
00:01:32,490 --> 00:01:36,003
básicamente para usar esto como un si.

33
00:01:38,160 --> 00:01:41,103
Entonces, por ejemplo, podríamos hacer hasMovieAdaptation

34
00:01:42,219 --> 00:01:44,552
y 'este libro tiene una película'.

35
00:01:49,008 --> 00:01:50,803
Y aquí el operador, al igual que en esta línea anterior,

36
00:01:52,380 --> 00:01:55,020
devuelve inmediatamente este valor falso

37
00:01:55,020 --> 00:01:58,860
porque, como podemos ver aquí, su adaptación cinematográfica es falsa.

38
00:01:58,860 --> 00:02:01,200
Y entonces el operador final hace cortocircuito.

39
00:02:01,200 --> 00:02:04,470
y ni siquiera mira esta otra parte aquí.

40
00:02:04,470 --> 00:02:07,680
Pero claro, si volvemos a usar el primer libro,

41
00:02:07,680 --> 00:02:09,300
aquí mismo,

42
00:02:09,300 --> 00:02:12,000
Entonces obtenemos que este libro tiene una película.

43
00:02:12,000 --> 00:02:15,657
De nuevo, esto actúa un poco como un si, ¿verdad?

44
00:02:15,657 --> 00:02:19,770
Y entonces, a veces en React, usamos eso para nuestro beneficio.

45
00:02:19,770 --> 00:02:24,183
Y esto también funciona con los llamados valores verdaderos y falsos.

46
00:02:27,870 --> 00:02:31,380
Entonces un valor veraz es básicamente cualquier valor

47
00:02:31,380 --> 00:02:33,510
ese no es un valor falso.

48
00:02:33,510 --> 00:02:36,273
Y el valor falso, simplemente escríbalo aquí,

49
00:02:38,400 --> 00:02:43,400
es cero y, cadena vacía, nula e indefinida.

50
00:02:45,120 --> 00:02:46,560
Y creo que en realidad hay uno más,

51
00:02:46,560 --> 00:02:48,960
que no puedo pensar en este momento.

52
00:02:48,960 --> 00:02:51,410
Así que sí, estos son los que realmente importan.

53
00:02:52,380 --> 00:02:55,050
Entonces este no es uno de estos valores falsos.

54
00:02:55,050 --> 00:02:57,090
y, por tanto, es un valor veraz,

55
00:02:57,090 --> 00:02:59,850
lo que significa que para el operador final,

56
00:02:59,850 --> 00:03:03,690
es como si esto fuera realmente un valor verdadero

57
00:03:03,690 --> 00:03:06,030
porque, básicamente, detrás de escena

58
00:03:06,030 --> 00:03:07,953
esto se convierte en verdadero.

59
00:03:13,320 --> 00:03:14,970
Y como esto es cierto,

60
00:03:14,970 --> 00:03:17,820
obtenemos el segundo valor de la operación.

61
00:03:17,820 --> 00:03:22,560
Pero si usamos un valor falso, digamos cero,

62
00:03:25,410 --> 00:03:27,480
entonces obtenemos el primero.

63
00:03:27,480 --> 00:03:30,930
Así que aquí, una vez más, tenemos un cortocircuito en acción.

64
00:03:30,930 --> 00:03:35,340
porque este es un valor falso, está bien.

65
00:03:35,340 --> 00:03:37,860
Eso es suficiente para el operador final.

66
00:03:37,860 --> 00:03:39,540
Ahora vayamos al operador o,

67
00:03:39,540 --> 00:03:42,420
que funciona exactamente al revés.

68
00:03:42,420 --> 00:03:44,190
Entonces este cortocircuita

69
00:03:44,190 --> 00:03:46,890
siempre que el primer extremo superior sea verdadero

70
00:03:46,890 --> 00:03:48,483
y luego lo devolverá.

71
00:03:54,900 --> 00:03:58,920
Entonces, si tenemos verdadero o alguna cadena,

72
00:03:58,920 --> 00:04:00,930
Eso realmente no importa aquí la palabra,

73
00:04:00,930 --> 00:04:02,673
entonces inmediatamente nos volvemos verdaderos.

74
00:04:03,990 --> 00:04:08,550
Pero si tenemos falso, obtenemos una cadena.

75
00:04:08,550 --> 00:04:09,840
Y así, a partir de este ejemplo,

76
00:04:09,840 --> 00:04:11,910
podemos ver que el cortocircuito

77
00:04:11,910 --> 00:04:16,910
sucede aquí en este caso siempre que el primer valor sea verdadero.

78
00:04:16,950 --> 00:04:17,940
Entonces esto es cierto.

79
00:04:17,940 --> 00:04:21,153
Entonces el operador ni siquiera mira el segundo valor.

80
00:04:22,770 --> 00:04:26,160
Ahora, podemos usar esto aquí, en realidad para nuestro beneficio.

81
00:04:26,160 --> 00:04:28,413
para establecer valores predeterminados.

82
00:04:29,400 --> 00:04:30,900
Probemos con un ejemplo, de hecho,

83
00:04:30,900 --> 00:04:33,210
con los datos con los que estamos trabajando.

84
00:04:33,210 --> 00:04:38,210
Y veamos primero el libro.traducciones.español.

85
00:04:45,630 --> 00:04:48,760
Y entonces tenemos esta cadena en español aquí.

86
00:04:49,650 --> 00:04:52,440
y eso es porque tenemos una traducción al español.

87
00:04:52,440 --> 00:04:53,400
para este libro.

88
00:04:53,400 --> 00:04:57,480
Pero para el otro libro, nuevamente, el libro número dos.

89
00:04:57,480 --> 00:04:58,803
Creo que no hay ninguno.

90
00:04:59,880 --> 00:05:01,740
Entonces sí, no está definido.

91
00:05:01,740 --> 00:05:02,820
Y entonces digamos

92
00:05:02,820 --> 00:05:06,690
que queríamos establecer un valor predeterminado en caso de que no hubiera ninguno.

93
00:05:06,690 --> 00:05:09,723
Entonces podemos usar el operador final para eso.

94
00:05:12,570 --> 00:05:15,760
Entonces digamos traducción al español.

95
00:05:17,580 --> 00:05:22,580
es libro.traducciones.español o 'no traducido'.

96
00:05:31,920 --> 00:05:35,280
Entonces el resultado de la traducción al español, ahora mismo,

97
00:05:35,280 --> 00:05:36,630
no esta traducido

98
00:05:36,630 --> 00:05:39,330
porque, recuerda, este no estaba definido.

99
00:05:39,330 --> 00:05:43,410
Y indefinido es uno de estos valores falsos, ¿verdad?

100
00:05:43,410 --> 00:05:48,240
Y como vimos aquí, cuando el valor es falso o falso,

101
00:05:48,240 --> 00:05:49,560
entonces el operador final

102
00:05:49,560 --> 00:05:52,710
pasa a la segunda parte del operador.

103
00:05:52,710 --> 00:05:54,870
Entonces no hay cortocircuitos.

104
00:05:54,870 --> 00:05:57,460
Y entonces aquí estamos usando eso para nuestro beneficio.

105
00:05:59,632 --> 00:06:02,040
configurando esta cadena predeterminada aquí mismo.

106
00:06:02,040 --> 00:06:05,250
Y entonces esto es lo que será el resultado.

107
00:06:05,250 --> 00:06:06,930
de toda esta operación.

108
00:06:06,930 --> 00:06:10,350
Y luego será asignado a esta variable.

109
00:06:10,350 --> 00:06:12,600
Y si el libro fuera el número uno,

110
00:06:12,600 --> 00:06:14,250
que no voy a hacer ahora,

111
00:06:14,250 --> 00:06:17,610
pero sí, recuerdas que tenía traducción.

112
00:06:17,610 --> 00:06:20,340
Y entonces esto aquí se convertiría en un valor verdadero.

113
00:06:20,340 --> 00:06:22,650
y entonces tendríamos un cortocircuito.

114
00:06:22,650 --> 00:06:24,690
Entonces este no sería evaluado.

115
00:06:24,690 --> 00:06:27,000
Y luego el valor de la traducción al español.

116
00:06:27,000 --> 00:06:28,803
sería simplemente este.

117
00:06:30,780 --> 00:06:34,410
Genial, sin embargo, esto también puede salir mal.

118
00:06:34,410 --> 00:06:37,380
porque esto funciona para todos los valores falsos

119
00:06:37,380 --> 00:06:40,200
como cero también.

120
00:06:40,200 --> 00:06:43,350
A veces eso puede tener algunas consecuencias.

121
00:06:43,350 --> 00:06:45,933
Así que déjame mostrarte lo que quiero decir con eso.

122
00:06:46,770 --> 00:06:51,427
Entonces en book.reviews.libranything.

123
00:06:56,280 --> 00:07:01,280
Y ahora .reviewsCount es cero.

124
00:07:02,250 --> 00:07:04,980
Entonces cada uno de estos libros tiene esta propiedad de reseñas.

125
00:07:04,980 --> 00:07:07,020
y ahí tenemos algunas reseñas

126
00:07:07,020 --> 00:07:11,910
de buenas lecturas y de la biblioteca cualquier cosa o algo.

127
00:07:11,910 --> 00:07:13,023
Y entonces ahí dentro,

128
00:07:14,010 --> 00:07:15,933
pues este no tiene nada

129
00:07:18,540 --> 00:07:19,373
o en realidad lo hace,

130
00:07:19,373 --> 00:07:21,090
pero, como viste aquí abajo,

131
00:07:21,090 --> 00:07:22,890
eso solo está disponible en la edición pro

132
00:07:22,890 --> 00:07:23,990
que tienes que pagar.

133
00:07:24,870 --> 00:07:25,980
Y entonces sí.

134
00:07:25,980 --> 00:07:29,430
Dentro de las reseñas tenemos buenas lecturas y cualquier cosa en la biblioteca.

135
00:07:29,430 --> 00:07:30,990
Y luego cada uno de ellos tiene una calificación,

136
00:07:30,990 --> 00:07:33,210
recuento de calificaciones y recuento de reseñas.

137
00:07:33,210 --> 00:07:37,020
Pero para este libro número uno, que estamos usando ahora mismo,

138
00:07:37,020 --> 00:07:41,370
el recuento de reseñas para libranything es cero.

139
00:07:41,370 --> 00:07:43,350
Entonces usemos este valor.

140
00:07:43,350 --> 00:07:47,640
así puedo mostrarles que esto también puede salir mal.

141
00:07:47,640 --> 00:07:49,893
Entonces esto, estableciendo un valor predeterminado.

142
00:07:52,410 --> 00:07:54,993
Así que cuenta, llamémoslo realmente contarMal.

143
00:07:57,810 --> 00:08:02,810
Entonces book.reviews.libranything.reviewsCount o 'sin datos'.

144
00:08:10,800 --> 00:08:13,350
Básicamente queremos que las reseñas cuenten,

145
00:08:13,350 --> 00:08:15,060
pero si ahí no hay valor,

146
00:08:15,060 --> 00:08:17,973
entonces queremos que no haya datos.

147
00:08:20,430 --> 00:08:24,480
Así que veamos qué es countWrong, bueno, dice "sin datos".

148
00:08:24,480 --> 00:08:27,150
pero sabemos que en realidad es cero.

149
00:08:27,150 --> 00:08:29,910
Entonces querríamos que el conteo fuera cero.

150
00:08:29,910 --> 00:08:34,740
y no "sin datos" porque en realidad hay datos, ¿verdad?

151
00:08:34,740 --> 00:08:36,640
Entonces para el libro uno

152
00:08:40,920 --> 00:08:43,260
por ejemplo, o cualquier otro libro,

153
00:08:43,260 --> 00:08:44,460
hay este otro número.

154
00:08:44,460 --> 00:08:46,260
Entonces algo que no es cero.

155
00:08:46,260 --> 00:08:48,990
Y aquí entonces el countWrong es realmente correcto.

156
00:08:48,990 --> 00:08:52,983
Así que aquí 452 es exactamente lo que queremos,

157
00:08:55,770 --> 00:08:58,500
pero no cuando es cero.

158
00:08:58,500 --> 00:09:01,710
Entonces, cuando este valor es cero, es un valor falso.

159
00:09:01,710 --> 00:09:03,570
Y entonces, cuando este es un valor falso,

160
00:09:03,570 --> 00:09:05,100
cual es el cero,

161
00:09:05,100 --> 00:09:10,020
el resultado de este operador será la segunda parte,

162
00:09:10,020 --> 00:09:13,320
lo cual en este caso, nuevamente, es incorrecto.

163
00:09:13,320 --> 00:09:14,700
ahora a solucionar esto

164
00:09:14,700 --> 00:09:18,000
JavaScript ha agregado recientemente un nuevo operador lógico

165
00:09:18,000 --> 00:09:21,750
que se llama operador coalescente nulo.

166
00:09:21,750 --> 00:09:23,373
Entonces un nombre muy extraño.

167
00:09:24,420 --> 00:09:25,410
Pero lo que importa

168
00:09:25,410 --> 00:09:29,250
es que funciona de manera muy similar al operador or,

169
00:09:29,250 --> 00:09:33,840
pero también produce un cortocircuito para valores falsos.

170
00:09:33,840 --> 00:09:36,150
Así que déjame mostrarte lo que eso significa.

171
00:09:36,150 --> 00:09:40,380
De nuevo, const, ahora llamémoslo contar,

172
00:09:40,380 --> 00:09:43,983
es igual a book.reviews.libraanything.reviewsCount.

173
00:09:47,250 --> 00:09:52,250
Y luego signo de interrogación, signo de interrogación, "sin datos".

174
00:09:52,650 --> 00:09:55,020
Entonces aquí tenemos básicamente exactamente lo mismo,

175
00:09:55,020 --> 00:09:56,520
pero en lugar de usar o,

176
00:09:56,520 --> 00:09:58,830
Estamos usando la fusión nula.

177
00:09:58,830 --> 00:10:02,700
Y ahora el recuento ya no será "sin datos".

178
00:10:02,700 --> 00:10:04,290
pero será cero.

179
00:10:04,290 --> 00:10:06,600
Entonces este operador coalescente nulo

180
00:10:06,600 --> 00:10:09,090
sólo devolverá el segundo valor

181
00:10:09,090 --> 00:10:12,540
cuando el primer valor es nulo o indefinido,

182
00:10:12,540 --> 00:10:15,423
pero no cuando es cero o una cadena vacía.

183
00:10:17,130 --> 00:10:19,260
Y entiendo que esto suena muy confuso.

184
00:10:19,260 --> 00:10:20,580
probablemente ahora mismo,

185
00:10:20,580 --> 00:10:22,260
pero lo verás en la práctica

186
00:10:22,260 --> 00:10:24,300
que esto hace toda la diferencia

187
00:10:24,300 --> 00:10:27,450
y es otra buena adición aquí,

188
00:10:27,450 --> 00:10:29,253
éste, a JavaScript.