Try und Catch Beispiel
Übersicht BlitzMax, BlitzMax NG Allgemein
Suco-XBetreff: Try und Catch Beispiel |
Do, März 10, 2005 19:53 Antworten mit Zitat |
|
---|---|---|
Tach
Ich weiss das diese Befehle irgendeinen nützlichen Sinn haben. Nur ich raff das noch nicht so ganz. Das eine Beispiel ist auch nicht wirklich aufschlussreich. Hat da jemand mehr Erfahrung und kann mir ein paar sinnvolle Samples bieten? Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
Dreamora |
Do, März 10, 2005 20:07 Antworten mit Zitat |
|
---|---|---|
Naja ich denke das Beispiel in der Hilfe zeigt sehr gut, wie der Befehl, bzw die ganzen Befehle ( try - end try, catch und throw ) funktionieren.
Der vorteil von diesem konstrukt ist, dass es unabhängig von der ebene den catch auslöst, wie du am Beispiel siehst ( repeat forever wird ja nie verlassen ). Dadurch musst du nicht raus wenn ein Fehler eintritt oder etwas, sonst es kommt automatisch in die Fehlerbehandlung. Dadurch kannst du sinnvolle Fehlermeldungen ausgeben die dir helfen in grösseren Alpha / Beta Tests allfällige Fehler zu verfolgen. Einfach beim catch eine funktion aufrufen mit dem ge-catch-ten string ... Hoffe das hilft dir ein wenig ... sonst einfach melden. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Valio |
Do, März 10, 2005 23:24 Antworten mit Zitat |
|
---|---|---|
Es ist wie mit OOP: Wenn man es nie probiert hat findet man es umständlich und sieht keinen direkten Nutzen darin. Versuchs in ein paar Programmen... | ||
Programming today is a race between software engineers striving to build better and bigger idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. - Rick Cook
Gegen TCPA || Stoppt RFID || Tux user #361946 || User posted image |
stfighter01 |
Fr, März 11, 2005 0:27 Antworten mit Zitat |
|
---|---|---|
1 vorteil von try, catch... ist das der benutzer des objects gezwungen ist den
möglich auftretenden fehler zu behandeln u. entsprechende maßnahmen einzuleiten. (zumindest bei java muss man den fehler zwingendermassen behandeln, unter bmax bin ich mir jetzt nicht sicher) 2 die fehlerbehandlung selbst wird viel effizienter. wenn z.b: eine IOexception ausgeworfen wird bei einem openstream() befehl, so werden die nachfolgenden befehle im try block nicht mehr behandlet, stattdessen wird direkt in den catch block gesprungen der diese fehler exception bearbeitet. dadurch spart man sich eine menge verschachtelter if abfragen. der fehler wird solange nach oben (aus den funktionen bzw.: methoden) in die nächsthöhere weitergeleitet, bis der fehler mit mit catch aufgefangen wird, passiert das nicht, so fängt die fehlermeldung am ende der hierachie der debugger , und beendet das programm mit der entsprechenden fehlermeldung. mfg stfighter |
||
Denken hilft! |
Jolinah |
Fr, März 11, 2005 0:29 Antworten mit Zitat |
|
---|---|---|
Code: [AUSKLAPPEN] Function DoSomething() Local x = 0 Try x = ReadByte(stream) Catch throw "Fehler beim Lesen" End Try Print x End Function Try DoSomething() Catch ex:object Print string(ex) End Try Wie schon gesagt: Es wird zur Fehlerbehandlung benutzt. Vorteil davon ist das sich die Try Catch Konstrukte sozusagen mit dem throw verschachteln lassen. Wirft man mit throw einen Fehler raus so kann dieser in einem äusseren Try Catch abgefangen werden und man kann entsprechend danach Handeln. Throw kann überall benutzt werden, nicht nur in einem Catch. Also könnte man sowas machen: Code: [AUSKLAPPEN] Function DoSomething() If x < 0 throw "NegativeException" Elseif x > 2000 throw "TooLargeException" Endif x = x + 1 End Function Try DoSomething() Print "hallo welt" Catch ex:object if string(ex) = "NegativeException" x = 0 Print "X negativ!" else if string(ex) = "TooLargeException" x = 0 Print "X > 2000" End endif End Try Ok ist vielleicht ein doofes Beispiel, aber ich denke so sollte es verständlich sein. Bei throw fliegt er dann aus der Funktion raus in das äussere catch. Da er direkt in das catch fliegt wird Print "hallo welt" nicht mehr ausgeführt welches im try block steht. Bei C# gibts noch ein Finally, weiss nicht obs das hier auch gibt: Finally würde nach dem catch kommen und das wird in jedem Fall ausgeführt ob es nun zum Catch gekommen ist oder nicht. Letztes Beispiel Zum Teil Pseudo... Code: [AUSKLAPPEN] Try sql = new SqlConnection UpdateDatenbank1() UpdateDatenbank2() Catch ex:Object If typeof(ex) = NoSqlConnectionException Print "Keine Datenbankverbindung" Endif Finally CloseSQL(sql) End Try Wenn die SQL Verbindung fehlschlägt springt es ins catch und es wird gar nicht erst versucht die Datenbank upzudaten, weil das ohne Verbindung ja eh schief laufen würde. Falls es das finally in bmax gibt würde es hier dafür sorgen das die Verbindung am Schluss geschlossen wird, egal ob alles ohne fehler lief oder ob es ins catch gesprungen ist. |
||
- Zuletzt bearbeitet von Jolinah am Fr, März 11, 2005 1:57, insgesamt einmal bearbeitet
Demon |
Fr, März 11, 2005 1:50 Antworten mit Zitat |
|
---|---|---|
Gutes Beispiel, gute Erklärung. | ||
Don't drink and derive! |
DivineDominion |
Fr, März 11, 2005 8:11 Antworten mit Zitat |
|
---|---|---|
Find ich auch. Klasse gemacht! Verschieben nach FAQ & Tutorials vielleicht? | ||
christian.tietze@gmail.com - https://christiantietze.de
macOS |
Übersicht BlitzMax, BlitzMax NG Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group