Inline if / unless
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy — Lektion 41 von 56.
Ruby ermöglicht es Ihnen, if und unless an das Ende einer einzelnen Anweisung zu setzen, als einzeiligen Modifikator. Es liest sich fast wie Englisch.
puts "Adult" if age >= 18
puts "Save your work" unless savedDies ist dasselbe wie:
if age >= 18
puts "Adult"
end
unless saved
puts "Save your work"
endDie Inline-Form eignet sich hervorragend für Guard-Style-Prüfungen am Anfang einer Methode oder für einmalige bedingte Aktualisierungen innerhalb einer Schleife:
return if name.nil? || name.empty?
counts = Hash.new(0)
words.each do |w|
counts[w] += 1 unless w.start_with?("#")
endVerwenden Sie, wie beim Ternär-Operator, Inline-Modifier für kurze Anweisungen. Wenn der Rumpf mehr als eine einzelne Zeile umfassen würde, schreiben Sie stattdessen einen echten if-Block.
Aufgabe
EinfachLies eine durch Kommas getrennte Liste von Ganzzahlen ein. Gib für jede Zahl eine Zeile aus, aber nur, wenn die Zahl ungleich Null ist:
- Gib
positive: <n>aus, wennn > 0 - Gib
negative: <n>aus, außer wennn >= 0
Beide Zeilen müssen die Inline-Modifier-Form verwenden (kein if-Block, kein else). Gib nach der Schleife Skipped zeros: <count> aus, wobei der Zähler die Anzahl der Nullen ist, ebenfalls ohne einen if-Block berechnet (verwende count).
Für die Eingabe 3,-2,0,5,0 ist die Ausgabe:
positive: 3
negative: -2
positive: 5
Skipped zeros: 2Spickzettel
Ruby erlaubt if und unless als Inline-Modifikatoren am Ende einer einzelnen Anweisung:
puts "Adult" if age >= 18
puts "Save your work" unless savedNützlich für Guard-Clauses oder einfache bedingte Aktualisierungen:
return if name.nil? || name.empty?
counts[w] += 1 unless w.start_with?("#")Verwenden Sie Inline-Modifikatoren nur für einzeilige Anweisungskörper; verwenden Sie einen vollständigen if-Block für alles, was länger ist.
Probier es selbst
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: Ausgabe mit Inline-if / unless für jede Zahl
# TODO: Übersprungene Nullen ausgeben: <n> mit count
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