Hola. En esta sesión, Aprenderemos sobre el retorno.
¿Cómo puede devolver un valor?
¿De un bloque o método?
¿Y cuáles son los valores de retorno predeterminados?
Hay cuatro casos para estudiar:
un método con el acento circunflejo para el retorno,
un método sin el acento circunflejo para el retorno,
un bloque con el acento circunflejo para el retorno,
y un bloque sin el acento circunflejo para el retorno.
En un metodo,
si utiliza el acento circunflejo para devolver un valor.
Aquí este retorno devolverá
un valor específico,
i saldrá del método.
Si no uso el acento circunflejo,
el método devuelve self por defecto.
Esta parte es opcional. Normalmente no la escribe.
El valor de retorno de un bloque es el valor de su ultima expresión
En el caso de este bloque,
entre estos, tengo un bloque
que toma un valor x como parámetro.
Agrego 33 a x.
El valor, el resultado de esta expresión x + 33
no se usa, por lo que se borró.
La siguiente instrucción es x + 2, así que agrego 2 al valor x.
Como es la última expresión del bloque,
su valor
representa el valor de retorno del bloque
Entonces mi bloque, value: 5.
Significa que ejecuto el bloque
con x tomando el valor 5.
Entonces calculo 33 + 5;
el resultado se borra, ya que es inútil
5 + 2 da el valor 7
que se usa como el valor de retorno del bloque.
Entonces, el valor de toda la expresión es 7.
Si uso el acento circunflejo en un bloque,
el comportamiento de un metodo es completamente diferente
No debes esperar que el bloque se ejecute,
sera el método el que se ejecutara
Echemos un vistazo al ejemplo del método factorial
en la clase Integer.
El acento circunflejo de aquí y este otro.
Estos dos acentos terminan la ejecución del método.
Entonces, si self, si el receptor del método és igual a cero
durante la ejecución del método factorial,
el bloque se ejecuta,
1 és devuelto inmediatamente, y el método se termina.
Entonces, el método devuelve 1.
El retorno no se usa para finalizar el bloque sino para terminar el método que abraza el bloque.
En el segundo ejemplo, si self es mayor que cero,
calcula con una llamada recursiva
y devuelve inmediatamente el resultado.
Entonces el método no continúa ejecutándose
cuando self es más grande que cero.
En los otros casos, Si alcanza la tercera instrucción,
obtiene un mensaje de error, que significa que el receptor es un número negativo.
Debería recordar
que el acento circunflejo permite salir del método
si el acento circunflejo se encuentra en el método o en el método dentro del bloque.
El acento circunflejo siempre termina el método
y devuelve un valor especificado después del acento.
De forma predeterminada, un método devuelve self.
Es inútil escribir self al final de un método
puesto que és el valor que se devuelve por defecto.
Un bloque devuelve el resultado de su ultima expresión