$> irb
Um in Ruby Dinge zu tun versetzt man sich in die Lage eines Objektes.
Um herauszufinden welches Objekt man gerade ist benutzt man self
self
=> main
Wenn man vorher nicht spezifiziert in welchem Objekt man sich befinden möchte ist man in main
-> das default Objekt.
Ein Objekt kann mit einem anderen 'reden'. Dazu gibt es sogenannte Methoden. Man spricht davon das "ein Objekt die Methode eines anderen Objektes aufruft". Um das zu tun fügt man einen '.' an das Objekt an das man befragen möchte und schreibt die Methode dahinter.
2.even?
=> true
2
ist ein Objekt. even?
ist die Methode.
1.next
=> 2
Methoden können aneinander angehangen werden:
1.next.next
=> 3
Die zweite Methode wird auf dem Rückgabewert (das Objekt 2) der ersten Methode aufgerufen.
1.methods.sort
Alphabetisch sortierte Liste der Methoden eines Integers
.
Methoden können Argumente übergeben werden, die die Ausgabe beeinflussen.
['stein', 'schere', 'papier'].index('papier')
=> 2
'papier'
ist das Argument für die Methode index
. index
gibt die Stelle aus an der sich das Argument in der Liste befindet. Man kann mehrere Argumente übergeben indem man sie mit einem Komma trennt:
2.between?(1, 3)
=> true
Methoden, die nur true
oder false
ausgeben (sogenannte Booleans), werden in Ruby mit ?
abgeschlossen.
In der Liste der Methoden für Integer tauchen auch Symbole wie +
und -
auf.
4.+(2)
=> 6
Ist aufwändig zu tippen. Ruby versucht es dem Programmierer möglichst einfach zu machen Dinge zu erreichen. Daher kann eine Addition auch so geschrieben werden:
4 + 2
=> 6
+ - * / = == != > < >= <= []
Ein Objekt das Text repräsentiert. Um einen String zu erstellen setzt man den zukünftigen Inhalt in Anführungszeichen.
"Infopark and Friends"
=> "Infopark and Friends"
Es gibt zwei Arten von Anführungszeichen in Ruby ''
und ""
. Beide erstellen Strings, haben aber kleine Unterschiede. Mehr dazu später.
Auch Strings haben eine Reihe von Methoden.
"Infopark and Friends".length
=> 20
Ein essentielles Feature von Strings ist, dass man Platzhalter benutzen kann um dynamische Inhalte zu bekommen.
a = 1
b = 4
puts "Die Zahl #{a} ist kleiner als #{b}"
=> "Die Zahl 1 ist kleiner als 4"
Valider Ruby Code kann mit #{}
in einem String 'untergebracht' werden und wird bei der Ausgabe des Strings ausgewertet. Dies funktioniert aber nur mit ""
. Der essentielle Unterschied zwischen single- und double-quotes ist das double-quotes sogenannte Escape-Sequenzen unterstützen (z.B. \n
für 'new-line').
"Infopark powers great websites".include?('power')
=> true
"Workshops are great for learning".start_with?('Work')
=> true
"But workshops should also be fun".end_with?('fun')
=> true
Manche Objekte haben ähnliche Methoden.
['stein', 'schere', 'papier'].index('papier')
=> 2
"Workshop".index('k')
=> 3
puts 'hier wird alles klein geschrieben'.upcase
HIER WIRD ALLES KLEIN GESCHRIEBEN => nil
'Hier wird SPASS gross geschrieben.'.downcase
=> "hier wird spass gross geschrieben."
"HIER geht's DRUNTER und DRÜBER".swapcase
Anwendungsfall unklar...
"Links wie Rechts".split(' ')
=> ["Links", "wie", "Rechts"]
"Links" + "Rechts"
=> "LinksRechts"
"Links"concat("Rechts")
=> "LinksRechts"
"Ruby und Ruby on Rails".sub('Ruby', 'Ich')
=> "Ich und Ruby on Rails"
"Ruby und Ruby on Rails".gsub('Ruby', 'Ich')
=> "Ich und Ich on Rails"
1 == 2
=> false
2 == 2
=> true
2 >= 1 || 0 >= 1
=> true
2 >= 1 && 0 >= 1
=> false
! (2 == 2)
=> false
number = 1
if number > 0
"#{number} is positive"
else
"#{number} is negative"
end
number = 0
if number > 0
"#{number} is positive"
elsif number == 0
"#{number} is zero"
else
"#{number} is negative"
end
puts "This is not displayed" unless number < 0
loop do
puts "This will not stop until I press Ctrl-C"
end
5.times do
puts "Drei ist keine gerade Zahl"
end
Eine Liste von Objekten. Es gibt zwei Arten ein Array zu erzeugen:
[]
=> []
oder
Array.new
=> []
[1, 2, 3, 4]
[1, 'two', 3, 'four']
['stein', 'schere', 'papier'][0]
=> 'stein'
['stein', 'schere', 'papier'][-1]
=> 'papier'
['stein', 'schere', 'papier'] << 'echse'
=> ['stein', 'schere', 'papier', 'echse']
['stein', 'schere', 'papier'].push('echse')
=> ['stein', 'schere', 'papier', 'echse']
['stein', 'schere', 'papier'].map { |item| item.upcase }
=> ["STEIN", "SCHERE", "PAPIER"]
Verändert nicht das Original!
['stein', 'schere', 'papier'].select { |item| item.start_with?('s') }
=> ["stein", "schere"]
['stein', 'schere', 'papier'].delete_if { |item| item.length < 6 }
=> ["schere", "papier"]
[1, 2, 3, 4, 5, 6, 7, 8].delete_if { |number| number.even? }
=> [1, 3, 5, 7]
Worte in Methodennamen werden durch _
getrennt.
array = ['stein', 'schere', 'papier']
for item in array
puts item
end
array = ['stein', 'schere', 'papier']
array.each do |item|
puts item
end
Schlüssel-Werte-Paare (key-value pairs). Können erzeugt werden durch
{}
=> {}
oder
Hash.new
=> {}
browser_versions = {
chrome: 31,
firefox: 25,
internet_explorer: 10,
}
Werte abrufen
browser_versions[:chrome]
=> 31
Werte verändern
browser_versions[:internet_explorer] = 11
=> 11
browser_versions.each do |browser, version|
puts "#{browser.capitalize}: #{version}"
end
Jedes Objekt hat eine Klasse
puts 1.class
=> Fixnum
puts "".class
=> String
puts [].class
=> Array
Man kann ein Objekt nach seiner Klasse fragen
puts 1.is_a?(Integer)
=> true
puts 1.is_a?(String)
=> false
Klassen gruppieren Funktionalität. In der Ruby werden Klassen als eine Art Bauplan verwendet. Um den Bauplan zu verwenden wird dieser initialisiert:
Object.new
=> #<Object:0x007f81c385b820>
Diese Instanz kann dann benutzt werden um zB Berechnungen durch zu führen.
Es ist natürlich auch möglich eigene Klassen zu bauen. Sehen wir später.