Autor |
Beitrag |
Palladin007
      
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Mi 05.12.12 23:52
Abend
ich hatte eben eine Idee und zwar hab ich überlegt, ob man nicht Warnungen, ähnlich wie Exceptions, werfen lassen kann.
Im Prinzip funktionieren sie fast genauso wie Exceptions, allerdings wird das Programm nicht beendet, wenn sie nicht abgefangen werden. Wenn sie jedoch abgefangen werden, dann wird die Methode pausiert und wartet darauf, was geschehen soll. So kann in der Auswertung der Warnung angegeben werden, ob die Methode weiter laufen soll oder nicht.
So können innerhalb einer Klasse Warnungen ausgegeben werden, die wahlweise behandelt werden, bei denen die Behandlung aber nicht notwendig ist.
Ein Beispiel:
Bei einem Adressbuch kann man eMail-Adressen speichern und die werden vorher auf Validität geprüft. Ist sie nicht korrekt, wird kein Fehler ausgegeben, der dann an anderen Stellen zwingen abgefangen werden muss, sondern nur eine Warnung. Wird sie abgefangen, kann sie direkt behandelt und beispielsweise eine Meldung angezeigt werden und der Nutzer entscheidet, ob die fehlerhafte Adresse gespeichert werden soll, oder nicht. Wenn die Warnung nicht abgefangen wird, dann wird die Adrese einfach ohne Aktion gespeichert.
Ich finde das ganz praktisch, da ich Exceptions allgemein für sehr praktisch halte, bei denen aber die Pflicht besteht, sie zu behandeln. Natürlich kann das auch über den Rückgabewert gelöst werden, wenn eine Methode aber schon etwas anderes zurück gibt, wirds unübersichtlich, außerdem würde dann eine Methode bei einer Warnung nicht gestoppt werden und es besteht auch nicht die Möglichkeit, sie abzubrechen.
Gibt es sowas ähnliches, oder gibt es eine einfache Möglichkeit, das durch andere Mittel ebenso einfach zu erreichen?
Gruß
|
|
Flamefire
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Do 06.12.12 00:32
Ja gibt es und nennt sich ShowMessage() (und deren Varianten)
Ernsthaft: Exception-->Irgendwas ist kaputt. Behandle das.
Deine "Warnung": Fehlerhafte Eingabe. Sollte vom Programm behandelt werden oder auch nicht. Also schreibt man sein Programm so, dass es die Eingabe prüft, oder halt nicht...
Dein Problem ist also mit Programmlogik zu lösen. Dafür ist das schließlich da. Und Ein MessageBox("Fehler, weiter JA<->Nein") kommt dann halt an die entsprechende Stelle...
|
|
Palladin007 
      
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Do 06.12.12 01:21
Naja, aber so eine Warnung ist ja kein Fehler. Wenn eine falsche eMail-Adresse im Adressbuch steht, juckt das das Programm nicht die Bohne und es wäre auch unlogisch, wenn das als Fehler gewertet wird.
Wenn das Adressbuch aber auch anbietet, direkt eine eMail zu senden, an eine gespeicherte Adresse, wird es spätestens dann zu einem Fehler, wenn die falsche Adresse genutzt werden soll und dann wird es auch als Fehler behandelt.
Natürlich kann auch direkt geprüft werden ob die Adresse stimmt, aber das müsste man dann extra erledigen, indem man eine entsprechende Methode innerhalb oder außerhalb der Klasse aufruft. Wenn die Klasse die angegebene eMail-Adresse aber nun intern überprüft und dann eine Warnung ausgibt, dann kann dieser Schritt übersprungen werden, die Klasse läuft also zunehmend automatisch, es müssen also keine weiteren Arbeitsschritte erledigt werden um eine Referenz der Klasse zu erhalten.
Natürlich könnte ich auch eine Exception werfen. Jedoch genau betrachtet ist das kein Fehler, aber es kann eventuell zu einem Fehler werden, je nachdem, wie die Referenz genutzt werden soll. Wenn also später definitiv nicht die Gefahr besteht, dass die falsche Adresse zum Kollaps führt und wenn das auch bei der Entwicklung schon bekannt ist, dann muss man sich doch nicht mit einem Fehler befassen, der gar keiner ist, sondern nur ein eventueller Fehler, der später Probleme machen könnte.
Oder die Adresse wird gar nicht weiter verarbeitet und ist aus Sicht des Programms nur eine simple Zeichenfolge, die gespeichert und angezeigt wird. Dennoch wäre es im Interesse des Nutzers, wenn angezeigt wird, dass die eingegebene Adresse fehlerhaft ist, aber wenn die selbe Klasse in einer anderen Anwendung genutzt wird, dann ist das vielleicht nicht mehr interessant, die Exception müsste aber trotzdem abgefangen werden, weil die Klasse nicht weiß, ob das interessant ist oder nicht.
Ich hoffe, du verstehst jetzt, was ich meine. ^^
Das soll kein Fehler sein, sondern einfach nur ein Hinweis oder eine Warnung, dass der Inhalt automatisch erkannt wird und zum Abruf bereit steht, ohne das außerhalb der Klasse sich darum gekümmert werden muss.
Ich hab mir das so vorgestellt, dass man die Methode nicht direkt ausführt, sondern dass sie in einer anderen Methode ausgeführt wird, die wiederum die Parameter enthält und je nach Angabe den Fehler anzeigt, oder als Rückgabewert ausgibt.
Wird das nicht gemacht, dann läuft alles ganz normal weiter, als wäre nichts und die falsche Adresse wird gespeichert, dem Programm ist das dann egal, weil es ja bekanntermaßen später nicht wichtig wird.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 06.12.12 08:17
Das kann man z.B. mit einem Event OnInvalidMailAdress lösen, das die Komponente wirft. Dann kannst du darin einen var-Parameter anbieten, der die Mailadresse enthält und einen weiteren, der angibt, ob die Verarbeitung weitergehen soll. Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| TOnInvalidMailAdress = procedure(Sender: TObject; var AAdress: string; var AIgnore: Boolean);
private FOnInvalidMailAdress = TOnInvalidMailAdress; public property OnInvalidMailAdress: TOnInvalidMailAdress...
IgnoreInvalidMail := False; if InvalidMail and Assigned(FOnInvalidMailAdress) then FOnInvalidMailAdress(Self, CurrentMailAdress, IgnoreInvalidMail); if InvalidMail and not IgnoreInvalidMail then else |
|
|
Palladin007 
      
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Do 06.12.12 13:48
Gut, ich hätte noch erwähnen sollen, dass ich das für C# suche. ^^
Delphi kann ich nicht :/
Kann ich denn davon ausgehen, dass es so etwas noch nicht gibt?
Denn dann schreib ich eine Klasse, die genau das tut. Ich hätte nämlich vor, das auf ähnliche Weise zu lösen.
Dass ein Event ausgelöst wird, wenn so eine Warnung auftritt und als Parameter werden die typischen Infos gegeben, die man auch bei Exceptions finden würde.
Und als zweite Variante, wenn man keine Event-Methode nutzen will (z.B. in einer einfachen Konsolen-Anwendung) kann man die Methode als Parameter an eine Methode dieser neuen Klasse übergeben und als Rückgabewert werden dann die Informationen gegeben.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 07.12.12 00:36
Das Vorgehen ist da das selbe, nur eben eine andere Syntax, du deklarierst das Event usw.
|
|
|