Ruby Cheat Sheet
Ultimo aggiornamento
Hello World ed esecuzione del codice
Ruby non richiede codice di contorno: basta una riga per eseguire qualcosa.
| Operazione | Sintassi |
|---|---|
| Stampare con ritorno a capo | puts "Hello, World!" |
| Stampare senza ritorno a capo | print "Hello" |
| Ispezionare un valore | p [1, 2, 3] |
| Interpolazione di stringhe | puts "Hi #{name}" |
| Commento | # this is a comment |
| Commento su più righe | =begin ... =end |
| Eseguire un file | ruby app.rb |
| Shell interattiva | irb |
Variabili e tipi
Ruby ha tipizzazione dinamica; tutto è un oggetto.
| Operazione | Sintassi |
|---|---|
| Variabile locale | age = 30 |
| Costante | PI = 3.14 |
| Variabile d'istanza | @name = "Ada" |
| Variabile globale | $count = 0 |
| Simbolo | :status |
| Nil / booleano | nil, true, false |
| Controllare il tipo | 42.class restituisce Integer |
| Convertire il tipo | "42".to_i, 42.to_s, "3.5".to_f |
Stringhe
Le stringhe sono oggetti mutabili con un ricco insieme di metodi.
| Operazione | Sintassi |
|---|---|
| Lunghezza | "hello".length |
| Maiuscole / minuscole | s.upcase, s.downcase |
| Rimuovere gli spazi | s.strip |
| Sostituire | s.gsub("a", "b") |
| Dividere in un array | "a,b,c".split(",") |
| Contiene una sottostringa | s.include?("ell") |
| Estrarre caratteri | s[0..2] |
| Concatenare | "foo" + "bar", s << "!" |
| Ripetere | "ab" * 3 |
| Formattare | format("%05d", 42) |
Array
Collezioni ordinate con indici interi.
| Operazione | Sintassi |
|---|---|
| Creare | nums = [1, 2, 3] |
| Accedere per indice | nums[0], nums[-1] |
| Aggiungere in coda | nums.push(4), nums << 4 |
| Rimuovere dalla fine | nums.pop |
| Lunghezza | nums.length |
| Map | nums.map { |n| n * 2 } |
| Filtrare | nums.select { |n| n.even? } |
| Ridurre | nums.reduce(0) { |sum, n| sum + n } |
| Ordinare | nums.sort |
| Unire in una stringa | nums.join(", ") |
Hash
Collezioni chiave-valore, spesso con simboli come chiavi.
| Operazione | Sintassi |
|---|---|
| Creare | user = { name: "Ada", age: 30 } |
| Accedere a un valore | user[:name] |
| Impostare un valore | user[:email] = "a@x.com" |
| Controllare una chiave | user.key?(:name) |
| Eliminare una chiave | user.delete(:age) |
| Chiavi / valori | user.keys, user.values |
| Iterare | user.each { |k, v| puts "#{k}: #{v}" } |
| Valore predefinito | Hash.new(0) |
| Unire | h1.merge(h2) |
Controllo del flusso
Condizioni e cicli; nota i modificatori in coda di Ruby.
| Operazione | Sintassi |
|---|---|
| If / elsif / else | if x > 0 ... elsif x < 0 ... else ... end |
| If in linea (modificatore) | puts "hi" if ready |
| Unless | unless done ... end |
| Ternario | x > 0 ? "pos" : "neg" |
| Case / when | case n; when 1 then ...; else ...; end |
| Ciclo while | while i < 10 ... end |
| Ciclo until | until done ... end |
| Times | 5.times { |i| puts i } |
| Iterare su un intervallo | (1..5).each { |i| puts i } |
| Break / next | break, next |
Metodi
L'ultima espressione viene restituita implicitamente.
| Operazione | Sintassi |
|---|---|
| Definire un metodo | def add(a, b) ... end |
| Return implicito | def square(x) x * x end |
| Argomento predefinito | def greet(name = "World") ... end |
| Argomenti con nome | def box(w:, h:) ... end |
| Splat (variadico) | def sum(*nums) ... end |
| Metodo che termina con ? | def valid? ... end |
| Metodo che termina con ! | def normalize! ... end |
| Chiamata senza parentesi | greet "Ada" |
Blocchi, proc e lambda
I blocchi sono porzioni di codice passate ai metodi; proc e lambda li memorizzano.
| Operazione | Sintassi |
|---|---|
| Blocco (graffe) | [1, 2].each { |n| puts n } |
| Blocco (do/end) | [1, 2].each do |n| puts n end |
| Cedere il controllo al blocco (yield) | def run; yield; end |
| Controllare se c'è un blocco | block_given? |
| Ricevere il blocco come parametro | def run(&blk); blk.call; end |
| Creare una proc | square = proc { |x| x * x } |
| Creare una lambda | square = ->(x) { x * x } |
| Chiamare una proc / lambda | square.call(3), square.(3) |
Classi e moduli
Le classi contengono stato e comportamento; i moduli aggiungono metodi condivisi.
| Operazione | Sintassi |
|---|---|
| Definire una classe | class Point ... end |
| Costruttore | def initialize(x, y) @x = x; @y = y; end |
| Metodo d'istanza | def dist ... end |
| Scorciatoie per gli accessor | attr_accessor :x, :y |
| Creare un'istanza | p = Point.new(1, 2) |
| Ereditare | class Circle < Shape ... end |
| Metodo di classe | def self.origin ... end |
| Definire un modulo | module Drawable ... end |
| Includere un modulo | include Drawable |
| Chiamare super | super(args) |
La sintassi Ruby che usi più spesso, in una sola pagina. Questa Ruby cheat sheet è un riferimento rapido per il cuore del linguaggio: variabili e tipi, stringhe, array e hash, controllo del flusso, metodi e i blocchi, proc e lambda che rendono Ruby così espressivo.
Tutto quello che trovi qui è Ruby puro e funziona con qualsiasi interprete standard. Copia ciò che ti serve o prova ogni snippet dal vivo nel playground Ruby, senza installare nulla.
Domande frequenti sulla Ruby cheat sheet
Questa Ruby cheat sheet è gratuita?
Qual è la differenza tra un blocco, una proc e una lambda?
{ ... } o do ... end: da solo non è un oggetto. Una proc racchiude un blocco in un oggetto richiamabile che puoi memorizzare e passare in giro. Una lambda è una proc speciale che controlla in modo rigoroso il numero di argomenti e tratta return come un ritorno dalla lambda stessa, mentre una proc normale ritorna dal metodo che la contiene.Cosa sono i simboli in Ruby?
:name è un identificatore immutabile e riutilizzabile. Poiché lo stesso simbolo punta sempre allo stesso oggetto in memoria, i simboli sono più veloci ed efficienti delle stringhe per cose come le chiavi degli hash e i nomi dei metodi: ecco perché vedi spesso hash scritti come { name: "Ada" }.