Validierung von Methodenparametern
Philipp Söhnlein
- programmiertechnik
0 King^Lully2 dedlfix
2 Daniel Thoma
Tach,
ich bin bisher immer davon ausgegangen, dass man beim Programmieren von Funktionen/Methoden die übergebenen Parameter immer komplett überprüft. Das führt manchmal dazu, dass sich 80% der Codezeilen einer Methode um die Validierung kümmern und der Rest der eigentliche Code ist.
Allerdings gewinne ich in letzter Zeit den Eindruck, das es da draußen genügend Programmierer gibt, die das nicht machen.
Deshalb die Frage: Wann und wieviel überprüft ihr? Überprüft ihr zum Beispiel auch die Parameter von private Methoden, die ja wahrscheinlich vorher schon durch die aufrufende (evtl. public-) Methode überprüft werden müssten?
Gruß
Phil
Deshalb die Frage: Wann und wieviel überprüft ihr?
Gegenfrage: Auf was genau prüfen?
Deshalb die Frage: Wann und wieviel überprüft ihr?
Gegenfrage: Auf was genau prüfen?
Ah, hast recht, hätte ich erwähnen sollen.
Ich programmierer hauptsächlich in PHP. Und da PHP typenlos ist, überprüfe ich hauptsächlich mit sowas wie "is_string" oder "strlen($parameter)>0" oder "is_array($parameter) && count($parameter)>0".
So etwas in die Richtung meinte ich.
Deshalb die Frage: Wann und wieviel überprüft ihr?
Gegenfrage: Auf was genau prüfen?
Ah, hast recht, hätte ich erwähnen sollen.
Ich programmierer hauptsächlich in PHP. Und da PHP typenlos ist, überprüfe ich hauptsächlich mit sowas wie "is_string" oder "strlen($parameter)>0" oder "is_array($parameter) && count($parameter)>0".
So etwas in die Richtung meinte ich.
Man prüft also nicht um zu prüfen.
Ja, ich glaube, das ist die Antwort auf Deine Frage.
Man prüft also nicht um zu prüfen.
Wie meinen?
Man prüft also nicht um zu prüfen.
Wie meinen?
Wir bearbeiten solche Fragen immer auf höchstmöglichem Niveau, ganz abstrakt und auf Meta-Ebene bzw. Meta-Meta-Ebene. Dass Wir da nicht immer sofort verstanden werden liegt in der Natur der Sache.
Wie Dödel schon ganz richtig angemerkt hat, ist eine pauschale Antwort hier unmöglich. (Nichts gegen pauschale Antworten, diese sind essentiell, hier aber wäre eine diesbezügliche leider, leider falsch.)
Man kann ja auf alles prüfen. Man stelle sich erhaltene Parameterwerte vor, die exekutiert werden, "DEL *.*" bspw..
Oder Parameterwerte, die visualisiert zum Ausdruck gelangen, da wäre bspw. ein spezieller Pornofilter hilfreich oder eine Rechtschreibüberprüfung für Textparameter oder eine Prüfung, ob eine bestimmte E-Mailadresse valid ist oder ein bestimmter Wert numerisch usw..
Da sich Deine Frage ja ausdrücklich nicht auf Funktionsparametertypen bezieht, tja, also "Auf was prüfen?" lautete die korrekte Gegenfrage.
echo $begrüßung;
Deshalb die Frage: Wann und wieviel überprüft ihr?
Das kann man (ich zumindest) so pauschal gefragt nicht pauschal beantworten. Es kommt immer auf die konkreten Gegebenheiten an. Meiner Meinung nach muss man nur sicherstellen, dass keine groben Unfälle passieren können, die auf Sicherheitslücken im eigenen Code basieren. Wenn der Anwender einer Funktion die Dokumentation nicht genau liest und falsche Dinge übergibt, ist das zunächst erstmal sein Problem. Hier muss man auch Prüfaufwand Nutzen und Sicherheitsaspekte gegeneinander abwägen. Erfahrung und Bauchgefühl ist hierbei sehr von Nutzen ...
echo "$verabschiedung $name";
Hallo Philipp,
Im allgemeinen Prüfe ich sowas bei Schnittstellen zwischen Komponenten, aber innerhalb von Komponenten nicht. Bei privaten Methoden schon gar nicht.
Die Zulässigen Aufrufparameter kann man im Kopfkommentar einer Methode angeben.
Konsistenzbedingungen, von denen man sich verspricht, leichter Fehler zu entdecken, kann man auch an Stellen einbauen, an denen man sonst auf eine Überprüfung verzichten würde. (Manche Programmiersprachen verfügen auch über spezielle Syntax für solche Checks)
Eine vollständige Validierung besonders bei komplexen Strukturen (also z.B. Eigenschaften irgendwelcher Graphstrukturen) würde ich aber nur an öffentlichen Schnittstellen machen. Solche Überprüfungenen benötigen relativ viel Code und auch so viel Laufzeit, dass man sie nicht dauernd durchführen sollte.
Grüße
Daniel
Im allgemeinen Prüfe ich sowas bei Schnittstellen zwischen Komponenten, aber innerhalb von Komponenten nicht. Bei privaten Methoden schon gar nicht.
Wollen Wir aber mal der Vollständigkeit feststellen, dass:
Übrigens prüfst auch Du immer Parameterwerte, hoffe ich zumindest.