Thread Argumente/Parameter wo prüfen ? (19 answers)
Opened by der_thomas at 2014-09-15 18:44

rosti
 2014-09-15 19:36
#177288 #177288
User since
2011-03-19
3472 Artikel
BenutzerIn
[Homepage]
user image
Quote
Wo sollen übergebene Parameter geprüft werden, in den Klassenmethoden oder beim Aufrufer ?


Mach Dir ersteinmal klar, was eine Klassenmethode ist: Sie wird mit dem Namen der Klasse aufgerufen, z.B.:

Code (perl): (dl )
1
2
3
use Class;
Class->method();
Class->new(); #  das kennen wir alle


Etwas ausführlicher:

Code (perl): (dl )
1
2
3
4
5
6
7
use Class;

# Klassenmethode
my $instance = Class->new(); # Erstelle Objekt, eine Instanz der Klasse

# Mit der Instanz eine Methode aufrufen
$instance->foo();


Argumente prüfen und Fehlerbehandlung, Unterscheide zwischen:
1) Fehler die ein Programmierer in der Anwendung der Class-API macht
2) Fehler die ein Benutzer bei einer Eingabe ins Programm macht

Wenn Du eigene Module schreibst, hast Du die Möglichkeit, beide Fälle im Modul abzuhandeln. Hier ist ein Beispiel von mir: http://rolfrost.de/sca.pm
Die unterschiedliche Handhabe:
Fehler zu (1): Es wird eine Exception mit croak() geworfen, der Programmierer bekommt einen Backtrace und sieht, an welcher Stelle er im Code die API nicht richtig anwendet
Fehler zu (2): Es wird eine Exception geworfen mit die(), der Backtrace wird unterdrückt und die Meldung kann bis zum Endbenutzer durchgereicht werden.

Es liegt an Deinem Gesamtkonzept, inwieweit Du mit dem Exception-Model umgehen kannst, d.h., der Meldetexte einer Exception kann auch über eine entsprechende Methode bis zum Endbenutzer durchgereicht werden. Auf diese Art und Weise lässt sich einiges an Code vereinfachen.

Nun zu Deiner Methode, möglich wäre:
Code (perl): (dl )
$object->machwas(5);


1) Dein Programm stellt sicher, dass nur einstellige Zahlen reinkommen
2) machwas(99) wirft eine Exception, wenn die Zahl nicht zwischen 0..9 liegt

Z.B. in einer Webanwendung:
Code (perl): (dl )
1
2
$object->machwas(5) or 
    return $gui->Fehlerseite( title => 'Eingabefehler', descr => 'Die Zahl muss zwischen 0..9 liegen' );


Und: Sei froh, dass Du in Perl (noch) keinen typecast machen musst, so wie in JavaScript ( http://rolfrost.de/scaligerclass.html )

View full thread Argumente/Parameter wo prüfen ?