Qué hace esta palabra y cómo devuelvo un return (Ruby).

Iniciado por Saito_25, 30 Marzo 2015, 02:01 AM

0 Miembros y 1 Visitante están viendo este tema.

Saito_25

Tengo dos preguntas, la primera es qué hace esto: numero = Integer(gets.chomp).

A ver, sé que en un principio le estoy dando a la variable numero un valor que agregará el usuario, pero el "Integer" me está dejando KO. No sé qué hace ahí, para qué sirve, ni si es necesario.

Ahora bien, tengo hecho algo así:

Código (ruby) [Seleccionar]
numero = Integer(gets.chomp)
if numero < 100
  print "Número es menor a 100".
return
elsif numero > 100
   print "Número es mayor a 100."
return
else
   print "El número es 100"
return
end


En la consola, me devuelve el string más un fallo que dice unexpected return. Solo puse el return ahí por ponerlo, para ver qué hace... no sé porqué da fallo. También, ¿Cómo hago para imprimir el valor de return por pantalla?

Gracias, siento las molestias.

Mod: los códigos deben ir en etiquetas GeSHi

Usuario Invitado

#1
Integer() transforma un número en formato texto a un entero (Integer es entero en español). Dado que gets.chomp es la entrada de datos por teclado de Ruby, ésta solo acepta textos, por ello, cuando se ingresan números en realidad se ingresa un texto que tiene un número y debe de convertirse a número (entero o real).  Por otro lado, return no almacena ningún valor. En esos if su uso es innecesario. Se usa return cuando se desea devolver un valor desde una función (def).


Saludos.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

Saito_25

#2
¡Oh, ya veo! Muy buena explicación, gracias, de verdad ayuda bastante todo esto.

Aun así, me surge una nueva duda. Si el error me lo da porque estoy ingresando un valor de string, en vez de numérico, si hago esto:
Código (ruby) [Seleccionar]
numero = gets.chomp
numero.to_i
if numero < 100
print "#{numero} es menor a 100."
end


Debería de transformarse la variable número a un valor numérico, pero me da error. ¿Qué sucede, qué hago mal?

Eleкtro

#3
Cita de: Saito_25 en 30 Marzo 2015, 12:36 PMqué hago mal?

La función to_i devuelve un valor, es solo eso, un valor Integer, si no asignas el valor a la variable numero entonces la variable seguirá siendo de tipo String.

Puedes realizar la conversión del datatype de manera "persistente":
Código (ruby,2) [Seleccionar]
numero = gets.chomp  # String
numero = numero.to_i # Integer

# O la asignación de un valor Integer directamente convirtiendo la entrada de datos del teclado...
# numero = gets.chomp.to_i

if numero < 100
  print "#{numero} es menor a 100."
end


O puedes realizar una conversión "temporal" en la expresión de la comparación que solo tendrá efecto durante la evaluación:
Código (ruby,3) [Seleccionar]
numero = gets.chomp # String

if numero.to_i < 100
  print "#{numero} es menor a 100."
end


PD: Cuando publiques código debes respetar los normas y utilizar las etiquetas GeShi, se te ha avisado en varias ocasiones, trata de que no vuelva a ocurrir... LEE MI FIRMA.
Cualquier futuro mensaje que incumpla dicha norma podrá ser bloqueado o eliminado sin previo aviso.


Saludos!








Saito_25

¡¡¡Putas etiquetas!!! ¡¡¡Y puto yo!!! Nunca me acuerdo joee...  :-(

Gracias por la ayuda, intentaré ponerlo en las etiquetas la próxima vez, por dios... espero acordarme...