>
> soy nuevo en ruby y me esta gustando mucho el lenguaje me gustaria que
> me dijeran que diferencia hay entre nil y empty
bueno.. aquí sería interesante si eres nuevo en ruby o si eres nuevo en
cualquier lenguaje orientado a objetos. Te lo digo porque el equivalente
a nil en muchos otros lenguajes (javascript, java, c++, c#...) es null.
voy a intentar hacer esto rápido.
ruby es un lenguaje muy orientado a objetos, hasta el punto de que todo
es un objeto (a diferencia de otros lenguajes, que tienen tipos básicos
a los que normalmente se llaman primitivas y luego objetos).
la forma normal de crear un objeto, es utilizar el método new de la
clase correspondiente, por ejemplo
Array.new
Cuando llamas a new, se asigna espacio en memoria para alojar un objeto
de esa clase, se le asigna internamente un id, y se guarda la referencia
a ese objeto en una tabla que ruby lleva internamente. En la línea
anterior, verás que hemos creado un Array, pero ni guardamos en ningún
sitio una referencia a ese array, no podremos hacer nada con él. Aquí es
donde entran en juego las variables. Si haces
a=Array.new
Estás creando un objeto, que se guarda internamente en la memoria, y
además estás creando una variable llamada a, que apunta a la referencia
de ese objeto en la memoria. De esta forma, cada vez que tu haces algo como
a.size
realmente lo que estás haciendo es invocar al método size del objeto al
que apunta a. Ahora si haces
a=Array.new
b=a
Tienes dos variables, pero las dos apuntan al mismo objeto, de forma que
si modificas tanto a como b, estás modificando el mismo objeto.
Con esto lo que quiero que veas es que por un lado van los objetos, que
es donde realmente se guardan tus valores y se ejecutan tus métodos, y
por otro lado las variables, que simplemente valen para apuntar a esos
objetos. Si creas un objeto y ninguna variable está apuntándole, ruby lo
eliminará de memoria tan pronto como pueda, ya que es inaccesible y
nadie lo va a usar.
Teniendo medio claro lo que es un objeto y lo que es una variable, es
posible tener una variable que no apunte a ningún sitio. Esto a veces se
llama una variable no inicializada (aunque en realidad no es el único
caso en el que pasa). Cuando una variable no apunta a ningún sitio,
apunta a nil.
a=nil
Eso en muchos lenguajes es una variable que no apunta a ninguna parte.
En Ruby es una variable que apunta al objeto nil (porque nil es también
un objeto), pero la explicación te vale igual. nil se utiliza para
indicar una variable que no apunta a ningún sitio, bien porque no se ha
inicializado, bien porque se le ha asignado nil expresamente.
Si tú haces lo que decías en tu mail
x=""
x es una variable que está apuntando a un objeto que es la cadena "". Al
apuntar a ese objeto, puedes utilizar todos los métodos que da la clase
String. Por ejemplo,puedes hacer
x.upcase
eso te va a devolver "", porque la cadena "" en mayúsculas es "", pero
como ves, tienes un objeto String, que puedes usar como quieras. Por lo
tanto, si haces
x.nil?
te va a decir "false", ya que x no apunta a nil, sino a un objeto String
vacío. Al estar vacío, si le pides
x.empty?
te va a decir que,efectivamente, la cadena está vacía. Sin embargo, no
es nil, porque apunta a un objeto de tipo String que está referenciado
en memoria.
Espero que te haya quedado medio claro.. si venías de un lenguaje
orientado a objetos, seguro que ya sabes cómo va esto. Si no venías de
un lenguaje orientado a objetos, quizás te valga la pena leerte algo de
teoría de orientación a objetos para entender cómo funciona ruby. Te
será especialmente útil para entender cosas como las variables de
instancia, de clase, herencia, constructores, etc. Puedes programar sin
conocer todo eso, pero vas a desaprovechar muchas de las funcionalidades
disponibles.
saludos,
javier ramírez
_______________________________________________
Rubies mailing list
Rub...@listas.escomposlinux.org
https://listas.escomposlinux.org/mailman/listinfo/rubies