Aprende a programar, 4. Mezclando todo

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.

© 2003-2009 Chris Pine
Learn to Program, by Chris Pine

  • http://mis-algoritmos.com Victor De la Rocha

    Ya esta!, aqui los ejercicios :)

    Ejercicio 1

    1
    2
    3
    4
    5
    6
    7
    
    puts '¿como te llamas?'
    nombre = gets.chomp
    puts '¿cual es tu apellido paterno?'
    paterno = gets.chomp
    puts '¿cual es tu apellido materno?'
    materno = gets.chomp
    puts 'Hola ' + nombre + ' ' + paterno + ' ' + materno + '! :D'

    Ejercicio 2

    1
    2
    3
    4
    
    puts '¿Cual es tu numero favorito?'
    numero = gets
    numero = numero.to_i + 1
    puts 'Sugiero de ahora en adelante uses ' + numero.to_s + ' como tu numero. Es mejor y mas grande! :)'
    • http://www.geekcolima.com Ruben

      Que rapidez la tuya, me voy a dar prisa con los demas capítulos. Y pondré mas ejercicios!!! :D

  • http://squareprofit.com Hellen CLARK

    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.

  • Man

    bueno no se siento lo leerá alguien algún día pero tengo un problema bueno yo hago un nuevo proyecto escribo todo lo de arriba y guardo el proyecto con el nombre de todo.rb como dijeron antes pero la pantalla que sale se me queda negra no puedo escribir nada y tendría que preguntarme el nombre por lo que e leído estoy usando la versión   1.8.6 

    • Anónimo

      Puedes postear tu código para ver si tiene algún error?

  • Man

    Que codigo

  • Man

    Bueno creo que es esto lo que me pides 
    puts ‘Hola, como te llamas?’nombre = gets.chompputs ‘Tu nombre es ‘ + nombre + ‘? Que nombre tan genial!!!’puts ‘ Mucho gusto en conocerte, ‘ + nombre + ‘. :)’

    • Anónimo

      puts ‘Hola, como te llamas?’
      nombre = gets.chomp
      puts ‘Tu nombre es ‘ + nombre + ‘? Que nombre tan genial!!!’
      puts ‘Mucho gusto en conocerte, ‘ + nombre + ‘. :)’

      Hay que tener mucho cuidado con los espacios, yo acabo de probar el código y no ví ningun problema. Como lo estás ejecutando?

  • Man

    Bueno otra cosa en el primer tutorial en el que enseña a descargar el programa hay dos link que no funcionan el de las propiedades para que se coloree los códigos yo tengo la versión 1.8.6 puedes darme un link para descargar las propiedades para que se me coloree los codigos  

  • Man

    lo ejecuto al F5 una coso si me das tu msn puedes ayudarme mucho mejor porfa
    soy un poco torpe en esto de ruby y me vendría muy bien tu ayuda dime solo a que hora podemos quedar en el msn

  • Man

    bueno ya se lo que pasa tal vez sea un problema de mi versión o el programa que yo me baje bueno cuando yo pongo todo eso y le doy al F5 justo después de poner mi nombre se quita la pantalla y no me deja ver lo siguiente que puse pero he solucionado eso poniendo al final gets.chopm bueno eso es normal tiene que pasar así o es que mi versión no vale tengo la 1.8.6-25 bueno espero la respuesta y piensa te lo del msn