Open Source im professionellen Einsatz

Newsletter abonnieren
Seite durchsuchen

HEFTARCHIV | NEWS | E-BIBLIOTHEK | VIDEO | BLOGS | WHITEPAPER | EVENTS | ACADEMY | ABO | SHOP

user friendly

  Home  »  Heft & Abo  »  Heftarchiv  »  2001  »  06  »  Roter Stern  

RSS-Feed der aktuellen News von Linux-Magazin Online Folgen Sie Linux-Magazin Online auf Twitter
Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark

Kontrollierter Ausnahmezustand: Exceptions

Bei der Interpretation von Ruby-Programmen kann es vorkommen, dass Typumwandlungen scheitern (wenn eine Variable unvorhergesehen nil ist) oder dass eine auszulesende Datei überraschend nicht vorhanden ist. In diesen Ausnahmesituationen wirft der Interpreter so genannte Exceptions (Ausnahmen), die auch von Java und C++ her bekannt sind.

Fängt man eine Exception nicht selber ab, wird das Programm automatisch beendet. Das ist jedoch nicht unbedingt im eigenen Interesse, da dadurch beispielsweise umständlich berechnete Werte oder langwierige Benutzereingaben verloren gehen können. Daher kann man Exceptions im Programm abfangen, um passend zu reagieren. Das folgende kleine Beispiel reagiert beim Speichern eines Ergebnisses auf das Problem, dass die Datei mitunter nicht schreibbar ist. Dieser Effekt tritt gelegentlich auf, wenn man ein Programm aus dem Home-Verzeichnis eines anderen Users startet, der den Namen der Zieldatei fest verdrahtet hat.

Exceptions fängt man mittels begin / recue / end:

resfile = "/home/root/.result"
begin
 file = File.open(resfile, "w")
 # Daten speichern
rescue
 puts "Fehler!"
 print "Geben Sie eine schreibare "
 print "Datei für die Ergebnisse an: "
 resfile = STDIN.gets
 retry  # nommaaal!
ensure
 file.close  # Datei zu
end

Wenn resfile nicht schreibbar ist, wirft File.open(...,"w") eine entsprechende Exception. rescue fängt sie auf - und wir versuchen, das Problem zu umgehen: Der User wird aufgefordert, einen neuen Dateinamen einzugeben, der über STDIN.gets eingelesen wird. retry bewirkt, dass der kritische Block ein weiteres Mal durchlaufen wird. In diesem Beispiel ginge das endlos im Kreis, bis der User schließlich den Namen einer schreibbaren Datei angibt. Der Code nach ensure wird auf jeden Fall ausgeführt. Benutzt man ensure und rescue, muss rescue zuerst erscheinen.

Exceptions abfangen ist eine Sache - aber natürlich kann man auch selbst Exceptions werfen. Das geschieht einfach über den Befehl raise, dem man einen beschreibenden String mitgibt. Den kann man dann über $! in der Exception-Behandlung auslesen:

begin
 raise "unerwarteter Fehler"
rescue
 print "Exception!: ", $!, "n"
 print "(",$!.type,")n"
end

Exceptions sind Instanzen von Exception-Klassen, die alle von Exception abgeleitet sind. Diese wiederum sind Kinder der Mutter aller Objekte ( Object) und verfügen somit über die Methode .type, mit der sich der Name der Klasse einer Instanz auslesen lässt. Wir können also in der Ausnahmebehandlung den Typ der Exception erfahren:

begin
 a = 1 / 0
rescue
 print $!.type, " : ", $!, "n"
end

Im ersten Beispiel sah es noch so aus, als sei $! einfach ein String. Aber offensichtlich ist es eine Klasseninstanz und print hat irgendwie eine passende Methode von $! aufgerufen, um den String anzuzeigen. Es sollte uns jetzt nicht mehr überraschen, dass es sich dabei um die Standardmethode .to_s handelt.

Grafisches Allerlei

Falls die bislang beschriebenen Eigenschaften den Eindruck entstehen ließen, Ruby sei eine reine Konsolen-Sprache - dem ist nicht so. Ruby hat eine eingebaute Unterstützung für Tk, mit der der kundige Programmierer zumindest einfache GUIs schnell zusammenstricken kann.

Ein richtiges grafisches GUI-Zusammenklick-Tool gibt es leider noch nicht, allerdings immerhin schon eine Schnittstelle zu Glade, dem Gtk-GUI-Builder. Und natürlich eine direkte Schnittstelle zu Gtk+, die man samt Dokumentation auf [5] findet.

Für die Programmierung von Tk sollte man auf jeden Fall einen Blick in die Ruby-Pflichtlektüre werfen, nämlich die downloadbare Online-Version des kürzlich erschienenen Buches "Programming Ruby" [3], die unter [4] bereitsteht.

Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark
Whitepaper
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele

Über die letzten Jahre hinweg haben sich Open Source Lösungen als fester Bestandteil des gesamten Datenintegrationsmarktes etabliert. Viele Unternehmen haben bereits das Open Source Modell für Ihre Datenintegrationsprojekte aufgegriffen. Das vorliegende White Paper illustriert anhand ausgewählter Fallstudien und Anwendungsbeispiele die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.

Download PDF (Registrierung erforderlich)
The Role of Open Source in Data Integration

Obwohl in den letzten Jahren viele technische Fortschritte erzielt werden konnten, verfügen die meisten Datenintegrationsprozesse nach wie vor nur über eine sehr begrenzte Automatisierung. Das vorliegende White Paper von dem Industry Analyst Mark Madson wird zunächst ein grundlegendes Verständnis von Daten Integration vermitteln, die Vorzüge von Open Source Lösungen für Daten Integration erläutern und Ihnen professionelle Empfehlungen geben, damit Sie Ihre Integrationsjobs noch einfacher und produktiver gestalten können.

Download PDF (Registrierung erforderlich)
Kommentare (0)