1
00:00:00,150 --> 00:00:00,780
Bienvenidos.

2
00:00:00,840 --> 00:00:03,450
Continuamos con la clase Optional de ya 8.

3
00:00:03,600 --> 00:00:04,620
Vamos a cerrar.

4
00:00:05,920 --> 00:00:07,480
Vamos a crear un nuevo proyecto.

5
00:00:09,870 --> 00:00:10,510
Place?

6
00:00:11,160 --> 00:00:11,680
Obtener?

7
00:00:12,240 --> 00:00:12,610
Okay.

8
00:00:14,400 --> 00:00:15,960
Bien, vamos a crear el pacato.

9
00:00:20,220 --> 00:00:24,120
Por punto a Guzmán o gional.

10
00:00:24,690 --> 00:00:25,200
Punto.

11
00:00:25,290 --> 00:00:29,580
Ejemplo Bien, pérate continuar una pequeña introducción.

12
00:00:29,770 --> 00:00:36,300
Bueno, en ya 8 se introduce esta nueva clase optional en el paquete ya útil y se utiliza para representar

13
00:00:36,300 --> 00:00:39,090
que un valor esté presente o ausente.

14
00:00:39,330 --> 00:00:44,670
Y la principal ventaja que tiene esta nueva característica es que evita cualquier lanzamiento de excepción

15
00:00:44,750 --> 00:00:47,130
nulo intercepción en tiempo de ejecución.

16
00:00:47,250 --> 00:00:49,890
Recuerden que esta excepción es no chequeada.

17
00:00:50,010 --> 00:00:55,200
Por lo tanto, podría ocurrir de forma silenciosa a pesar de que seamos muy cuidadosos en nuestra aplicación.

18
00:00:55,410 --> 00:01:01,140
Igualmente, podríamos tener algún objeto, alguna referencia null y podría romper nuestra aplicación.

19
00:01:01,330 --> 00:01:03,330
Entonces esta happy optional.

20
00:01:03,510 --> 00:01:10,380
Evita el lanzamiento de esta sección en el puente Deception anidando o encapsulado el objeto dentro

21
00:01:10,380 --> 00:01:15,180
de esta clase opcional y además nos ayuda a desarrollar aplicaciones mucho más limpias y organizadas

22
00:01:15,300 --> 00:01:17,010
utilizando programación funcional.

23
00:01:17,220 --> 00:01:24,150
Presiona el Landau y también muy parecido a la colecciones de objeto, los list, los sets, los arreglos.

24
00:01:24,250 --> 00:01:30,390
Bueno, un optional también es un contenedor que podemos guardar como máximo un solo objeto, un solo

25
00:01:30,390 --> 00:01:30,660
valor.

26
00:01:30,780 --> 00:01:35,280
A diferencia de las listas o arreglos que podemos tener muchos acá, uno solo.

27
00:01:35,400 --> 00:01:40,830
Bueno, entonces, para resumir ventajas no se requiere controles de null, no necesario tener que validar

28
00:01:40,830 --> 00:01:45,380
con un IF si el objeto es igual anul hacer algo, no otra cosa no.

29
00:01:45,540 --> 00:01:50,520
Acá tenemos otros caminos, otras alternativas utilizando el API obtener bien.

30
00:01:50,520 --> 00:01:53,680
Veamos un ejemplo vamos a crear la clase con el main.

31
00:01:54,370 --> 00:01:55,890
Ejemplo optional.

32
00:02:01,820 --> 00:02:07,280
Por ejemplo, string nombre Andrés.

33
00:02:08,510 --> 00:02:14,000
Bien, ahí tenemos un objeto que no es nulo, tiene un contenido y esto lo podemos guardar dentro de

34
00:02:14,090 --> 00:02:19,430
una opcional y podríamos validar si está presente o no, porque también podría ser que nombre sea una

35
00:02:19,430 --> 00:02:22,130
referencia nula y podría ocurrir este error.

