Cositas interesantes de Ruby

Una pequeña chuleta de Ruby, con cosas previsibles y otras más interesantes….

a = if a<0
  a * -1
else
  a

a = a<0 ? a * -1 : a

a= a * -1 unless a>=0
variable = '' if variable.nil?
variable = '' unless variable
variable ||= ''

# Patrones
case palabra
  when /[a-z].*/ then "minusculas"
  when /[A-Z].*/ then "mayusculas"
  else "otro"
end
# Patron "insensible al caso"
print "Coinciden!" if /ABC/i =~ "1abc2"
nombre_variable
@atributo
 NombreClase

# hash table
colores = { "rojo" => 0, "verde" => 1, "azul" => 2}
colores["verde"]

# Cadenas
print "123456" [0..2]
# "123"
print "Azul #{colores["azul"]}"
print %q{"Muchas '"comillas' '" escapadas"" :-)}
# q => escape total, Q => interpreta bloques #{}
print %Q{"Estamos en #{Time.now.year}"}

while vs. until

array.each {|element| print element}
colores.each {|clave,valor| ... }
colores.map { |c| c[0].upcase }
# ["ROJO", "VERDE", "AZUL"]

 # numero de parametros variable, parametros por defecto
def funcion (param1, param2=0, *otros)
  otros.each { |p| ... }
end

# bloques
def traza(mensaje)
    $stderr.puts("#{Time.now} - comienzo #{mensaje}")
    $stderr.puts(yield)
    $stderr.puts("#{Time.now} - fin #{mensaje}")
end
def traza(mensaje, &bloque)
    $stderr.puts("#{Time.now} - comienzo #{mensaje}")
    $stderr.puts(bloque.call)
    $stderr.puts("#{Time.now} - fin #{mensaje}")
end
traza('suma') { 2 + 2 }

at_exit do { puts "Fin" }

set_trace_func proc { |evento, fichero, linea, id, vinculo , clase|
 puts "#{evento} en #{fichero}:#{linea} #{id} #{clase}"
}
print "Test"

File.open("fichero") do |f|
  f.puts("123")
end

# Otra forma sencilla de rastrear un script es usar el "Tracer" de la biblioteca estándar:
ruby -rtracer script.rb

class A < B
  def m1
  end
  def m2
  end
  private
  # a partir de private, los metodos son privados
  def m3
  end
end

Buenas prácticas:

  • Usar dos espacios en vez de tabuladores
  • ClasesCamello, serpientes_para_el_resto, INCLUIDAS_CONSTANTES

	

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *