- Es orientado a objetos. Todo, hasta un numero es un Objeto.
- En vez de null, esta nil
- Si un valor no booleano es evaluado como true, para Ruby es truthy o, de lo contrario falsey, como puede ser el 0, o un nil.
array.length
oarray.size
: Cantidad de elementos en el array.array.sort
: Devuelve el array ordenado.array.uniq
: Devuelve un nuevo array eliminando los repetidos.array.uniq!
: Elimina por una sola vez los elementos repetidos.array.freeze
: El array no puede ser modificadoarray.include?(obj)
: True si el elemento existe en el arrayarray.min
: El elemento con el menor valorarray.max
: El elemento de mayor valor
hash.delete(key)
: Elimina el valor por la keyhash.key(value)
: Devuelve la key de ese valor. Nil si no existe.hash.invert
: Crea un nuevo hash donde las key son valores y viceversahash.keys
: Crea un array con las keys del hashhash.values
: Crea un array con los valores del hashhash.length
: Devuelve la cantidad de hashes
Es una manera de agrupar metodos todos juntos, un modulo es una coleccion de metodos que pueden ser usados en otras clases, como librerias, no pueden ser instanciados en si mismos. En Ruby no podemos heredar de varias clases, pero si implementar varios modulos, a esto se le dice mixins La herencia dice que algo es, el modulo dice que algo tiene.
Ruby ya viene con algunos mixins ya incluidos y listos para usar, como Comparable que sirve para agregar comparaciones logicos a una clase.
class Cat
attr_accessor :name, :age
include Comparable
def initialize(n, a)
self.name = n
self.age = a
end
def <=>(other)
self.age <=> other.age
end
end
c1 = Cat.new("Bob", 3)
c2 = Cat.new("Lucy", 7)
puts c1 < c2
Es para organizar clases similares en un solo modulo. Como poner la clase perro y gato dentro de un solo modulo. Tambien sirve como un contenedor de metodos.
Es tomar un bloque de codigo, envolverlo en un objeto llamado proc y guardarlo en una variable. Podemos correr el codigo de ese bloque las veces que queramos y como queramos.
greet = Proc.new do |x|
puts "Welcome #{x}"
end
Son muy similares a los metodos, realizan operaciones y pueden incluir parametros.
greet = Proc.new do |x|
puts "Welcome #{x}"
end
goodbye = Proc.new do |x|
puts "Goodbye #{x}"
end
def say(arr, proc)
arr.each { |x| proc.call x}
end
La Lambda es algo muy parecido al Proc, es mas, la lambda es una instancia de una Proc.
Creamos una lambda de la siguiente manera : talk = lambda {puts "Hi"}
o podemos usar otra sintaxis como talk = ->() {puts "Hi"}
Una lambda es una funcion anonima.
Si bien las procs y las lambdas son muy parecidas, tienen varias diferencias.
- Las lambdas chequean la cantidad de argumentos que se les estan mandando, las procs no.
talk = lambda { |x| puts "Hello #{x}" }
talk_proc = Proc.new { |x| puts "Hello #{x}" }
talk_proc.call # Hello
talk.call # Error
- r read-only, starts at beginning of file (default mode).
- r+ read-write, starts at beginning of file.
- w write-only, truncates existing file to zero length or creates a new file for writing.
- w+ read-write, truncates existing file to zero length overwriting existing data or creates a new file for reading and writing.
- a write-only, appends to end of file if file exists, otherwise creates a new file for writing.
- a+ read-write, appends or reads from end of file if file exists, otherwise creates a new file for reading and writing.