do..end vs. geschweifte Klammern
Teil des Abschnitts Logik und Ablauf 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, mit
,verbunden. Verwende die geschweifte Form vonmap. - Die Zeichenkette
"<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 9Probier 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 und Ablauf
1Strings im Detail
Überblick über String-MethodenString-InterpolationStrings durchlaufenSplitten und VerbindenRückblick – String Weaver4Blocks, Procs & Lambdas
Was ist ein Block?do..end vs. geschweifte KlammernDas Schlüsselwort yieldBlock-ParameterProcs und LambdasRückblick – Benutzerdefinierter Iterator2Bereiche
Was ist ein Bereich?BereichsmethodenBereiche in Case / WhenWiederholung – Übung zu Bereichen5Das Enumerable-Kraftpaket
Select und RejectMap verkettenReduce / Injectcount, all?, any?, none?group_by und partitionsort_by, min_by, max_byZusammenfassung – Datenpipeline8Fortgeschrittene Entscheidungsfindung
Case mit Klassen & Regexwhen mit mehreren WertenTernärer OperatorInline-if / unlessRückblick – NotenklassifiziererÜbe selbstständig: Online-Ruby-Compiler