Ruby-Programmierung: Rückblick: Grundlagen

Zurück zum Inhaltsverzeichnis.

Im ersten Teil des Buches wurden die Grundlagen für die Programmierung in Ruby dargestellt. Bis auf wenige Ausnahmen bzw. Ausblicke wurde dabei auf Objektorientierung verzichtet. Am Anfang des Buches wurde jedoch gesagt, dass Ruby eine durchgehend objektorientierte Sprache ist. Dieses Kapitel soll nun darüber Aufschluss geben, wie die Grundlagen mit der Obejktorientierung zusammenhängen und was sich daraus für Möglichkeiten und ggf. Probleme ergeben.

In anderen objektorientierten Sprachen, wie zum Beispiel Java unterscheidet man zwischen nativen Datentypen und Objekten. Eine Variable von Typ Integer ist also nicht dasselbe, wie eine Objektinstanz der Klasse Integer. Dadurch ist es nicht möglich durch einfache Initialisierung mit int i = 2 die Möglichkeiten der Objektorientierung zu nutzen, sondern muss danach eine Objektinstanz erzeugen und mit dem Integerwert füllen. (Für dieses Problem existiert eine Kurzform, ähnlich dem in Ruby verwendeten Fixnum.new(2).) Ruby verzichtet auf Datentypen und alles ist eine Instanz.

Alles, wirklich Alles

Bearbeiten

Öffnen Sie eine IRB-Session und probieren Sie self.class. Methoden, Zahlen usw. sind Objektinstanzen entsprechender Klassen. Unter anderem ist es dadurch auch möglich, vorhandene Klassen zu verändern. Sie können vorhandene Methoden ändern und Ihren Bedürfnissen anpassen, oder neue hinzufügen und zwar ohne auf Vererbung zurückgreifen zu müssen. Dabei ist jedoch Vorsicht geboten: Sie können Ihren kompletten Code ruinieren, wenn Sie an anderer Stelle auf eben eine gewünschte Funktionalität erwarten und diese überschreiben. Andererseits können Sie Ihren Code auch brauchbar behalten, wenn sich eine Klasse durch Ihren Code zieht und Sie eine Methode hinzufügen.

Nocheinmal: Fakultät

Bearbeiten

Diese Eigenschaft lässt sich nutzen, wenn man vorhandene Klassen verändern möchte, um beispielsweise Methoden hinzuzufügen, oder auch vorhandene verändern möchte. Das folgende Skript betrachtet nocheinmal die Fakultät, diesmal jedoch als Methode der Klasse Fixnum und durch einen geeigneten Bezeichner dargestellt.

class Fixnum
  def !
    self.zero? ? 1 : self * (self - 1).!
  end
end

if ARGV[0] 
  puts "#{ ARGV[0] }! = #{ ARGV[0].to_i.! }"
else
  puts "Fehler."
end