WEBVTT

00:00:00.000 --> 00:00:03.520 align:middle
Hola. En esta sesión,
Aprenderemos sobre el retorno.

00:00:03.680 --> 00:00:07.440 align:middle
¿Cómo puede devolver un valor?

00:00:07.600 --> 00:00:09.600 align:middle
¿De un bloque o método?

00:00:10.480 --> 00:00:12.840 align:middle
¿Y cuáles son los valores de retorno predeterminados?

00:00:13.520 --> 00:00:15.840 align:middle
Hay cuatro casos para estudiar:

00:00:16.000 --> 00:00:20.640 align:middle
un método con el acento circunflejo para el retorno,

00:00:20.800 --> 00:00:23.080 align:middle
un método sin el acento circunflejo para el retorno,

00:00:23.240 --> 00:00:25.720 align:middle
un bloque con el acento circunflejo para el retorno,

00:00:25.880 --> 00:00:28.000 align:middle
y un bloque sin el acento circunflejo para el retorno.

00:00:29.000 --> 00:00:31.040 align:middle
En un metodo,

00:00:31.200 --> 00:00:34.120 align:middle
si utiliza el acento circunflejo para devolver un valor.

00:00:36.280 --> 00:00:39.120 align:middle
Aquí este retorno devolverá

00:00:39.280 --> 00:00:42.160 align:middle
un valor específico,

00:00:43.240 --> 00:00:44.920 align:middle
i saldrá del método.

00:00:46.360 --> 00:00:48.640 align:middle
Si no uso el acento circunflejo,

00:00:48.800 --> 00:00:51.680 align:middle
el método devuelve self por defecto.

00:00:53.560 --> 00:00:56.720 align:middle
Esta parte es opcional.
Normalmente no la escribe.

00:00:56.880 --> 00:01:01.640 align:middle
El valor de retorno de un bloque
es el valor de su ultima expresión

00:01:01.800 --> 00:01:03.720 align:middle
En el caso de este bloque,

00:01:04.320 --> 00:01:06.120 align:middle
entre estos, tengo un bloque

00:01:06.280 --> 00:01:08.960 align:middle
que toma un valor x como parámetro.

00:01:09.120 --> 00:01:11.200 align:middle
Agrego 33 a x.

00:01:12.280 --> 00:01:16.560 align:middle
El valor, el resultado
de esta expresión x + 33

00:01:16.720 --> 00:01:19.120 align:middle
no se usa, por lo que se borró.

00:01:19.760 --> 00:01:23.640 align:middle
La siguiente instrucción es x + 2,
así que agrego 2 al valor x.

00:01:24.960 --> 00:01:28.040 align:middle
Como es la última expresión del bloque,

00:01:28.200 --> 00:01:30.720 align:middle
su valor

00:01:30.880 --> 00:01:33.960 align:middle
representa el valor de retorno
del bloque

00:01:34.920 --> 00:01:36.800 align:middle
Entonces mi bloque, value: 5.

00:01:36.960 --> 00:01:39.800 align:middle
Significa que ejecuto el bloque

00:01:39.960 --> 00:01:42.360 align:middle
con x tomando el valor 5.

00:01:42.520 --> 00:01:44.800 align:middle
Entonces calculo 33 + 5;

00:01:44.960 --> 00:01:47.840 align:middle
el resultado se borra,
ya que es inútil

00:01:48.000 --> 00:01:50.840 align:middle
5 + 2 da el valor 7

00:01:51.000 --> 00:01:53.480 align:middle
que se usa
como el valor de retorno del bloque.

00:01:53.640 --> 00:01:57.360 align:middle
Entonces, el valor de toda la expresión es 7.

00:01:59.640 --> 00:02:02.440 align:middle
Si uso el acento circunflejo en un bloque,

00:02:05.800 --> 00:02:09.400 align:middle
el comportamiento de un metodo
es completamente diferente

00:02:10.320 --> 00:02:14.320 align:middle
No debes esperar
que el bloque se ejecute,

00:02:15.120 --> 00:02:17.440 align:middle
sera el método el que se ejecutara

00:02:17.600 --> 00:02:21.120 align:middle
Echemos un vistazo al ejemplo
del método factorial

00:02:21.280 --> 00:02:22.760 align:middle
en la clase Integer.

00:02:24.200 --> 00:02:27.800 align:middle
El acento circunflejo de aquí y este otro.

00:02:27.960 --> 00:02:31.040 align:middle
Estos dos acentos
terminan la ejecución del método.

00:02:32.680 --> 00:02:35.920 align:middle
Entonces, si self, si el receptor del método és igual a cero

00:02:36.080 --> 00:02:38.480 align:middle
durante la ejecución del método factorial,

00:02:38.640 --> 00:02:40.680 align:middle
el bloque se ejecuta,

00:02:40.840 --> 00:02:44.160 align:middle
1 és devuelto inmediatamente,
y el método se termina.

00:02:44.320 --> 00:02:46.080 align:middle
Entonces, el método devuelve 1.

00:02:47.000 --> 00:02:51.360 align:middle
El retorno no se usa para finalizar el bloque
sino para terminar el método que abraza el bloque.

00:02:52.680 --> 00:02:55.720 align:middle
En el segundo ejemplo,
si self es mayor que cero,

00:02:56.600 --> 00:03:00.000 align:middle
calcula con una llamada recursiva

00:03:00.160 --> 00:03:02.400 align:middle
y devuelve inmediatamente el resultado.

00:03:02.560 --> 00:03:05.520 align:middle
Entonces el método
no continúa ejecutándose

00:03:05.680 --> 00:03:07.360 align:middle
cuando self es más grande que cero.

00:03:08.000 --> 00:03:11.480 align:middle
En los otros casos,
Si alcanza la tercera instrucción,

00:03:11.640 --> 00:03:15.760 align:middle
obtiene un mensaje de error, que significa
que el receptor es un número negativo.

00:03:16.440 --> 00:03:18.280 align:middle
Debería recordar

00:03:18.440 --> 00:03:23.560 align:middle
que el acento circunflejo permite
salir del método

00:03:23.720 --> 00:03:27.760 align:middle
si el acento circunflejo se encuentra en el método
o en el método dentro del bloque.

00:03:27.920 --> 00:03:30.240 align:middle
El acento circunflejo siempre termina el método

00:03:30.400 --> 00:03:33.200 align:middle
y devuelve un valor
especificado después del acento.

00:03:34.320 --> 00:03:37.280 align:middle
De forma predeterminada, un método devuelve self.

00:03:38.040 --> 00:03:40.720 align:middle
Es inútil escribir self 
al final de un método

00:03:40.880 --> 00:03:43.920 align:middle
puesto que és el valor
que se devuelve por defecto.

00:03:45.760 --> 00:03:50.240 align:middle
Un bloque devuelve el resultado
de su ultima expresión