36
00:02:22,220 --> 00:02:26,490
Порно intercepten por ejemplo, cuando invocamos métodos, vamos a partir con el String.

37
00:02:26,810 --> 00:02:31,370
Pero por supuesto, como todo en Java podemos utilizar cualquier tipo de referencia.

38
00:02:31,520 --> 00:02:36,920
Podemos utilizar cualquier tipo de clase, tanto un string como un Integer o una clase propia nuestra.

39
00:02:37,040 --> 00:02:38,570
Por ejemplo, usuario.

40
00:02:39,020 --> 00:02:40,520
Cómo creamos una opcional?

41
00:02:40,700 --> 00:02:44,180
Primero, opcional y el tipo de dato que va a contener.

42
00:02:45,470 --> 00:02:45,940
En este caso.

43
00:02:45,950 --> 00:02:48,830
String vamos a importar de yeva útil.

44
00:02:52,020 --> 00:03:00,750
PT Una opcional igual es sin en new optional, de forma estática, con diferente método, con el off

45
00:03:00,900 --> 00:03:02,610
off now label o empty.

46
00:03:02,760 --> 00:03:05,370
Empty es para crear un opcional vacío.

47
00:03:05,850 --> 00:03:11,160
Off es para crear un opcional a partir de una referencia de un objeto que pasamos por argumento no acepta

48
00:03:11,160 --> 00:03:11,520
nulo.

49
00:03:11,640 --> 00:03:18,570
Es decir, en el loft no podemos pasar un objeto o una instancia null y el off culebro si permite nulos.

50
00:03:18,780 --> 00:03:20,090
Por eso es NULL Lauper.

51
00:03:20,250 --> 00:03:23,430
Podemos pasar un objeto con referencia o un null.

52
00:03:23,610 --> 00:03:25,080
Primero apartamos con off.

53
00:03:27,180 --> 00:03:33,720
Entonces el objeto nombre, en este caso bien shout o zombi.

54
00:03:33,840 --> 00:03:38,970
Mejor vamos a imprimir, opte el obtener levantemos.

55
00:03:41,310 --> 00:03:48,150
Topete igual o un oft tonal con el valor Andrés, por lo tanto, el contenido, el valor está presente

56
00:03:48,240 --> 00:03:48,900
en el opcional.

57
00:03:49,180 --> 00:03:50,190
Bien, vamos a cerrar.

58
00:03:53,020 --> 00:03:55,150
Хотя o pt.

59
00:03:55,180 --> 00:03:57,610
Punto is present.

60
00:03:58,300 --> 00:04:04,450
Tenemos el método pasar si está presente o no. Este retorna un villano y típicamente lo podemos utilizar

61
00:04:04,540 --> 00:04:05,160
con IF.

62
00:04:05,860 --> 00:04:06,910
Entonces vamos a imprimir.

63
00:04:10,070 --> 00:04:16,700
Trump está presente entonces, por ejemplo, if o pt punto is present.

64
00:04:17,870 --> 00:04:20,480
Entonces, si está presente, podemos hacer algo shout.

65
00:04:22,460 --> 00:04:23,110
Hola.

66
00:04:24,000 --> 00:04:25,310
Más o pte.

67
00:04:25,970 --> 00:04:27,350
Punto Yetta.

68
00:04:27,590 --> 00:04:29,480
Con el método GET podemos obtener el valor.

69
00:04:30,050 --> 00:04:32,340
Ya hemos visto algo en clases anteriores.

70
00:04:32,480 --> 00:04:36,830
En la sección de stream ahora lo vamos a profundizar un poco más y aterrizar bien.

71
00:04:36,890 --> 00:04:41,900
El método GET siempre conveniente utilizar en conjunto con un IF o alguna validación.

72
00:04:42,050 --> 00:04:43,670
Asegurarnos de que esté presente.

73
00:04:43,880 --> 00:04:44,360
Por qué?

