Kurz: 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).inspect `output 2 1 1 [2, 3, 4] 10 local-variable nil
Teil des Kurses Ruby
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).inspectAusgabe:
2 1 1 [2, 3, 4]
10
local-variable
nilNamen 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)"Ausgabe:
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 textAusgabe:
10
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 InterpolationHinweis
Strings sind in Ruby veränderlich. Mit
# frozen_string_literal: trueam Dateianfang werden Literale unveränderlich (empfohlen in größeren Projekten).
Symbole
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].inspectAusgabe:
Symbol
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 xAusgabe:
nil => falsch
false => falsch
0 => wahr
"" => wahr
[] => wahr
"false" => wahr
[]
true
nil
nil
Standard
gesetztTypumwandlung
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)Ausgabe:
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]
5Merke
- 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
Übungsaufgabe
Rechne eine Temperatur von Celsius in Fahrenheit um und gib sie auf eine Nachkommastelle gerundet aus.
Quiz zur Selbstkontrolle
Welche Werte sind in Ruby falsch?
- nil und false (richtig)
- 0 und ""
- nur false
- nil, false und 0
Was liefert 7 / 2?
- 3 (richtig)
- 3.5
- 4
- 2
Was ist ein Symbol?
- Ein unveränderlicher, eindeutiger Name wie :ruby (richtig)
- Ein Sonderzeichen
- Ein Kommentar
- Ein Zeichen im String
Weiter im Kurs
Zurück: Einführung und erstes Programm
Weiter: Kontrollfluss und Schleifen
Alle Kapitel: Ruby im Überblick