do..end vs. geschweifte Klammern
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy — Lektion 16 von 56.
Ruby bietet Ihnen zwei Möglichkeiten, einen Block zu schreiben. Sie bedeuten dasselbe, aber jede hat einen bevorzugten Anwendungsfall.
do...end ist für mehrzeilige Blöcke:
[1, 2, 3].each do |n|
doubled = n * 2
puts "#{n} -> #{doubled}"
endGeschweifte Klammern { ... } sind für einzeilige Blöcke gedacht, kurz und in Form eines Ausdrucks:
[1, 2, 3].each { |n| puts n * 2 }Die beiden haben eine leicht unterschiedliche Rangfolge, aber die Regel, die Lernende benötigen, ist die Stilregel: geschweifte Klammern für Einzeiler, do...end für Mehrzeiler.
Beide Formen können einen Wert zurückgeben. Der letzte Ausdruck des Blocks ist das, was an Methoden wie map zurückgegeben wird:
[1, 2, 3].map { |n| n * 10 } # [10, 20, 30]
[1, 2, 3].map do |n|
n * 10
end # [10, 20, 30]Aufgabe
EinfachLies eine durch Kommas getrennte Liste von Ganzzahlen aus der Eingabe. Gib zwei Zeilen aus:
- Jede Zahl verdoppelt, verbunden mit
,. Verwende die Brace-Form vonmap. - Den String
"<n> squared is <n*n>"für jede Zahl, eine pro Zeile. Verwende diedo...end-Form voneach.
Für die Eingabe 1,2,3 lautet die Ausgabe:
2, 4, 6
1 squared is 1
2 squared is 4
3 squared is 9Spickzettel
Ruby-Blocks haben zwei Syntax-Formen:
Geschweifte Klammern { ... } für einzeilige Blocks:
[1, 2, 3].map { |n| n * 2 } # [2, 4, 6]do...end für mehrzeilige Blocks:
[1, 2, 3].each do |n|
doubled = n * 2
puts "#{n} -> #{doubled}"
endBeide Formen geben den letzten Ausdruck des Blocks zurück (verwendet von Methoden wie map).
Probier es selbst
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: Zeile 1, verdoppelt, Klammer-Form von map, verbunden mit ", "
# TODO: Zeilen 2..n, Quadrate, do...end-Form von each
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Programmfluss
1Strings im Detail
String-Methoden im ÜberblickString-InterpolationIterieren über StringsSplit und JoinRückblick – String Weaver4Blöcke, Procs & Lambdas
Was ist ein Block?do..end vs. geschweifte KlammernDas yield-SchlüsselwortBlock-ParameterProcs und LambdasZusammenfassung – Eigener Iterator7Hashes Teil 2
Hash.new mit StandardwertenIterieren über HashesVerschachtelte HashesZusammenführen und TransformierenRückblick – Häufigkeitszähler10Projekt - Studentenverwaltung
ProjektübersichtStudent hinzufügen5Enumerable-Kraftpaket
Select und RejectMap-VerkettungReduce / Injectcount, all?, any?, none?group_by und partitionsort_by, min_by, max_byZusammenfassung – Data Pipeline8Fortgeschrittene Entscheidungslogik
Case mit Klassen & RegexMulti-Value whenTernärer OperatorInline if / unlessRückblick – Noten-Klassifizierer