74
00:04:44,390 --> 00:04:51,080
Por ejemplo, si fuese un optional empty vacío y el valor no está presente, va a lanzar una excepción,

75
00:04:51,830 --> 00:04:53,650
no Satch Element Exception.

76
00:04:54,790 --> 00:04:55,700
Vamos a levantar.

77
00:04:58,500 --> 00:04:59,100
Hola Andrés.

78
00:04:59,370 --> 00:05:01,230
Se fijan con él y se presenta.

79
00:05:01,740 --> 00:05:06,570
También vimos que tienen método y Is empty para ver si está vacío.

80
00:05:08,670 --> 00:05:10,450
Vamos a imprimir o pt.

81
00:05:10,500 --> 00:05:12,230
Punto is empty.

82
00:05:13,500 --> 00:05:14,100
Veamos.

83
00:05:16,500 --> 00:05:16,800
Va a ser?

84
00:05:17,370 --> 00:05:20,640
Claro, porque está presente entonces is empty.

85
00:05:20,940 --> 00:05:23,340
Lo contrade que is present es la negación.

86
00:05:23,520 --> 00:05:26,750
Después fue mover que estuvimos sepa escribir de una forma mucho más funcional.

87
00:05:27,120 --> 00:05:28,770
De hecho lo podríamos ver ahora mismo.

88
00:05:29,130 --> 00:05:35,430
Esto sería muy equivalente, es decir, equivalente utilizando presiones lanta con lo siguiente acá

89
00:05:35,430 --> 00:05:37,620
mismo o PT.

90
00:05:37,860 --> 00:05:38,520
Punto.

91
00:05:38,700 --> 00:05:41,220
Acá tenemos el método If present.

92
00:05:41,520 --> 00:05:47,580
Si está presente este acá, entonces si está presente podríamos implementar una prisión lanta del tipo

93
00:05:47,580 --> 00:05:49,050
Consumer y hacer algo.

94
00:05:49,170 --> 00:05:54,870
Recuerden que el consumidor se pasa por argumento un valor y hacemos algo con ese valor lo consumimos

95
00:05:55,890 --> 00:05:56,400
valor.

96
00:05:56,580 --> 00:06:03,110
En este caso el string y nuestra expresión lanta por ejemplo Shout.

97
00:06:04,890 --> 00:06:08,010
Hola valor.

98
00:06:08,430 --> 00:06:11,460
Se fijan similar a esto if present.

99
00:06:11,940 --> 00:06:15,690
Acá se emite el valor porque está presente y lo imprimimos.

100
00:06:19,550 --> 00:06:20,180
Hola Andrés.

101
00:06:20,420 --> 00:06:23,690
Ahora bueno, usted saben que ya se puesto abreviar.

102
00:06:27,240 --> 00:06:33,450
De esa forma, bien, acá vimos un ejemplo con un nombre que tiene una referencia Andrés.

103
00:06:33,630 --> 00:06:40,680
Ahora, qué pasa si ese nombre nombre igual a Nuba lo dejamos en Nuh?

104
00:06:41,310 --> 00:06:44,280
Veamos Topete igual.

105
00:06:45,150 --> 00:06:49,980
Oh, genial, vamos a reutilizar las variables o PT y nombre que ya tenemos.

106
00:06:50,460 --> 00:06:51,540
Punto.

107
00:06:51,750 --> 00:06:55,380
Off Nombre Qué va a ocurrir acá?

108
00:06:56,220 --> 00:07:01,560
Ya vimos y expliqué que si se pasa un null en el off lanza una excepción.

109
00:07:02,040 --> 00:07:04,410
Vamos a ver, un pulpo intercepta.

110
00:07:05,290 --> 00:07:11,210
Te fijan un pulpo entre cepillan, entonces hay que evitar utilizar el lof con un nul, una referencia

111
00:07:11,220 --> 00:07:11,580
nula.

112
00:07:11,790 --> 00:07:15,750
El off siempre lo utilizamos cuando estamos seguros 100 por ciento que el objeto no es nulo.

