Früher, also so vor ca 10-12 Jahren, habe ich viel mit PHP gemacht. Muss um die Versionen 4.1 beziehungsweise 4.2 gewesen sein. Mit aktivierten register_globals
und solch netten Geschichten. Aber Jugendsünden hat wohl jeder ;).
Inkonsistente Parameter
Ich möchte an dieser Stelle auch gar nicht über PHP herziehen. Ganz im Gegenteil. Die Sprache war zum Einstieg damals sehr gut und es hat viel Spaß gemacht. Vielleicht wäre ich ohne PHP nicht in Richtung Softwareentwicklung gegangen.
Was mir schon damals sauer aufstieß, war die sehr inkonsistente Reihenfolge der Parameter bei vielen Funktionen. Vielleicht sogar bei fast allen Funktionen. So genau weiß ich das nicht mehr. Ob sich das inzwischen gebessert hat, kann ich auch nicht sagen. Ich habe schon lange nichts mehr mit PHP gemacht.
C# ist mit dabei
Heute ist mir bei der Entwicklung aufgefallen, dass dieses Phänomen auch in C# vorhanden ist. Vermutlich an nicht so vielen Stellen, sonst wäre ich schon viel früher darauf aufmerksam geworden. Abbildung 1 zeigt einen kleinen Code-Ausschnitt.
Die Markierung zeigt das Problem, wenn es nicht, bei diesem direkten Vergleich, eh schon sofort auffällt. In beiden Fällen handelt es sich um eine Exception, die angibt, dass etwas mit dem Parameter nicht stimmt. Beide Male kann der Name des Parameters angegeben werden. Sollte, meiner Meinung nach, auch Standard sein, da es womöglich bei der Fehlersuche hilft.
Allerdings stimmt die Reihenfolge nicht. Bei der ArgumentNullException
fehlt zusätzlich noch eine Überladung. Es können nicht die beiden Zeichenketten und eine innere Exception übergeben werden. Bei der ArgumentException
ist das möglich. Schade eigentlich. Wirklich gravierend ist dieses Problem natürlich nicht. Ich finde, dass erweckt immer den Eindruck der mangelnden Professionalität. Zugegeben, in diesem Fall ist das schon sehr böswillig betrachtet. Muss trotzdem nicht sein. Über die fehlende Überladung bin ich schon des öfteren gestolpert. Wirklich nachgeguckt habe ich aber nicht, ob auch andere Exceptions das Problem haben.
Fazit
Alles halb so wild. Finde ich im Grunde ja auch. Unschön ist es trotzdem, da es hin und wieder nerven kann. Wenn ihr noch mehr solcher Fälle kennt, freue ich mich über Nachrichten beziehungsweise Kommentare.
Hallo Fabian,
IMHO benötigt die ArgumentNullException die, von dir als fehlend monierte, Überladung mit der innerException als dritten Parameter nicht. Die ArgumentNullException sollte immer dann geworfen werden, wenn ein Parameter null ist. Daher kann eigentlich keine vorhergehende Exception aufgetreten sein, die das werfen einer ArgumentNullException rechtfertigt.
So sehe ich den Sachverhalt, lasse mich aber gerne eines besseren belehren.
Servus,
Klaus
Hallo Klaus,
stimmt natürlich. Grundsätzlich ist die innere Exception nicht notwendig. Zumindest, wenn es sich um einen Parameter handelt.
Danke für die Info.
Grüße,
Fabian