Página original: http://pine.fm/LearnToProgram/?Chapter=04
Hemos visto algunos tipos de objetos (numeros y letras), y ya vimos como hacer que las variables apunten a ellos; lo siguiente que haremos es juntar todo para que funcione en conjunto.
Ya vimos que si queremos que un programa imprima 25 en la pantalla, lo siguiente no funciona, porque no podemos sumar numeros y cadenas:
1 2 3 4 | var1 = 2 var2 = '5' puts var1 + var2 |
Parte del problema es que la computadora no sabe si estas intentando obtener un 7 (2 + 5), o si quieres obtener un 25 (‘2‘ + ‘5‘).
Antes de que podamos sumarlos, necesitamos obtener una cadena de var1, u obtener un entero de var2.
Conversiones
Para obtener una cadena de un objeto, simplemente escribimos .to_s despues de el:
1 2 3 4 | var1 = 2 var2 = '5' puts var1.to_s + var2 |
25
De la misma manera, to_i nos da un entero de un objeto y to_f nos da un flotante. Veamos lo que estos metodos hacen (y no hacen) de manera mas detallada:
1 2 3 4 5 | var1 = 2 var2 = '5' puts var1.to_s + var2 puts var1 + var2.to_i |
25 7
Notese que aunque obtenemos la cadena de var1 llamando al metodo to_s, var1 sigue apuntando a 2, y no a ‘2‘. A no ser que reasignemos var1 (lo cual requiere el signo de =), seguira apuntando a 2 por el resto del programa.
Ahora intentemos algunas conversiones mas interesantes:
1 2 3 4 5 6 7 8 9 10 | puts '15'.to_f puts '99.999'.to_f puts '99.999'.to_i puts '' puts '5 es mi numero favorito!'.to_i puts 'Quien te pregunto por el 5?'.to_i puts 'Tu mamá'.to_f puts '' puts 'cadenita'.to_s puts 3.to_i |
15.0 99.999 99 5 0 0.0 cadenita 3
Ahora analizemos el resultado. Lo primero, se veía obvio, nos dio 15.0. Despues de eso, convertimos la cadena ‘99.999‘ a flotante y a entero. El flotante hizo lo que se esperaba y el entero, como siempre, redondeo hacia abajo.
A continuacion tuvimos unos ejemplos de unas cadenas inusuales que fueron convertidas a numeros. to_i ignora lo primero que no entienda, y de ahi, el resto de la cadena. Así que la primer cadena fue convertida a 5, pero las otras, como empezaban con letras, fueron ignoradas completamente. Así que la computadora nos regresa un cero.
Finalmente, las ultimas dos conversiones no hicieron nada, justo como se esperaba. ;) Otro vistazo a puts Hay algo extraño en nuestro metodo favorito. Veamos:
1 2 3 | puts 20 puts 20.to_s puts '20' |
20 20 20
¿Porque estas tres lineas nos imprimen lo mismo? Bueno, las ultimas dos deberían, ya que 20.to_s es ‘20‘. Pero que hay del primero? El 20 es un entero. Ahora que lo vemos, ¿que significa escribir un 20 entero? Cuando tu escribes en una hoja de papel un 2 y despues un 0, estas escribiendo una cadena, no un entero. El 20 entero es el numero de dedos de manos y pies que tienes, no es un 2 seguido de un 0.
Ese es el secreto detras de puts: antes de que puts trate de imprimir en pantalla un objeto, usa to_s para obtener una cadena del objeto. De hecho, la s de puts viene de string (cadena); y puts realmente significa put string (poner cadena).
Esto no puede parecer muy emocionante ahora, pero hay muchos, muchos tipos de objetos en Ruby (incluso aprenderas como crear tu propio objeto), y es bueno saber que sucedera si intentas usar puts con un objeto extraño, como una fotografía, un archivo de musica o algo. Pero eso vendrá despues…
Mientras tanto, tenemos otros metodos que aprender que nos permitiran escribir otro tipo de programas.
Los metodos gets y chomp
Si puts significa put string (poner cadena), te darás una idea de que hace gets (get string u obtener cadena). Y así como puts imprime cadenas, gets solo recibe cadenas. ¿De donde las obtiene?
De ti, por medio del teclado obviamente. Ya que tu teclado solo hace cadenas, todo funciona de maravillas. :P Lo que realmente sucede es que gets lee todo lo que escribes hasta que presiones Enter. Veamos como funciona:
1 | puts gets |
Hay eco en la sala?
Hay eco en la sala?
Por supuesto, todo lo que escribas te será devuelto. Ejecuta el programa varias veces e intenta teclear otras cosas.
Ahora ya podemos hacer programas interactivos!!! En el siguiente programa te preguntará tu nombre y despues te saludará:
1 2 3 4 | puts 'Hola, como te llamas?' nombre = gets puts 'Tu nombre es ' + nombre + '? Que nombre tan genial!!!' puts ' Mucho gusto en conocerte, ' + nombre + '. :)' |
Ups! Corrí el programa, escribí mi nombre, y esto es lo que paso:
Hola, como te llamas?
Chris
Tu nombre es Chris
? Que nombre tan genial!!!
Mucho gusto en conocerte, Chris
. :)
Mmm…. pareciera que cuando escribí C,h,r,i,s, y entonces presioné Enter, gets recibió todas las letras de mi nombre y el Enter! Afortunadamente, hay un metodo que resuelve este tipo de situaciones: chomp. Elimina cualquier Enter que esté al final de tu cadena. Ahora intentemos el programa otra vez, pero ahora con chomp ayudandonos:
1 2 3 4 | puts 'Hola, como te llamas?' nombre = gets.chomp puts 'Tu nombre es ' + nombre + '? Que nombre tan genial!!!' puts ' Mucho gusto en conocerte, ' + nombre + '. :)' |
Hola, como te llamas?
Chris
Tu nombre es Chris? Que nombre tan genial!!!
Mucho gusto en conocerte, Chris. :)
Mucho mejor! Tomemos en cuenta que como nombre esta apuntando a gets.chomp, no tenemos que poner nombre.chomp; ya que nombre ya ha sido chompeado (NdT: chomp se traduce como masticar, pero masticado como que no me gusto tanto)
Algunas cosas para intentar
- Escribe un programa que pregunte el nombre de una persona, luego el apellido paterno y finalmente el apellido materno. Y despues salude a la persona usando su nombre completo.
- Escribe un programa que pregunte el numero favorito de una persona. Que tu programa le sume un 1 al numero y que se lo sugiera como un mejor, y mas grande, numero favorito.
Una vez que hayas escrito estos dos programas (y otros que te gustaría intentar), aprendamos mas de los metodos.
Etiquetas: Programación, Ruby, Tutorial
3 comentarios → Deja un comentario








Ya esta!, aqui los ejercicios :)
Ejercicio 1
Ejercicio 2
Hey, I justed wanted to give you a compliment on your blog, keep up the great work. I will be back to check it out in the near future.
Que rapidez la tuya, me voy a dar prisa con los demas capítulos. Y pondré mas ejercicios!!! :D