Forum: Object-Pascal / Delphi-Language
by Der schöne Günther,
26. Mai 2021
Dem würde ich aber härtestens widersprechen. Das schiebt doch nur die Verantwortung von sich weg.
https://de.wikipedia.org/wiki/Fail-Fast
Es ist doch kein Aufwand einmal eine Klassenmethode CheckArguments(const bytes: TBytes; const index: NativeInt) einzuführen, die kannst du überall recyclen. Alternativ bringt z.B. Spring4D gleich ein Guard.CheckRange(..) mit (wie viele andere auch). An...
Forum: Object-Pascal / Delphi-Language
by Der schöne Günther,
26. Mai 2021
Stillschweigend die Methode einfach zu verlassen ist glaube ich nicht der richtige Weg.
if(ALen < 0) then
raise EArgumentOutOfRangeException.Create(..);
if(ALen > Length(AArray)) then
raise EArgumentOutOfRangeException.Create(..);
Forum: Object-Pascal / Delphi-Language
by Der schöne Günther,
26. Mai 2021
Ganz genau das wollte ich grade auch schreiben.
Jetzt bleibt mir nur noch der Verweis auf andere Sprachen zum Vergleich (size_t in C++, oder dass size() bzw Length in Java oder C# auch mit Vorzeichen sind).
Forum: Object-Pascal / Delphi-Language
by Der schöne Günther,
26. Mai 2021
Wenn du einen Index für eine For-schleife nimmst dann nimmst du hoffentlich logischerweise auch immer einen vorzeichenbehafteten Typ (wie Integer).
Beispiel:
for var i: Cardinal := Low(items) to High(items)
verursacht ein Out Of Range wenn items leer ist. Warum? Weil High(..) -1 zurückgibt.