¿Qué tal si queremos decir “Hola” muchas veces sin cansar nuestros dedos con el teclado? ¡Necesitamos definir un método!
irb(main):010:0> def h
irb(main):011:1> puts "Hola Mundo"
irb(main):012:1> end
=> nil
La expresión def h
inicia la definición del método. Le dice a Ruby que
estamos definiendo un método, cuyo nombre es h
. La siguiente linea es
el cuerpo del método, la misma expresión que vimos anteriormente: puts
"Hola Mundo"
. Finalmente, la última linea end
la dice a Ruby que
terminamos de definir el método. La respuesta de Ruby => nil
nos
comunica que él sabe que terminamos de definir el método.
Las breves y repetitivas vidas de un método
Ahora intentemos ejecutar ese método algunas veces:
irb(main):013:0> h
Hola Mundo
=> nil
irb(main):014:0> h()
Hola Mundo
=> nil
Bien, eso fue fácil. Ejecutar un método en Ruby es tan fácil como sólo mencionar su nombre. Si el método no requiere parámetros para ejecutarse, eso es todo lo que necesitas. Puedes agregar paréntesis vacíos, pero no son necesarios.
¿Y qué tal si queremos saludar sólo a una persona y no a todo el mundo?
Simplemente redefine h
para que tome un nombre como parámetro.
irb(main):015:0> def h(nombre)
irb(main):016:1> puts "Hola #{nombre}"
irb(main):017:1> end
=> nil
irb(main):018:0> h("Matz")
Hola Matz
=> nil
Así que eso funciona… pero tomémonos un segundo para ver más en detalle qué es lo que está sucediendo.
Reservando espacios en un String
¿Qué significa la expresión #{nombre}
? Esa es la forma que tiene Ruby
para insertar algo en un String. La expresión entre las llaves es
transformada en un String (si todavía no lo es) y posteriormente
sustituida en ese punto del String que la contiene. También puedes usar
esto para asegurarte que el nombre comience con mayúscula:
irb(main):019:0> def h(nombre = "Mundo")
irb(main):020:1> puts "Hola #{nombre.capitalize}"
irb(main):021:1> end
=> nil
irb(main):022:0> h "pedro"
Hola Pedro
=> nil
irb(main):023:0> h
Hola Mundo
=> nil
Algunos otros trucos para destacar. Uno es que otra vez estamos llamando
al método sin utilizar los paréntesis. Si lo que quieres hacer es obvio,
los paréntesis son opcionales. El otro truco es el parámetro por defecto
Mundo
. Esto significa “si no se provee un nombre, utiliza el nombre
por defecto "Mundo"
”.
Convirtiéndolo en un Anfitrión
¿Qué hacemos si queremos tener un anfitrión más “en serio”? Uno que recuerde tu nombre, te dé la bienvenida y te trate con respeto. Puedes querer utilizar un objeto para eso. Vamos a crear la clase “Anfitrion”.
irb(main):024:0> class Anfitrion
irb(main):025:1> def initialize(nombre = "Mundo")
irb(main):026:2> @nombre = nombre
irb(main):027:2> end
irb(main):028:1> def decir_hola
irb(main):029:2> puts "Hola #{@nombre}"
irb(main):030:2> end
irb(main):031:1> def decir_adios
irb(main):032:2> puts "Adiós #{@nombre}, vuelve pronto."
irb(main):033:2> end
irb(main):034:1> end
=> nil
La nueva palabra clave aquí es class
. Esto define una nueva clase
llamada Anfitrion y un par de métodos para esa clase. También toma nota
de @nombre
. Esta es una variable de instancia y está disponible para
todos los métodos de la clase. Como puedes ver es utilizada por
decir_hola
y decir_adios
.
¿Así que cómo hacemos para que esta clase Anfitrion nos sea de utilidad? Crea un objeto.