Stillschweigend die Methode einfach zu verlassen ist glaube ich nicht der richtige Weg.
Ok, mir ging es eigentlich um cast vs. Guard, das wird jetzt eher philosophisch.
Aber gut:
1.) Wenn ALen = 0 dann macht die Routine mit 0-Elementen nichts : OK
2.) Wenn ALen < 0 dann kann die Routine mit < 0 Elementen auch nichts machen: So what ?
Bei 1.) ist es kein Parameterfehler, und ich sehe das bei 2.) sehr ähnlich.
Deshalb kommt ja der Gedanke Cardinal zu nutzen, weil es dann < 0 Situationen technisch gar nicht geben kann.
Das 2.) jetzt noch weiter abzufangen und zu bearbeiten ist ja genau der extra Guard-Code den ich mir sparen möchte.
Wenn meine Funktion >= 0 verlangt, und ich < 0 ignoriere (gleiches Verhalten wie 0), ist das für mich logisch erstmal konform
( mach nur das was du wirklich machen kannst ).
Für die korrekte Übergabe der Parameter ist dann der Aufrufer verantwortlich, der sicher den passenden Guard-Code schon drin hat.