Todo en Ruby es un objeto, lo cual nos está hablando de que tiene (digámoslo así) unas características propias y algo se puede hacer con ello (mas o menos como en el mundo real) para hacer algo. Imaginemos un objeto real como un tornillo, está definido por sus características físicas, su funcionalidad y su finalidad, individual o colectiva en conjunción con otros objetos.
En Ruby, estos objetos estás definidos por una clase y limitados por sus métodos (funcionalidades) que son las acciones que se pueden realizar.
a=2
puts a.methods
puts a.methods
Salida
%
inspect
taguri
<<
singleton_method_added
&
clone
>>
round
rpower
public_methods
taguri=
display
to_r
instance_variable_defined?
divmod
equal?
freeze
integer?
chr
*
+
to_i
methods
respond_to?
-
upto
between?
numerator
prec
truncate
/
dup
instance_variables
__id__
modulo
succ
|
method
eql?
zero?
id
~
to_f
send
singleton_methods
lcm
power!
prec_i
taint
step
to_int
instance_variable_get
frozen?
instance_of?
__send__
^
remainder
to_a
+@
to_yaml_style
nonzero?
-@
type
**
floor
<
require_gem
object_id
instance_eval
protected_methods
gcdlcm
<=>
require
==
prec_f
quo
>
===
downto
id2name
size
instance_variable_set
extend
kind_of?
abs
>=
gem
to_yaml_properties
next
denominator
to_s
<=
to_yaml
coerce
class
hash
ceil
private_methods
=~
tainted?
to_bn
rdiv
div
untaint
nil?
gcd
times
to_sym
is_a?
[]
>Exit code: 0
Programa:
a="hola"
puts a.methods
Salida:
%
select
[]=
inspect
taguri
<<
each_byte
clone
gsub
casecmp
display
public_methods
to_str
partition
tr_s
taguri=
empty?
instance_variable_defined?
tr!
freeze
equal?
rstrip
*
match
grep
chomp!
+
next!
swapcase
ljust
to_i
swapcase!
respond_to?
methods
between?
upto
reject
sum
hex
dup
insert
reverse!
chop
instance_variables
delete
dump
__id__
tr_s!
concat
member?
method
succ
find
eql?
each_with_index
strip!
id
rjust
to_f
send
singleton_methods
index
collect
oct
all?
is_complex_yaml?
slice
taint
length
entries
chomp
instance_variable_get
frozen?
upcase
sub!
squeeze
include?
instance_of?
__send__
upcase!
crypt
delete!
to_yaml_style
detect
to_a
zip
lstrip!
type
center
<
require_gem
object_id
instance_eval
protected_methods
map
<=>
rindex
require
>
any?
==
is_binary_data?
split
===
strip
size
sort
instance_variable_set
gsub!
count
succ!
downcase
min
extend
kind_of?
squeeze!
downcase!
intern
>=
gem
to_yaml_properties
next
find_all
to_s
<=
each_line
to_yaml
each
rstrip!
class
slice!
hash
sub
private_methods
tainted?
replace
inject
=~
tr
reverse
untaint
nil?
sort_by
lstrip
to_sym
capitalize
max
chop!
is_a?
capitalize!
scan
[]
unpack
Todo esto es lo que tienen definidos los objetos tipo que pueden ser Fixnum (cualquier número entero) Como en la vida real, sólo puede trabajar con objetos de la misma naturaleza, pero sus métodos pueden hacer que cambien de naturaleza, es decir, pueden convertir un número en texto y viceversa.
%
inspect
taguri
<<
singleton_method_added
&
clone
>>
round
rpower
public_methods
taguri=
display
to_r
instance_variable_defined?
divmod
equal?
freeze
integer?
chr
*
+
to_i
methods
respond_to?
-
upto
between?
numerator
prec
truncate
/
dup
instance_variables
__id__
modulo
succ
|
method
eql?
zero?
id
~
to_f
send
singleton_methods
lcm
power!
prec_i
taint
step
to_int
instance_variable_get
frozen?
instance_of?
__send__
^
remainder
to_a
+@
to_yaml_style
nonzero?
-@
type
**
floor
<
require_gem
object_id
instance_eval
protected_methods
gcdlcm
<=>
require
==
prec_f
quo
>
===
downto
id2name
size
instance_variable_set
extend
kind_of?
abs
>=
gem
to_yaml_properties
next
denominator
to_s
<=
to_yaml
coerce
class
hash
ceil
private_methods
=~
tainted?
to_bn
rdiv
div
untaint
nil?
gcd
times
to_sym
is_a?
[]
>Exit code: 0
Programa:
a="hola"
puts a.methods
Salida:
%
select
[]=
inspect
taguri
<<
each_byte
clone
gsub
casecmp
display
public_methods
to_str
partition
tr_s
taguri=
empty?
instance_variable_defined?
tr!
freeze
equal?
rstrip
*
match
grep
chomp!
+
next!
swapcase
ljust
to_i
swapcase!
respond_to?
methods
between?
upto
reject
sum
hex
dup
insert
reverse!
chop
instance_variables
delete
dump
__id__
tr_s!
concat
member?
method
succ
find
eql?
each_with_index
strip!
id
rjust
to_f
send
singleton_methods
index
collect
oct
all?
is_complex_yaml?
slice
taint
length
entries
chomp
instance_variable_get
frozen?
upcase
sub!
squeeze
include?
instance_of?
__send__
upcase!
crypt
delete!
to_yaml_style
detect
to_a
zip
lstrip!
type
center
<
require_gem
object_id
instance_eval
protected_methods
map
<=>
rindex
require
>
any?
==
is_binary_data?
split
===
strip
size
sort
instance_variable_set
gsub!
count
succ!
downcase
min
extend
kind_of?
squeeze!
downcase!
intern
>=
gem
to_yaml_properties
next
find_all
to_s
<=
each_line
to_yaml
each
rstrip!
class
slice!
hash
sub
private_methods
tainted?
replace
inject
=~
tr
reverse
untaint
nil?
sort_by
lstrip
to_sym
capitalize
max
chop!
is_a?
capitalize!
scan
[]
unpack
Todo esto es lo que tienen definidos los objetos tipo que pueden ser Fixnum (cualquier número entero) Como en la vida real, sólo puede trabajar con objetos de la misma naturaleza, pero sus métodos pueden hacer que cambien de naturaleza, es decir, pueden convertir un número en texto y viceversa.
Ruby es capaz de distinguir los números enteros llamados Integer en Fixnum y Bignun que son los números grandes y pequeños positivos y negativos sin coma decimal, los Float son los decimales
Para comprender mejor los métodos veremos algunos:
.capitalize ---> Convierte en mayúscula el primer carácter en una cadena de caracteres.
.to_i ---> Convierte una cadena en número entero
.to_f --->Convierte una cadena en número flotante (decimal)
.to_sym ---> Convierte una cadena en símbolo.
.upcase ---> Convierte una cadena en mayúsculas.
.downcase ---> Convierte una cadena en minúsculas.
.swapcase ---> Convierte una cadena en mayúsculas y minúsculas alternadas.
Baste esto por ahora para hacernos una idea de qué son los métodos.
Los objetos en Ruby se clasifican en clases y para saber en qué clase están se utiliza la siguiente orden: .class
Nos encontraremos con que existen estas clases: Fixnun, Float, String, Array, Hash, Class, Integer, Rational.
a=2
b=2.0
c="a"
d=[]
e={}
f=2.to_r
g= 2.to_a
puts a.class
puts b.class
puts c.class
puts d.class
puts e.class
puts f.class
puts g.class
Da:
>ruby pppp.rb
pppp.rb:7: warning: default `to_a' will be obsolete
Fixnum
Float
String
Array
Hash
Rational
Array
Como vemos Ruby lee lo que ponemos y entiende en qué clase trabajará, puesto que es en ella donde se definen los métodos con los que podrá hacer algo el objeto, así, cuando ponemos a=1 ruby entiende que 1 es el valor (variable) asignado a a (que es el objeto nuevo), ésta es de la clase Fixnum, por ser un número, y le dota de sus métodos, por ser una instancia de Fixnum, así pues a hereda todas los métodos de Fixnum.
Para entendernos, cuando ponemos a='Hola' lo que hace Ruby es:
1.- a es un objeto definido por Hola.
2.- está limitado por las comillas lo cual le convierte en String
3.- le asigna los métodos de los String para que los pueda usar.
Las clases se pueden definir con .new o con los constructores literales:
String ---> ' ó "
Símbolo ---> :
Array ---> [ ]
Hash ---> { }
Rango ---> .. ó …
Expresiones regulares ---> /
Pero, ¿ordenes como puts o print, son objetos?
Bien, para que todo sea un objeto todo debe salir de una clase general que lo contenga que se llama Class, esta clase genera un objeto que los engloba a todos y se llama main, la manera de saber en qué objeto estamos es con la orden self: puts self
Así que puts y print son objetos definidos en main y no hace falta volver a definirlos.
En fin, que todo es un objeto, todo está contenido en clases y todo tiene métodos propios para poder manejar los objetos y relacionarse entre ellos. La cuestión es ir averiguando qué hace lo que uno quiere, no a la sintaxis meramente, sino a la idea de lo que uno quiere hacer.
Un ejemplo a grosso modo, si uno quiere fabricar helados, tendrá que usar de una máquina de helados donde poder darle las características que uno quiera (esto es la clase), también el helado tendrá sabor, olor, tamaño, etc., son las variables del objeto, y los métodos serán los materiales que unidos entre sí formen la máquina de hacer helados, tornillos, tuercas, muelles, paneles, líquidos, etc. infinidad de objetos y características de todo con todo en perfecta armonía para degustar el helado.
Se que aún me quedan muchas mas cosas qué decir, pero las dejo pendientes para otras entradas.
Para comprender mejor los métodos veremos algunos:
.capitalize ---> Convierte en mayúscula el primer carácter en una cadena de caracteres.
.to_i ---> Convierte una cadena en número entero
.to_f --->Convierte una cadena en número flotante (decimal)
.to_sym ---> Convierte una cadena en símbolo.
.upcase ---> Convierte una cadena en mayúsculas.
.downcase ---> Convierte una cadena en minúsculas.
.swapcase ---> Convierte una cadena en mayúsculas y minúsculas alternadas.
Baste esto por ahora para hacernos una idea de qué son los métodos.
Los objetos en Ruby se clasifican en clases y para saber en qué clase están se utiliza la siguiente orden: .class
Nos encontraremos con que existen estas clases: Fixnun, Float, String, Array, Hash, Class, Integer, Rational.
a=2
b=2.0
c="a"
d=[]
e={}
f=2.to_r
g= 2.to_a
puts a.class
puts b.class
puts c.class
puts d.class
puts e.class
puts f.class
puts g.class
Da:
>ruby pppp.rb
pppp.rb:7: warning: default `to_a' will be obsolete
Fixnum
Float
String
Array
Hash
Rational
Array
Como vemos Ruby lee lo que ponemos y entiende en qué clase trabajará, puesto que es en ella donde se definen los métodos con los que podrá hacer algo el objeto, así, cuando ponemos a=1 ruby entiende que 1 es el valor (variable) asignado a a (que es el objeto nuevo), ésta es de la clase Fixnum, por ser un número, y le dota de sus métodos, por ser una instancia de Fixnum, así pues a hereda todas los métodos de Fixnum.
Para entendernos, cuando ponemos a='Hola' lo que hace Ruby es:
1.- a es un objeto definido por Hola.
2.- está limitado por las comillas lo cual le convierte en String
3.- le asigna los métodos de los String para que los pueda usar.
Las clases se pueden definir con .new o con los constructores literales:
String ---> ' ó "
Símbolo ---> :
Array ---> [ ]
Hash ---> { }
Rango ---> .. ó …
Expresiones regulares ---> /
Pero, ¿ordenes como puts o print, son objetos?
Bien, para que todo sea un objeto todo debe salir de una clase general que lo contenga que se llama Class, esta clase genera un objeto que los engloba a todos y se llama main, la manera de saber en qué objeto estamos es con la orden self: puts self
Así que puts y print son objetos definidos en main y no hace falta volver a definirlos.
En fin, que todo es un objeto, todo está contenido en clases y todo tiene métodos propios para poder manejar los objetos y relacionarse entre ellos. La cuestión es ir averiguando qué hace lo que uno quiere, no a la sintaxis meramente, sino a la idea de lo que uno quiere hacer.
Un ejemplo a grosso modo, si uno quiere fabricar helados, tendrá que usar de una máquina de helados donde poder darle las características que uno quiera (esto es la clase), también el helado tendrá sabor, olor, tamaño, etc., son las variables del objeto, y los métodos serán los materiales que unidos entre sí formen la máquina de hacer helados, tornillos, tuercas, muelles, paneles, líquidos, etc. infinidad de objetos y características de todo con todo en perfecta armonía para degustar el helado.
Se que aún me quedan muchas mas cosas qué decir, pero las dejo pendientes para otras entradas.