113
00:07:15,900 --> 00:07:23,470
Ahora, si no sabemos o no estamos seguro, podría ser null o puede que no. Hoy utilizamos esta of new

114
00:07:23,490 --> 00:07:23,880
lafe.

115
00:07:24,690 --> 00:07:27,250
De esa forma evitamos el pulpo intercepto.

116
00:07:27,690 --> 00:07:31,780
Ahora si Sotheby, vamos a imprimir o pta.

117
00:07:32,370 --> 00:07:33,360
Veamos qué pasa.

118
00:07:35,680 --> 00:07:37,370
Optional empty es vacío.

119
00:07:37,540 --> 00:07:46,640
A diferencia del que tenemos acá que muestra Andrés, acá muestra empty no tiene valor shout copete

120
00:07:46,840 --> 00:07:49,540
de punto is present.

121
00:07:50,590 --> 00:07:52,720
Si está presente, bueno, va a ser fols.

122
00:07:57,470 --> 00:08:02,210
Shot is empty based trum.

123
00:08:06,520 --> 00:08:07,930
Copete punto.

124
00:08:08,290 --> 00:08:18,530
If present valor shout Hola, valor.

125
00:08:18,790 --> 00:08:19,330
Vamos a ver.

126
00:08:21,480 --> 00:08:23,190
No se debiera ejecutar.

127
00:08:24,250 --> 00:08:25,480
Porque y present?

128
00:08:25,690 --> 00:08:33,420
Si no está presente, nos ejecutÃ, se fijan, no pasa nada a menos que coloquemos por acá or else.

129
00:08:34,660 --> 00:08:35,410
Vamos a cambiar.

130
00:08:35,440 --> 00:08:39,370
Pero ojo, este método sólo está disponible desde lleva 9.

131
00:08:39,720 --> 00:08:42,810
La versión 9 de Yaba, así que se están utilizando ya 8.

132
00:08:42,960 --> 00:08:48,850
Esto de acá no lo pueden invocar porque este método solamente de 9 en adelante.

133
00:08:49,270 --> 00:08:53,450
Bien, entonces si no está presente, entonces si está presente, ejecuta esto.

134
00:08:53,620 --> 00:08:57,910
Si no está presente, ejecutamos un Ramey.

135
00:08:59,380 --> 00:08:59,950
Se acuerdan?

136
00:09:00,190 --> 00:09:04,360
No se recibe ningún argumento y ejecutamos alguna acción.

137
00:09:04,510 --> 00:09:08,500
En caso de que no esté presente, entonces Shout

138
00:09:12,610 --> 00:09:14,710
no está presente o está vacío.

139
00:09:15,640 --> 00:09:16,180
Vamos a ver.

140
00:09:19,830 --> 00:09:21,990
No está presente, entonces es santo argumento.

141
00:09:22,080 --> 00:09:25,620
El primero sí está presente y el segundo si no está presente.

142
00:09:25,710 --> 00:09:31,410
Por eso y present o el camino alternativo el Renate.

143
00:09:32,250 --> 00:09:34,680
Entonces esto sería muy similar a colocar esto.

144
00:09:34,950 --> 00:09:38,220
Voy a copiar este if para no tener que hacerlo nuevo.

145
00:09:38,850 --> 00:09:45,480
Si es exactamente lo mismo que Els, voy a copiar esto acá.

146
00:09:45,660 --> 00:09:46,380
Lo pegamos acá.

147
00:09:52,730 --> 00:09:58,850
No está presente, pero de una forma 100 por ciento funcional, con expresiones danda mucho más limpio,

148
00:09:58,910 --> 00:09:59,420
ordenado.

149
00:09:59,720 --> 00:10:02,090
Además, esto acá se puede optimizar.

150
00:10:02,510 --> 00:10:03,170
Ya sabemos.

151
00:10:04,910 --> 00:10:06,050
Quitábamos Septo.

