Konstanten
Teil des Abschnitts Objektorientierte Programmierung der Ruby-Journey von Coddy. Lektion 14 von 57.
Eine Konstante beginnt mit einem Großbuchstaben und wird üblicherweise in Großbuchstaben geschrieben. Wird sie im Rumpf einer Klasse definiert, kann sie in jeder Methode der Klasse über ihren Namen verwendet werden. Außerhalb der Klasse schreibst du ClassName::NAME:
class Account
MIN_BALANCE = -100
def self.allowed?(balance)
balance >= MIN_BALANCE
end
end
puts Account::MIN_BALANCE
puts Account.allowed?(-50)
puts Account.allowed?(-150)Ausgabe:
-100
true
falseKonstanten eignen sich für unveränderliche Daten, die die gesamte Klasse verwendet, etwa Grenzwerte oder Nachschlagetabellen. fetch für eine Hash-Konstante löst bei einem unbekannten Schlüssel KeyError aus, anstatt stillschweigend nil zurückzugeben:
class Shipping
RATES = { "standard" => 5, "express" => 12 }.freeze
def self.cost(method)
RATES.fetch(method)
end
end
puts Shipping.cost("express")
begin
Shipping.cost("drone")
rescue KeyError => e
puts e.message
endAusgabe:
12
key not found: "drone"Ein Konstantenname kann nicht auf ein neues Objekt zeigen, ohne dass Ruby eine Warnung ausgibt, aber das Objekt, auf das er verweist, kann weiterhin geändert werden. freeze macht das Objekt selbst schreibgeschützt, sodass eine Änderung FrozenError auslöst:
class Palette
COLORS = ["red", "green"].freeze
end
begin
Palette::COLORS << "blue"
rescue FrozenError => e
puts e.message
end
p Palette::COLORS
p Palette::COLORS.frozen?Ausgabe:
can't modify frozen Array: ["red", "green"]
["red", "green"]
trueWähle danach, wie sich der Wert verhält. Ein Wert, der sich nie ändert, gehört in eine eingefrorene Konstante; ein Zustand, der sich während der Programmausführung ändert, wie etwa ein Zähler, gehört in eine Klasseninstanzvariable:
class Ticket
PREFIX = "TK" # fest: eine Konstante
@issued = 0 # ändert sich: Klasseninstanzvariable
def self.next_code
@issued += 1
"#{PREFIX}-#{@issued}"
end
endAufgabe
EinfachVervollständige die Klasse Order. Sie enthält die Konstanten RATES (einen eingefrorenen Hash: standard kostet 5, express 12, pickup 0) und FREE_FROM (50). initialize(total, method) löst ArgumentError mit unknown shipping: drone aus, wenn method kein Schlüssel von RATES ist. shipping gibt für Gesamtsummen ab FREE_FROM 0 und andernfalls den entsprechenden Tarif zurück, und to_s gibt 40.00 + 5 express = 45.00 zurück.
Der bereitgestellte Code gibt mithilfe der Konstante free from 50 aus, liest anschließend Bestellungen als Zeilen im Format total method ein und gibt jede Bestellung oder die Fehlermeldung aus.
Dein Code gehört in order.rb. main.rb enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.
Probier es selbst
require_relative 'order'
# Bereitgestellter Ein-/Ausgabe-Code: belasse ihn wie er ist
input = []
while (line = gets)
input << line.chomp
end
puts "free from #{Order::FREE_FROM}"
input.each do |line|
total, method = line.split
begin
puts Order.new(total.to_f, method)
rescue ArgumentError => e
puts e.message
end
end
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Klassen und Objekte
Arbeiten mit DateienKlassen definierenInstanzvariablenMethoden und selfto_s und inspectRückblick – Bibliotheksausweis4Kapselung
Private MethodenGeschützte MethodenPrivate SetterZustand schützenRückblick – Verkaufsautomat7Polymorphismus und Duck Typing
PolymorphismusDuck TypingAbstrakte MethodenFälle und KlassenRückblick – Zahlungsmethoden2Getter und Setter sowie self
Leser und SchreiberBenutzerdefinierte Setterself in MethodenIdentität und GleichheitWiederholung – Kontaktliste5Vererbung
UnterklassenMethoden überschreibensuper aufrufenis_a? und VorfahrenRückblick – Gehaltsabrechnung des Personals8Spezielle Methoden
Gleichheit und HashOperator-MethodenIndexieren und AnhängenBenutzerdefinierte CollectionsRückblick – Brüche11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihen3Klassenmethoden und Variablen
KlassenmethodenKlasseninstanzvariablenKonstantenFactory-MethodenZusammenfassung – GutscheincodesÜbe selbstständig: Online-Ruby-Compiler