Hoja de Trucos de Ruby
Última actualización
Hola Mundo y ejecutar código
Ruby no necesita código repetitivo: una sola línea se ejecuta.
| Operación | Sintaxis |
|---|---|
| Imprimir con salto de línea | puts "Hello, World!" |
| Imprimir sin salto de línea | print "Hello" |
| Inspeccionar un valor | p [1, 2, 3] |
| Interpolación de cadenas | puts "Hi #{name}" |
| Comentario | # this is a comment |
| Comentario de varias líneas | =begin ... =end |
| Ejecutar un archivo | ruby app.rb |
| Shell interactiva | irb |
Variables y tipos
Ruby es de tipado dinámico; todo es un objeto.
| Operación | Sintaxis |
|---|---|
| Variable local | age = 30 |
| Constante | PI = 3.14 |
| Variable de instancia | @name = "Ada" |
| Variable global | $count = 0 |
| Símbolo | :status |
| Nil / booleano | nil, true, false |
| Comprobar el tipo | 42.class devuelve Integer |
| Convertir el tipo | "42".to_i, 42.to_s, "3.5".to_f |
Cadenas
Las cadenas son objetos mutables con un amplio conjunto de métodos.
| Operación | Sintaxis |
|---|---|
| Longitud | "hello".length |
| Mayúsculas / minúsculas | s.upcase, s.downcase |
| Quitar espacios | s.strip |
| Reemplazar | s.gsub("a", "b") |
| Dividir en un array | "a,b,c".split(",") |
| Incluye una subcadena | s.include?("ell") |
| Cortar caracteres | s[0..2] |
| Concatenar | "foo" + "bar", s << "!" |
| Repetir | "ab" * 3 |
| Dar formato | format("%05d", 42) |
Arrays
Colecciones ordenadas e indexadas por enteros.
| Operación | Sintaxis |
|---|---|
| Crear | nums = [1, 2, 3] |
| Acceder por índice | nums[0], nums[-1] |
| Añadir al final | nums.push(4), nums << 4 |
| Quitar del final | nums.pop |
| Longitud | nums.length |
| Map | nums.map { |n| n * 2 } |
| Filtrar | nums.select { |n| n.even? } |
| Reducir | nums.reduce(0) { |sum, n| sum + n } |
| Ordenar | nums.sort |
| Unir en una cadena | nums.join(", ") |
Hashes
Colecciones clave-valor, a menudo indexadas por símbolos.
| Operación | Sintaxis |
|---|---|
| Crear | user = { name: "Ada", age: 30 } |
| Acceder a un valor | user[:name] |
| Establecer un valor | user[:email] = "a@x.com" |
| Comprobar una clave | user.key?(:name) |
| Eliminar una clave | user.delete(:age) |
| Claves / valores | user.keys, user.values |
| Iterar | user.each { |k, v| puts "#{k}: #{v}" } |
| Valor por defecto | Hash.new(0) |
| Combinar | h1.merge(h2) |
Control de flujo
Condicionales y bucles; observa los modificadores al final de línea de Ruby.
| Operación | Sintaxis |
|---|---|
| If / elsif / else | if x > 0 ... elsif x < 0 ... else ... end |
| If en línea (modificador) | puts "hi" if ready |
| Unless | unless done ... end |
| Ternario | x > 0 ? "pos" : "neg" |
| Case / when | case n; when 1 then ...; else ...; end |
| Bucle while | while i < 10 ... end |
| Bucle until | until done ... end |
| Times | 5.times { |i| puts i } |
| Iteración sobre un rango | (1..5).each { |i| puts i } |
| Break / next | break, next |
Métodos
La última expresión se devuelve de forma implícita.
| Operación | Sintaxis |
|---|---|
| Definir un método | def add(a, b) ... end |
| Retorno implícito | def square(x) x * x end |
| Argumento por defecto | def greet(name = "World") ... end |
| Argumentos con nombre | def box(w:, h:) ... end |
| Splat (variádico) | def sum(*nums) ... end |
| Método que termina en ? | def valid? ... end |
| Método que termina en ! | def normalize! ... end |
| Llamar sin paréntesis | greet "Ada" |
Bloques, procs y lambdas
Los bloques son fragmentos de código que se pasan a los métodos; los procs y las lambdas los almacenan.
| Operación | Sintaxis |
|---|---|
| Bloque (llaves) | [1, 2].each { |n| puts n } |
| Bloque (do/end) | [1, 2].each do |n| puts n end |
| Ceder a un bloque | def run; yield; end |
| Comprobar si se dio un bloque | block_given? |
| Capturar el bloque como parámetro | def run(&blk); blk.call; end |
| Crear un proc | square = proc { |x| x * x } |
| Crear una lambda | square = ->(x) { x * x } |
| Llamar a un proc / lambda | square.call(3), square.(3) |
Clases y módulos
Las clases contienen estado y comportamiento; los módulos incorporan métodos compartidos.
| Operación | Sintaxis |
|---|---|
| Definir una clase | class Point ... end |
| Constructor | def initialize(x, y) @x = x; @y = y; end |
| Método de instancia | def dist ... end |
| Atajos de acceso | attr_accessor :x, :y |
| Crear una instancia | p = Point.new(1, 2) |
| Heredar | class Circle < Shape ... end |
| Método de clase | def self.origin ... end |
| Definir un módulo | module Drawable ... end |
| Incorporar un módulo | include Drawable |
| Llamar a super | super(args) |
La sintaxis de Ruby que más usas, en una sola página. Esta hoja de trucos de Ruby es una referencia rápida para el núcleo del lenguaje: variables y tipos, cadenas, arrays y hashes, control de flujo, métodos y los bloques, procs y lambdas que hacen a Ruby tan expresivo.
Todo lo que hay aquí es Ruby puro y se ejecuta en cualquier intérprete estándar. Copia lo que necesites o prueba cada fragmento en vivo en el playground de Ruby, sin necesidad de instalar nada.
Preguntas frecuentes sobre la hoja de trucos de Ruby
¿Esta hoja de trucos de Ruby es gratis?
¿Cuál es la diferencia entre un bloque, un proc y una lambda?
{ ... } o do ... end; no es un objeto por sí mismo. Un proc envuelve un bloque en un objeto invocable que puedes almacenar y pasar. Una lambda es un proc especial que comprueba estrictamente su número de argumentos y trata return como un retorno de la propia lambda, mientras que un proc normal retorna del método que lo contiene.¿Qué son los símbolos en Ruby?
:name es un identificador inmutable y reutilizable. Como el mismo símbolo siempre apunta al mismo objeto en memoria, los símbolos son más rápidos y eficientes en memoria que las cadenas para cosas como las claves de hash y los nombres de métodos, por eso a menudo ves hashes escritos como { name: "Ada" }.