Ruby (Programmiersprache): Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 17: | Zeile 17: | ||
* Automatisches Garbage Collection | * Automatisches Garbage Collection | ||
* Metaprogrammierung: Klassen und Objekte können zur Laufzeit "geöffnet" und Methoden hinzugefügt oder verändert werden. | * Metaprogrammierung: Klassen und Objekte können zur Laufzeit "geöffnet" und Methoden hinzugefügt oder verändert werden. | ||
* Mixins: Module könne in Klassen "eingemischt" werden. | |||
* Packetmanager [[RubyGems]] | * Packetmanager [[RubyGems]] | ||
Zeile 83: | Zeile 84: | ||
end | end | ||
# Die Klasse Auto wird geöffnet und die Methode gas_geben neu definiert | |||
class Auto | class Auto | ||
def gas_geben | def gas_geben | ||
Zeile 103: | Zeile 105: | ||
end | end | ||
# Die Klasse Auto wird geöffnet und die Methode gas_geben neu definiert | |||
class Auto | class Auto | ||
def gas_geben | def gas_geben | ||
Zeile 112: | Zeile 115: | ||
a = Auto.new | a = Auto.new | ||
# Hier wird nur dem Objekt a eine Methode hinzugefügt | |||
class << a | class << a | ||
def bremsen | def bremsen | ||
Zeile 122: | Zeile 126: | ||
</source> | </source> | ||
Metaprogrammierung mit class_eval | |||
<source lang="ruby"> | |||
class Auto | |||
def gas_geben | |||
"gas geben" | |||
end | |||
end | |||
class Auto | |||
def gas_geben | |||
"noch schneller gas geben" | |||
end | |||
end | |||
a = Auto.new | |||
class << a | |||
def bremsen | |||
"bremsen..." | |||
end | |||
end | |||
# Ab sofort gibt es für Auto-Klassen auch eine bremsen-Methode | |||
Auto.class_eval do | |||
def bremsen | |||
"quieeeetscch......" | |||
end | |||
end | |||
puts a.bremsen # => "bremsen..." | |||
puts Auto.new.bremsen # => "quieeeetscch......" | |||
</source> | |||
class_eval evaluiert einen String oder übergebenen Block im Klassenkontext. | |||
Version vom 9. Juli 2009, 12:03 Uhr
Definition
Ruby ist eine objektorientierte Skriptsprache, die Syntaxelemente von Perl mit Features von Smalltalk kombiniert.
Geschichte
Ruby wurde in Japan von Yukihiro "Matz" Matsumoto entwickelt und 1995 in der ersten Version veröffentlicht.
Interpreter
Abgesehen vom Original-Interpreter MRI (Matz-Ruby-Interpreter) gibt es inzwischen Portierungen für Java (JRuby) oder .NET (IronRuby). Damit lassen sich mit Ruby alle Klassen und Bibliotheken der zugrunde liegenden Plattform verwenden.
Integration
Die Integration von JRuby geht sogar so weit, dass sich mit Ruby on Rails JEE-konforme Webanwendungen entwickeln lassen, die man in einem JEE-Container deployen kann. Noch bessere Bytecode-Kompatibilität für Java bietet Groovy.
Features
- plattformübergreifend verwendbar
- strenges objektorientiertes Prardigma: Alle Datentypen sind Objekte, auch primitive Datentypen wie Integer und sogar Klassen werden als Objekte behandelt.
- Unterstüzung von regulären Ausdrücken auf Sprachebene
- Automatisches Garbage Collection
- Metaprogrammierung: Klassen und Objekte können zur Laufzeit "geöffnet" und Methoden hinzugefügt oder verändert werden.
- Mixins: Module könne in Klassen "eingemischt" werden.
- Packetmanager RubyGems
Ruby Shell
Bei jeder Ruby-Installation ist eine Shell enthalten. Die „irb“-Shell („Interactive Ruby“) kann verwendet werden, um schnell und einfach Ausdrücke zu testen.
Beispiele
Integer:
irb(main):001:0> n = 2 * 3 + 2
=> 8
irb(main):002:0> n.class
=> Fixnum
String:
irb(main):001:0>n = "Hallo " * 3
=> "Hallo Hallo Hallo"
irb(main):002:0> n.class
=> String
irb(main):003:0> n[0,5]
=> "Hallo
Schleifen:
irb(main):001:0> a = 0
=> 0
irb(main):002:0> 1.upto(5) do |i| a = a + i end
=> 1
irb(main):003:0> a
=> 15
Listen und Iterator:
irb(main):001:0> a = [ "a", "b", 2, "z", "21" ]
=> ["a", "b", 2, "z", "21"]
irb(main):002:0> a.pop
=> "21"
irb(main):003:0> a
=> ["a", "b", 2, "z"]
irb(main):004:0> a.each do |c| puts c.class end
String
String
Fixnum
String
=> ["a", "b", 2, "z"]
Metaprogrammierung, Klassenerweiterung:
class Auto
def gas_geben
"gas geben"
end
end
# Die Klasse Auto wird geöffnet und die Methode gas_geben neu definiert
class Auto
def gas_geben
"noch schneller gas geben"
end
end
a = Auto.new
puts a.gas_geben # => "noch schneller gas geben"
Metaprogrammierung, Objekterweiterung:
class Auto
def gas_geben
"gas geben"
end
end
# Die Klasse Auto wird geöffnet und die Methode gas_geben neu definiert
class Auto
def gas_geben
"noch schneller gas geben"
end
end
a = Auto.new
# Hier wird nur dem Objekt a eine Methode hinzugefügt
class << a
def bremsen
"bremsen..."
end
end
puts a.bremsen # => "bremsen..."
puts Auto.new.bremsen # => noMethodError
Metaprogrammierung mit class_eval
class Auto
def gas_geben
"gas geben"
end
end
class Auto
def gas_geben
"noch schneller gas geben"
end
end
a = Auto.new
class << a
def bremsen
"bremsen..."
end
end
# Ab sofort gibt es für Auto-Klassen auch eine bremsen-Methode
Auto.class_eval do
def bremsen
"quieeeetscch......"
end
end
puts a.bremsen # => "bremsen..."
puts Auto.new.bremsen # => "quieeeetscch......"
class_eval evaluiert einen String oder übergebenen Block im Klassenkontext.
JRuby: Verwendung von Swing mit JRuby
require "java"
frame = javax.swing.JFrame.new()
frame.setSize 200, 200
frame.add javax.swing.JLabel.new("hallo welt")
frame.setVisible true
Quellen
- Ruby-Website
- Armin Roehrl und Stefan Schmiedl (2004): Big in Japan. Linux-Magazin Sonderheft Scripting Edition, Linux New Media AG
- JRuby
- Groovy
Siehe auch
Bitte die Regeln der GlossarWiki-Quellenformatierung beachten.