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.
| 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)
|
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links"
nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedrucken Fassung entsprechen.
|