Aprende a programar, 4. Mezclando todo

Marzo 27th, 2009, 14:09H · Temas: Programación, Ruby, Tutoriales · Imprimir

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

Etiquetas: , ,

  1. 1 Victor De la Rocha Marzo 27th, 2009 16:40H

    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! :)'
  2. 2 Hellen CLARK Marzo 29th, 2009 19:27H

    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.

  3. 3 Ruben Abril 1st, 2009 20:55H

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

Deja un comentario

Tu dirección de email no se publicará. Para mostrar tu foto en los comentarios usa Gravatar
Por favor, añade http://
aviso: se admite XHTML.

Suscríbete al comentario vía RSS

GeekColima

El blog de un geek sin dinero y sin gadgets... T_T