Variablen und Konstanten
name = "Mia" # lokale Variable
alter = 17
PI = 3.14159 # Konstante (Großbuchstaben)
$global = "selten sinnvoll" # globale Variable
@instanz = "in Objekten" # Instanzvariable
a, b = 1, 2
a, b = b, a # tauschen
erst, *rest = [1, 2, 3, 4]
puts "#{a} #{b} #{erst} #{rest}"
x = y = 5
puts x + y
puts defined?(name)
puts defined?(nirgendwo).inspect2 1 1 [2, 3, 4] 10 local-variable nil
Namen schreibt man in snake_case. Variablen haben keinen festen Typ; der Wert hat ihn.
Zahlen
puts 7 + 2, 7 - 2, 7 * 2, 7 / 2, 7 % 3, 2 ** 10 # Ganzzahldivision!
puts 7 / 2.0
puts 7.fdiv(2)
puts 7.divmod(2).inspect
puts 10.0 / 3
puts (10.0 / 3).round(2)
puts 3.7.floor, 3.2.ceil, 3.5.round, -3.5.round, 3.14159.truncate
puts 2**100 # beliebig große Ganzzahlen
puts 1_000_000
puts 0b1010, 0o17, 0xff
puts 255.to_s(2), "ff".to_i(16)
puts 10.gcd(4), 10.lcm(4)
puts Integer.sqrt(50), Math.sqrt(144), Math::PI.round(3)
puts 0.1 + 0.2
puts (0.1 + 0.2 - 0.3).abs < Float::EPSILON
puts 5.clamp(1, 3), 1234.digits.inspect
puts rand(1..1).to_s + " (Zufall mit festem Bereich)"9 5 14 3 1 1024 3.5 3.5 [3, 1] 3.3333333333333335 3.33 3 4 4 -4 3 1267650600228229401496703205376 1000000 10 15 255 11111111 255 2 20 7 12.0 3.142 0.30000000000000004 true 3 [4, 3, 2, 1] 1 (Zufall mit festem Bereich)
Für Rechnungen mit Geld gibt es BigDecimal (require "bigdecimal") und Rational (3/4r).
Strings
s = "Hallo Welt"
puts s.length, s.upcase, s.downcase, s.capitalize, s.swapcase
puts s[0], s[-1], s[0, 5], s[0..4], s[6..]
puts s.sub("Welt", "Ruby"), s.gsub("l", "L")
puts s.include?("Welt"), s.start_with?("Hal"), s.end_with?("x")
puts s.index("W"), s.count("l")
puts s.split.inspect, "a,b,c".split(",").inspect
puts s.reverse, s.chars.first(3).inspect
puts " trim ".strip + "|", "x".center(5, "*"), "7".rjust(3, "0"), "ab".ljust(4, ".") + "|"
puts "ab" * 3, "a" + "b", "a" << "b"
puts "Ruby" <=> "Rubx", "a" == "a", "a".equal?("a")
puts "%05.1f | %-5s| %+d | %x" % [3.14159, "ab", 5, 255]
puts "Zahl: #{'%.2f' % 3.14159}"
puts "ä".bytes.length, "ä".length
puts "ruby ist schön".split.map(&:capitalize).join(" ")
puts "text".frozen?
puts 'Einfache Quotes: #{kein} \n bleibt'
puts "Tab:\tZeilenumbruch folgt\nnächste Zeile"
text = <<~HEREDOC
Mehrzeilig
mit Einrückung
und #{1 + 1} Interpolation
HEREDOC
puts text10
HALLO WELT
hallo welt
Hallo welt
hALLO wELT
H
t
Hallo
Hallo
Welt
Hallo Ruby
HaLLo WeLt
true
true
false
6
3
["Hallo", "Welt"]
["a", "b", "c"]
tleW ollaH
["H", "a", "l"]
trim|
**x**
007
ab..|
ababab
ab
ab
1
true
false
003.1 | ab | +5 | ff
Zahl: 3.14
2
1
Ruby Ist Schön
false
Einfache Quotes: #{kein} \n bleibt
Tab: Zeilenumbruch folgt
nächste Zeile
Mehrzeilig
mit Einrückung
und 2 InterpolationSymbole
Symbole (:name) sind unveränderliche, eindeutige Namen. Sie dienen als Hash-Schlüssel und Bezeichner:
puts :ruby.class
puts :ruby.object_id == :ruby.object_id
puts "ruby".object_id == "ruby".object_id
puts :ruby.to_s, "ruby".to_sym.inspect
puts %i[a b c].inspect, %w[x y z].inspectSymbol true false ruby :ruby [:a, :b, :c] ["x", "y", "z"]
nil, true, false
Nur nil und false sind falsch. Alles andere (auch 0 und "") ist wahr:
[nil, false, 0, "", [], "false"].each { |w| puts "#{w.inspect} => #{w ? 'wahr' : 'falsch'}" }
puts nil.to_a.inspect, nil.to_s.empty?, nil.inspect
x = nil
puts x&.length.inspect # sicherer Aufruf: nil statt Fehler
puts (x || "Standard")
x ||= "gesetzt"
puts xnil => falsch false => falsch 0 => wahr "" => wahr [] => wahr "false" => wahr [] true nil nil Standard gesetzt
Typumwandlung
puts "42".to_i + 1, "3.7".to_f, 42.to_s + "!", "abc".to_i, "12abc".to_i
puts Integer("42"), Float("3.5")
begin
Integer("abc")
rescue ArgumentError => e
puts "Fehler: #{e.message}"
end
puts Integer("abc", exception: false).inspect
puts 65.chr, "A".ord, 3.7.to_i, 5.to_f, [1, 2].to_s, nil.to_a.inspect
puts Array(nil).inspect, Array(1..3).inspect, String(5)43 3.7 42! 0 12 42 3.5 Fehler: invalid value for Integer(): "abc" nil A 65 3 5.0 [1, 2] [] [] [1, 2, 3] 5
Merke
- Variablen:
snake_case, KonstantenGROSS,@instanz,$global - Ganzzahldivision:
7 / 2 = 3; Ganzzahlen sind beliebig groß - Strings sind veränderlich; Interpolation nur in
"..." - Symbole
:namesind eindeutige Bezeichner - Nur
nilundfalsesind falsch Integer("x")wirft Fehler,"x".to_iliefert 0
Aufgabe
Rechne eine Temperatur von Celsius in Fahrenheit um und gib sie auf eine Nachkommastelle gerundet aus.