Try und Catch Beispiel

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Suco-X

Betreff: Try und Catch Beispiel

BeitragDo, März 10, 2005 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, März 10, 2005 20:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, März 10, 2005 23:24
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, März 11, 2005 0:27
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, März 11, 2005 0:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

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

BeitragFr, März 11, 2005 1:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Gutes Beispiel, gute Erklärung.
Don't drink and derive!

DivineDominion

BeitragFr, März 11, 2005 8:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Find ich auch. Klasse gemacht! Verschieben nach FAQ & Tutorials vielleicht?
christian.tietze@gmail.com - https://christiantietze.de
macOS

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group