﻿1
00:00:00,000 --> 00:00:03,520
Hola. En esta sesión,
Aprenderemos sobre el retorno.

2
00:00:03,680 --> 00:00:07,440
¿Cómo puede devolver un valor?

3
00:00:07,600 --> 00:00:09,600
¿De un bloque o método?

4
00:00:10,480 --> 00:00:12,840
¿Y cuáles son los valores de retorno predeterminados?

5
00:00:13,520 --> 00:00:15,840
Hay cuatro casos para estudiar:

6
00:00:16,000 --> 00:00:20,640
un método con el acento circunflejo para el retorno,

7
00:00:20,800 --> 00:00:23,080
un método sin el acento circunflejo para el retorno,

8
00:00:23,240 --> 00:00:25,720
un bloque con el acento circunflejo para el retorno,

9
00:00:25,880 --> 00:00:28,000
y un bloque sin el acento circunflejo para el retorno.

10
00:00:29,000 --> 00:00:31,040
En un metodo,

11
00:00:31,200 --> 00:00:34,120
si utiliza el acento circunflejo para devolver un valor.

12
00:00:36,280 --> 00:00:39,120
Aquí este retorno devolverá

13
00:00:39,280 --> 00:00:42,160
un valor específico,

14
00:00:43,240 --> 00:00:44,920
i saldrá del método.

15
00:00:46,360 --> 00:00:48,640
Si no uso el acento circunflejo,

16
00:00:48,800 --> 00:00:51,680
el método devuelve self por defecto.

17
00:00:53,560 --> 00:00:56,720
Esta parte es opcional.
Normalmente no la escribe.

18
00:00:56,880 --> 00:01:01,640
El valor de retorno de un bloque
es el valor de su ultima expresión

19
00:01:01,800 --> 00:01:03,720
En el caso de este bloque,

20
00:01:04,320 --> 00:01:06,120
entre estos, tengo un bloque

21
00:01:06,280 --> 00:01:08,960
que toma un valor x como parámetro.

22
00:01:09,120 --> 00:01:11,200
Agrego 33 a x.

23
00:01:12,280 --> 00:01:16,560
El valor, el resultado
de esta expresión x + 33

24
00:01:16,720 --> 00:01:19,120
no se usa, por lo que se borró.

25
00:01:19,760 --> 00:01:23,640
La siguiente instrucción es x + 2,
así que agrego 2 al valor x.

26
00:01:24,960 --> 00:01:28,040
Como es la última expresión del bloque,

27
00:01:28,200 --> 00:01:30,720
su valor

28
00:01:30,880 --> 00:01:33,960
representa el valor de retorno
del bloque

29
00:01:34,920 --> 00:01:36,800
Entonces mi bloque, value: 5.

30
00:01:36,960 --> 00:01:39,800
Significa que ejecuto el bloque

31
00:01:39,960 --> 00:01:42,360
con x tomando el valor 5.

32
00:01:42,520 --> 00:01:44,800
Entonces calculo 33 + 5;

33
00:01:44,960 --> 00:01:47,840
el resultado se borra,
ya que es inútil

34
00:01:48,000 --> 00:01:50,840
5 + 2 da el valor 7

35
00:01:51,000 --> 00:01:53,480
que se usa
como el valor de retorno del bloque.

36
00:01:53,640 --> 00:01:57,360
Entonces, el valor de toda la expresión es 7.

37
00:01:59,640 --> 00:02:02,440
Si uso el acento circunflejo en un bloque,

38
00:02:05,800 --> 00:02:09,400
el comportamiento de un metodo
es completamente diferente

39
00:02:10,320 --> 00:02:14,320
No debes esperar
que el bloque se ejecute,

40
00:02:15,120 --> 00:02:17,440
sera el método el que se ejecutara

41
00:02:17,600 --> 00:02:21,120
Echemos un vistazo al ejemplo
del método factorial

42
00:02:21,280 --> 00:02:22,760
en la clase Integer.

43
00:02:24,200 --> 00:02:27,800
El acento circunflejo de aquí y este otro.

44
00:02:27,960 --> 00:02:31,040
Estos dos acentos
terminan la ejecución del método.

45
00:02:32,680 --> 00:02:35,920
Entonces, si self, si el receptor del método és igual a cero

46
00:02:36,080 --> 00:02:38,480
durante la ejecución del método factorial,

47
00:02:38,640 --> 00:02:40,680
el bloque se ejecuta,

48
00:02:40,840 --> 00:02:44,160
1 és devuelto inmediatamente,
y el método se termina.

49
00:02:44,320 --> 00:02:46,080
Entonces, el método devuelve 1.

50
00:02:47,000 --> 00:02:51,360
El retorno no se usa para finalizar el bloque
sino para terminar el método que abraza el bloque.

51
00:02:52,680 --> 00:02:55,720
En el segundo ejemplo,
si self es mayor que cero,

52
00:02:56,600 --> 00:03:00,000
calcula con una llamada recursiva

53
00:03:00,160 --> 00:03:02,400
y devuelve inmediatamente el resultado.

54
00:03:02,560 --> 00:03:05,520
Entonces el método
no continúa ejecutándose

55
00:03:05,680 --> 00:03:07,360
cuando self es más grande que cero.

56
00:03:08,000 --> 00:03:11,480
En los otros casos,
Si alcanza la tercera instrucción,

57
00:03:11,640 --> 00:03:15,760
obtiene un mensaje de error, que significa
que el receptor es un número negativo.

58
00:03:16,440 --> 00:03:18,280
Debería recordar

59
00:03:18,440 --> 00:03:23,560
que el acento circunflejo permite
salir del método

60
00:03:23,720 --> 00:03:27,760
si el acento circunflejo se encuentra en el método
o en el método dentro del bloque.

61
00:03:27,920 --> 00:03:30,240
El acento circunflejo siempre termina el método

62
00:03:30,400 --> 00:03:33,200
y devuelve un valor
especificado después del acento.

63
00:03:34,320 --> 00:03:37,280
De forma predeterminada, un método devuelve self.

64
00:03:38,040 --> 00:03:40,720
Es inútil escribir self 
al final de un método

65
00:03:40,880 --> 00:03:43,920
puesto que és el valor
que se devuelve por defecto.

66
00:03:45,760 --> 00:03:50,240
Un bloque devuelve el resultado
de su ultima expresión
