Ruby Spickzettel
Zuletzt aktualisiert
Hello World & Code ausführen
Ruby braucht keine Boilerplate - eine einzige Zeile läuft.
| Operation | Syntax |
|---|---|
| Mit Zeilenumbruch ausgeben | puts "Hello, World!" |
| Ohne Zeilenumbruch ausgeben | print "Hello" |
| Einen Wert inspizieren | p [1, 2, 3] |
| String-Interpolation | puts "Hi #{name}" |
| Kommentar | # this is a comment |
| Mehrzeiliger Kommentar | =begin ... =end |
| Eine Datei ausführen | ruby app.rb |
| Interaktive Shell | irb |
Variablen & Typen
Ruby ist dynamisch typisiert; alles ist ein Objekt.
| Operation | Syntax |
|---|---|
| Lokale Variable | age = 30 |
| Konstante | PI = 3.14 |
| Instanzvariable | @name = "Ada" |
| Globale Variable | $count = 0 |
| Symbol | :status |
| Nil / Boolean | nil, true, false |
| Typ prüfen | 42.class gibt Integer zurück |
| Typ umwandeln | "42".to_i, 42.to_s, "3.5".to_f |
Strings
Strings sind veränderliche Objekte mit einem reichhaltigen Methodensatz.
| Operation | Syntax |
|---|---|
| Länge | "hello".length |
| Groß-/Kleinschreibung | s.upcase, s.downcase |
| Leerzeichen entfernen | s.strip |
| Ersetzen | s.gsub("a", "b") |
| In Array aufteilen | "a,b,c".split(",") |
| Enthält Teilstring | s.include?("ell") |
| Zeichen ausschneiden | s[0..2] |
| Verketten | "foo" + "bar", s << "!" |
| Wiederholen | "ab" * 3 |
| Formatieren | format("%05d", 42) |
Arrays
Geordnete, ganzzahlig indizierte Collections.
| Operation | Syntax |
|---|---|
| Erstellen | nums = [1, 2, 3] |
| Zugriff per Index | nums[0], nums[-1] |
| Am Ende hinzufügen | nums.push(4), nums << 4 |
| Vom Ende entfernen | nums.pop |
| Länge | nums.length |
| Map | nums.map { |n| n * 2 } |
| Filtern | nums.select { |n| n.even? } |
| Reduce | nums.reduce(0) { |sum, n| sum + n } |
| Sortieren | nums.sort |
| Zu String zusammenfügen | nums.join(", ") |
Hashes
Schlüssel-Wert-Collections, oft mit Symbolen als Schlüssel.
| Operation | Syntax |
|---|---|
| Erstellen | user = { name: "Ada", age: 30 } |
| Wert lesen | user[:name] |
| Wert setzen | user[:email] = "a@x.com" |
| Schlüssel prüfen | user.key?(:name) |
| Schlüssel löschen | user.delete(:age) |
| Schlüssel / Werte | user.keys, user.values |
| Durchlaufen | user.each { |k, v| puts "#{k}: #{v}" } |
| Standardwert | Hash.new(0) |
| Zusammenführen | h1.merge(h2) |
Kontrollfluss
Bedingungen und Schleifen; beachte Rubys nachgestellte Modifizierer.
| Operation | Syntax |
|---|---|
| If / elsif / else | if x > 0 ... elsif x < 0 ... else ... end |
| Inline-if (Modifizierer) | puts "hi" if ready |
| Unless | unless done ... end |
| Ternär | x > 0 ? "pos" : "neg" |
| Case / when | case n; when 1 then ...; else ...; end |
| While-Schleife | while i < 10 ... end |
| Until-Schleife | until done ... end |
| Times | 5.times { |i| puts i } |
| Bereichsiteration | (1..5).each { |i| puts i } |
| Break / next | break, next |
Methoden
Der letzte Ausdruck wird implizit zurückgegeben.
| Operation | Syntax |
|---|---|
| Eine Methode definieren | def add(a, b) ... end |
| Impliziter Return | def square(x) x * x end |
| Standardargument | def greet(name = "World") ... end |
| Schlüsselwortargumente | def box(w:, h:) ... end |
| Splat (variadisch) | def sum(*nums) ... end |
| Methode endet auf ? | def valid? ... end |
| Methode endet auf ! | def normalize! ... end |
| Aufruf ohne Klammern | greet "Ada" |
Blöcke, Procs & Lambdas
Blöcke sind Codeabschnitte, die an Methoden übergeben werden; Procs und Lambdas speichern sie.
| Operation | Syntax |
|---|---|
| Block (geschweifte Klammern) | [1, 2].each { |n| puts n } |
| Block (do/end) | [1, 2].each do |n| puts n end |
| An einen Block yielden | def run; yield; end |
| Prüfen, ob Block übergeben | block_given? |
| Block als Parameter erfassen | def run(&blk); blk.call; end |
| Einen Proc erstellen | square = proc { |x| x * x } |
| Ein Lambda erstellen | square = ->(x) { x * x } |
| Einen Proc / ein Lambda aufrufen | square.call(3), square.(3) |
Klassen & Module
Klassen halten Zustand und Verhalten; Module mischen gemeinsame Methoden ein.
| Operation | Syntax |
|---|---|
| Eine Klasse definieren | class Point ... end |
| Konstruktor | def initialize(x, y) @x = x; @y = y; end |
| Instanzmethode | def dist ... end |
| Accessor-Kurzformen | attr_accessor :x, :y |
| Instanz erstellen | p = Point.new(1, 2) |
| Erben | class Circle < Shape ... end |
| Klassenmethode | def self.origin ... end |
| Ein Modul definieren | module Drawable ... end |
| Ein Modul einmischen | include Drawable |
| super aufrufen | super(args) |
Die Ruby-Syntax, die du am häufigsten brauchst, auf einer Seite. Dieser Ruby-Spickzettel ist eine Schnellreferenz für die Kernsprache - Variablen und Typen, Strings, Arrays und Hashes, Kontrollfluss, Methoden sowie die Blöcke, Procs und Lambdas, die Ruby so ausdrucksstark machen.
Alles hier ist reines Ruby und läuft auf jedem Standard-Interpreter. Kopiere, was du brauchst, oder probiere jeden Codeschnipsel live im Ruby-Playground aus - keine Installation nötig.
Ruby-Spickzettel FAQ
Ist dieser Ruby-Spickzettel kostenlos?
Was ist der Unterschied zwischen einem Block, einem Proc und einem Lambda?
{ ... } oder do ... end übergeben wird - er ist für sich allein kein Objekt. Ein proc verpackt einen Block in ein aufrufbares Objekt, das du speichern und herumreichen kannst. Ein lambda ist ein spezieller Proc, der seine Argumentanzahl streng prüft und return so behandelt, dass es aus dem Lambda selbst zurückkehrt, während ein einfacher Proc aus der umschließenden Methode zurückkehrt.Was sind Symbole in Ruby?
:name ist ein unveränderlicher, wiederverwendbarer Bezeichner. Da dasselbe Symbol immer auf dasselbe Objekt im Speicher zeigt, sind Symbole für Dinge wie Hash-Schlüssel und Methodennamen schneller und speichereffizienter als Strings - weshalb du Hashes oft als { name: "Ada" } geschrieben siehst.