Métodos
Eventualmente vas tener algunas líneas de código que necesitan ser ejecutadas varias veces y desde diferentes partes de tu programa. En vez de repetir el mismo código una y otra vez puedes crear un método (también se les conoce como procedimientos o funciones en otros lenguajes de programación) e invocarlo cada vez que necesites ejecutar ese trozo de código.
Crea un archivo llamado methods.rb
y escribe lo siguiente:
Para definir un método usamos la palabra reservada def
y le damos un nombre (en este caso hello
). Al final debemos cerrar el método con end
.
Si lo ejecutas no debería salir nada. Una característica de los métodos es que no son ejecutados hasta que no los invoquemos. Modifiquemos nuestro programa para invocarlo:
En la última línea lo estamos invocando. Si lo ejecutas ahora si debería aparecer "Hola mundo":
Parámetros
Los métodos pueden recibir cero o más parámetros (o argumentos). Modifiquemos nuestro programa para que salude a cualquier persona:
Si lo ejecutamos deberías ver lo siguiente:
Retornando un valor
En Ruby todas las expresiones retornan un valor. Incluso puts "Hola mundo"
retorna un valor, solo que el valor es nil
(una forma de decir "nada").
Por defecto, todos los métodos retornan el resultado de la última línea que se ejecute en el método. Vamos a modificar nuestro ejemplo para que en vez de imprimir el saludo, lo retorne:
Fíjate que ya no hacemos el puts
dentro de la función, así que nos toca hacerlo al invocar el método. Pero es mejor práctica así. El problema es que cuando el puts
está dentro de la función, esa función solo nos serviría en aplicaciones de consola. Si la queremos usar en una aplicación Web no serviría (el puts es únicamente para imprimir en la consola).
También es posible retornar el valor explícitamente con la palabra reservada return
:
El resultado cuando lo ejecutes debe seguir siendo el mismo.
En general, los programadores de Ruby tienden a omitir el return
a menos de que sea completamente necesario.
Un ejemplo
Hagamos un programa que nos diga de qué generación somos dependiendo de nuestro año de nacimiento. Las generaciones son las siguientes:
Vamos ahora a hacer un método que nos diga la generación y lo invocamos con lo que ingrese el usuario. Crea un archivo llamado generation_method.rb
y escribe lo siguiente:
Si la ejecutas debería decirte la generación dependiendo de tu año de nacimiento:
Sin embargo, sería mucho mejor evitar el puts
en el método. Modifiquémoslo para mejorarlo:
Mucho mejor. Sin embargo hay algo que no me gusta de este método. Está retornando los strings en Español. Si quisiéramos comparar ese valor para realizar alguna acción dependiendo de la generación, nos tocaría comparar el string exacto. Además, si queremos tener una aplicación que soporte varios idiomas esta implementación no va a funcionar. Podemos mejorarla:
El programa es más largo pero la función generation
es ahora mucho más reutilizable. Si queremos tomar una desición dependiendo de la generación lo podemos hacer fácilmente (comparar símbolos es mucho menos propenso a errores que comparar cadenas de texto).
Evalúate
Escribe un método llamado
square_perimeter
que reciba un argumentoside
y calcule el perímetro de un cuadrado (recuerda que el perímetro de un cuadrado es la suma de los lados). Por ejemplo:Escribe un método llamado
square_area
que reciba un argumentoside
y retorne el área de de un cuadrado. Por ejemplo:Escribe un método llamado
sum
que reciba un arreglo y retorne la suma de los elementos. Por ejemplo:Escribe un método llamado
average
que reciba un arreglo y retorne el promedio de los elementos. Por ejemplo:
Last updated