152
00:10:07,240 --> 00:10:08,560
Y quitábamos esto.

153
00:10:14,520 --> 00:10:15,510
De hecho, voy a bajar acá.

154
00:10:16,560 --> 00:10:17,640
Eso queda mucho mejor.

155
00:10:18,270 --> 00:10:18,660
Bien.

156
00:10:18,870 --> 00:10:24,300
Ahora por supuesto que un off label sirve tanto para nulo como para no nulo.

157
00:10:24,360 --> 00:10:32,640
Por ejemplo, si cambio acá de Nul a John, vamos a ver cómo cambia todo.

158
00:10:33,060 --> 00:10:40,990
Bueno, veamos, debería primero cambiar acá el copete va a ser un optional de John, va a ser thru

159
00:10:41,190 --> 00:10:44,820
el present falls is empty y.

160
00:10:44,910 --> 00:10:48,930
Hola John, acá porque iba embocar preso en Holanda.

161
00:10:49,440 --> 00:10:50,500
El if present.

162
00:10:51,000 --> 00:10:53,670
Y también está acá en el diff.

163
00:10:59,080 --> 00:10:59,530
Hola John.

164
00:10:59,590 --> 00:11:07,510
Hola John fols thru optional de John, se fijan entonces, para resumir el off Nules permite pasar tanto

165
00:11:07,510 --> 00:11:14,500
nulos como no nulos y si es un objeto no nulo, por ejemplo, John, lo que hace retornar un opcional

166
00:11:14,590 --> 00:11:15,340
de su objeto.

167
00:11:15,580 --> 00:11:20,440
Ahora, si el nulo va a retornar un optional vacío empty.

168
00:11:21,190 --> 00:11:21,970
Acá no vamos a ver.

169
00:11:22,190 --> 00:11:23,290
Control click.

170
00:11:25,310 --> 00:11:27,230
Pregunta si igual anulo.

171
00:11:27,350 --> 00:11:30,080
Si es igual, retorna un opcional de vacío.

172
00:11:30,560 --> 00:11:33,320
De lo contrario retorna una instancia opcional con el valor.

173
00:11:33,560 --> 00:11:38,810
Y esta constante es su optional, null o empty.

174
00:11:40,980 --> 00:11:46,320
Bien, veamos otro ejemplo de crear un optional, pero vacío que no es nulo.

175
00:11:46,410 --> 00:11:47,410
En fin, es vacío.

176
00:11:48,430 --> 00:12:06,450
Optional del tipo String Opeth, empty o vacío igual optional punto en solving lo imprimimos Sotheby.

177
00:12:06,690 --> 00:12:07,680
Vamos a imprimir.

178
00:12:07,770 --> 00:12:08,060
Perdón.

179
00:12:08,070 --> 00:12:09,860
Shout o pt.

180
00:12:09,960 --> 00:12:10,390
Empty.

181
00:12:10,950 --> 00:12:12,060
Punto is.

182
00:12:12,060 --> 00:12:12,630
Present.

183
00:12:15,030 --> 00:12:17,360
Va a ser falso porque está vacío.

184
00:12:22,680 --> 00:12:30,990
Y así, si invocamos, por ejemplo, el empty based true, si llamamos al if present or else va a invocar

185
00:12:31,080 --> 00:12:32,100
el or els.

186
00:12:32,550 --> 00:12:33,450
No está presente.

187
00:12:33,790 --> 00:12:34,620
Y lo mismo con el if.

188
00:12:35,010 --> 00:12:40,740
Al final se comporta igual que un Optional of New LaFleur cuando pasamos un null.

189
00:12:40,920 --> 00:12:43,470
Finalmente, lo que retorna es un optional empty.

190
00:12:44,520 --> 00:12:45,220
Lo mismo acto.

191
00:12:46,240 --> 00:12:48,820
Bien, esas son las formas de crear un opcional.

192
00:12:48,940 --> 00:12:50,590
Nos vemos en la siguiente clase.
