Kurz: - Einrückung: zwei Leerzeichen - snake_case für Methoden/Variablen, CamelCase für Klassen, GROSS für Konstanten - Methoden mit ? liefern bool, mit ! verändern - Bevorzuge Blöcke und Enumerable statt for/while - RuboCop prüft den.
Teil des Kurses Ruby
Syntax auf einen Blick
name = "Mia" # Variable
NAME = 1 # Konstante
@feld, @@klassenfeld, $global
puts "Hallo #{name}"
if x then .. elsif .. else .. end puts "ja" if x unless x ..
case v when 1 then .. when 2..5 .. else .. end
while c .. end until c .. end loop do .. end 3.times { |i| .. }
def methode(a, b = 1, *rest, key: 0, **opts, &block) .. end
class A < B; include M; attr_accessor :x; def initialize(x) = @x = x; end
module M; def hallo = "hi"; end
begin .. rescue Fehler => e .. ensure .. endWichtige Klassen und Methoden
| Klasse | Methoden (Auswahl) |
|---|---|
Integer/Float | + - * / % **, abs round floor ceil times upto step divmod |
String | length upcase downcase strip split sub gsub include? start_with? center rjust to_i to_sym * % |
Symbol | to_s to_proc |
Array | push pop shift unshift first last map select reject reduce sort sort_by uniq flatten zip take drop each_slice sum min max tally |
Hash | fetch dig key? keys values each map select transform_values merge to_a sort_by group_by |
Range | (1..5) (1...5) to_a step include? sum lazy |
Proc | call curry >> << |
Object | class is_a? respond_to? send nil? frozen? dup tap then inspect |
Enumerable-Spickzettel
| Ziel | Methode |
|---|---|
| Umformen | map, flat_map, filter_map, zip |
| Filtern | select, reject, find, take_while, partition |
| Zusammenfassen | reduce, sum, count, min_by, max_by, tally |
| Gruppieren | group_by, each_slice, each_cons, chunk_while |
| Prüfen | any?, all?, none?, one?, include? |
| Reihenfolge | sort, sort_by, reverse, each_with_index |
Häufige Fehlermeldungen
| Meldung | Ursache |
|---|---|
undefined method 'x' for nil | Wert ist nil: mit &. oder Prüfung absichern |
undefined local variable or method | Tippfehler oder Variable nicht definiert |
wrong number of arguments (given 1, expected 2) | falsche Argumentanzahl |
no implicit conversion of Integer into String | "a" + 1: "a" + 1.to_s oder Interpolation |
uninitialized constant | Klasse/Modul nicht geladen oder falsch geschrieben (require) |
can't modify frozen String | String ist unveränderlich: dup oder +"" |
stack level too deep | unendliche Rekursion |
Konventionen
- Einrückung: zwei Leerzeichen
snake_casefür Methoden/Variablen,CamelCasefür Klassen,GROSSfür Konstanten- Methoden mit
?liefern bool, mit!verändern - Bevorzuge Blöcke und Enumerable statt
for/while - RuboCop prüft den Stil
Weiterlernen
- Offizielle Dokumentation ruby-doc.org und Ruby Koans
- Buch: Programming Ruby (“Pickaxe”), The Well-Grounded Rubyist
- Übungen: Exercism (Ruby-Track), Advent of Code
- Tutorial: Rails Guides (guides.rubyonrails.org)
Merke
- Alles ist ein Objekt, Blöcke sind das Herz des Stils
EnumerableundHashdecken den Großteil des Alltags ab- Tests (Minitest/RSpec), Bundler und RuboCop gehören zum Projekt
Quiz zur Selbstkontrolle
Was bedeutet &. in user&.name?
- Sicherer Aufruf: nil statt Fehler, wenn user nil ist (richtig)
- Logisches UND
- Block übergeben
- Referenz
Wie erzeugst du eine Klasse mit Getter und Setter?
- attr_accessor (richtig)
- property
- getter/setter
- accessor
Welche Datei beschreibt die Abhängigkeiten eines Projekts?
- Gemfile (richtig)
- package.json
- requirements.txt
- Cargo.toml
Weiter im Kurs
Zurück: Web, Rails und Ökosystem
Alle Kapitel: Ruby im Überblick